(57)【要約】【課題】関数のセクション配置とセクションのメモリ配置を手動的若しくは自動的に生成、表示、編集するプログラム開発支援装置。【解決手段】ソース・ファイルから関数の呼出関係を抽出する関数呼出情報入力部３２と、リンク時に使用する設定ファイルからアブソリュート・セクションの配置情報を取り出すリンク設定ファイル入力部３８と、関数をリロケータブル・セクション又はアブソリュート・セクションに配置するセクション編集部９２と、関数の配置情報を関数配置設定ファイルとして出力する関数配置設定ファイル出力部５と、リロケータブル・セクション、アブソリュート・セクションの配置情報を出力するリンク設定ファイル出力部４０とを備えるプログラム開発支援装置２４。【選択図】図３
2007293383.tif 000002
【特許請求の範囲】
【請求項１】
ソース・ファイルから関数の呼出関係を抽出する関数呼出情報入力部と、
リンク時に使用する設定ファイルからアブソリュート・セクションの配置情報を取り出すリンク設定ファイル入力部と、
関数をリロケータブル・セクション又はアブソリュート・セクションに配置するセクション編集部と、
関数の配置情報を関数配置設定ファイルとして出力する関数配置設定ファイル出力部と、
リロケータブル・セクション、アブソリュート・セクションの配置情報を出力するリンク設定ファイル出力部
とを備えることを特徴とするプログラム開発支援装置。
【請求項２】
ソース・ファイルから関数の呼出関係を抽出する関数呼出情報入力部と、
リンク時に使用する設定ファイルからアブソリュート・セクションの配置情報を取り出す リンク設定ファイル入力部と、
プログラムコードの命令メモリ領域への割当を求めるセクション割当部と、
関数の配置情報を関数配置設定ファイルとして出力する関数配置設定ファイル出力部と、
リロケータブル・セクション、アブソリュート・セクションの配置情報を出力するリンク設定ファイル出力部
とを備えることを特徴とするプログラム開発支援装置。
【請求項３】
前記セクション割当部は、関数コールグラフを元にプログラムコードの命令メモリ領域への割当を求めることを特徴とする請求項２記載のプログラム開発支援装置。
【請求項４】
前記セクション割当部は、プログラムの実行時の関数呼出系列である関数実行履歴を入力として、プログラムコードの命令メモリ領域への割当を求めることを特徴とする請求項３記載のプログラム開発支援装置。
【請求項５】
ソース・ファイルから関数の呼出関係を抽出する関数呼出情報入力ステップと、
関数配置情報ファイルから関数のリロケータブル・セクションへの配置情報を取り出す関数配置情報入力ステップと、
リンク時に使用する設定ファイルからアブソリュート・セクションの配置情報を取り出す リンク設定ファイル入力ステップと、
関数をリロケータブル・セクション又はアブソリュート・セクションに配置するセクション編集ステップと、
関数の配置情報を関数配置設定ファイルとして出力する関数配置設定ファイル出力ステップと、
リロケータブル・セクション、アブソリュート・セクションの配置情報を出力するリンク設定ファイル出力ステップ
とを備えることを特徴とするプログラム開発支援装置の動作方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム開発支援装置及びプログラム開発支援装置の動作方法に関し、特に、組み込みプロセッサ用アプリケーションの開発において使用され、関数のセクション配置とセクションのメモリ配置を手動的若しくは自動的に生成、表示、編集するプログラム開発支援装置及びプログラム開発支援装置の動作方法に関する。
【背景技術】
【０００２】
組み込み向けプロセッサにおいては、プログラム実行のための命令メモリの容量が、プログラムのサイズに比べて少ないのが一般的である。又備えている機構が比較的限られているために、命令キャッシュやＭＭＵ等を用いて実現される仮想記憶のような、限られた容量の命令メモリを活用する仕組みを備えていない場合も少なからず存在する。このような場合において用いられる手法の一つに、プログラムのオーバーレイがある。
【０００３】
オーバーレイとは、命令メモリやデータメモリ中に置かれているプログラムコードやデータの一部を、プログラムの実行に応じて他のコードやデータで書き換えることである。プログラムを実行する場合においては、プログラム全体を命令メモリに置く代わりに、現在及び近い将来に実行される一部の関数のみを命令メモリ上に配置しておく。そしてプログラムの実行の進み方に応じて、その時点での実行に必要ない関数の配置されている領域に、新しい関数を上書きする形で配置し呼び出す、といった方法がとられる。例えば、関数ａから関数ｂと関数ｃが順番に呼び出されるプログラムがあった場合、実行開始時には関数ａと関数ｂのみを命令メモリ上に配置し、関数ｂが実行終了した時点で、関数ｂの置かれていた領域に関数ｃのコードを上書きし、その後関数ｃを呼び出す、といったやり方が考えられる。
【０００４】
オーバーレイを行う場合、プログラム全体はプロセッサの命令メモリ以外の、より大容量だが低速なメモリ（ＲＯＭや外部接続のＳＤＲＡＭなど）に配置され、実行に必要な部分のみを随時命令メモリに転送することになる。多くの場合、プロセッサの命令メモリはＲＯＭやＳＤＲＡＭと比べて高速である反面高価であるため、オーバーレイを用いることで、プロセッサが備える命令メモリの容量を少なく抑えることができ、結果として組み込みプロセッサやそれを組み込んだシステムＬＳＩの小型化やコストダウンを図ることができる。
【０００５】
命令コードのオーバーレイを行う場合の問題点として、コード全体の内のどの部分を、命令メモリのどの領域に、どのタイミングで転送するかを決定するのが難しい、という点がある。実行されるべきコードは、必要な時点において命令メモリ上に配置されていなければならないが、同時にそれまでその配置領域にあった別コードが参照されないように設計しなければならない。誤って、実行される可能性のあるコードを異なるコードで上書きした場合、プログラムの実行がその領域に到達した場合に、プログラム設計者の意図するコードと異なるコードが実行され、結果としてプログラム全体が正常に動作しなくなる危険があるからである。
【０００６】
又このような問題は、プログラムの設計時のみならず、その後の修正時にも発生しうる。例えば、関数ａの後ろのアドレスに関数ｂが連続して配置されている状態において、関数ａを後から修正してサイズが大きくなった場合、関数ｂの配置領域を関数ａのサイズ増加分だけ後ろへ動かすか、もしくは関数ａと関係しない別の領域へ移動しなければならない。さもないと、関数ｂの先頭領域が関数ａの末尾部分のコードで上書きされ、関数ｂが呼び出された際に意図しないコードを実行してしまうからである。このような修正時の配置領域の調整は、上記関数ａ，ｂ以外のほかのコードにも影響しうるため、プログラムの若干の修正に対して、プログラム全体のコード配置の再検討が必要になる場合もあり、結果としてプログラム本体の設計に比べてはるかに多い時間をコード配置の設計に費やす場合もある。又、配置が正しくなかった場合に設計者の意図しないコードが実行されるため、不具合点の発見や修正が難しい。
【０００７】
又、一般にメモリ上へのコードの配置は、１つ以上の関数を含むセクションを単位として行うが、どのようなセクションを作成し、その中にどの関数を配置し、更にセクションを命令メモリ全体のどの領域に配置するかも、設計上の大きな問題となりうる。通常、セクションの中により多くの関数が含めるよう設計した場合、実行時のセクションの切り替えによる外部メモリから命令メモリへの転送回数が減り、実行時間の短縮に寄与する。反面、セクションのサイズが大きくなるので、限られたサイズの命令メモリ中への配置が難しくなり、又上で述べたような誤ったコードの上書きが発生しやすくなる。
【０００８】
従来、オーバーレイにおけるコード配置の設計は、プログラム設計者もしくは開発者がプログラム開発の一環として手動で行っていた。プログラムがより大規模になるのに伴って、プログラムのオーバーレイ化に伴う設計コストはプログラム全体の設計コストに比べて無視できないほど大きくなり、結果として組み込みプロセッサ向けのプログラム開発に大きな影響を与える場合が出てきた。
【０００９】
使用頻度の高い共通モジュールを予備アドレス指定可能回路バンクに格納して、モリエイリアシングの効率化を図った、柔軟性を有するメモリエイリアシング装置についても既に開示されている（例えば、特許文献１参照。）。
【００１０】
又、オブジェクト・モジュール・ファイルの生成時に特定空間へ配置すべき関数の最適な組合せを自動的に選択することにより、処理能力の向上を図り、かつユーザの負担を軽減する言語処理装置及び言語処理方法については、既に開示されている（例えば、特許文献２参照。）。
【特許文献１】特開２００１−２２６３９号公報
【特許文献２】特開平０９−０３４７２５号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
本発明の目的は、組み込みプロセッサ用アプリケーションの開発において、関数のセクション配置とセクションのメモリ配置を手動的若しくは自動的に生成、表示、編集するプログラム開発支援装置及びプログラム開発支援装置の動作方法を提供することにある。
【課題を解決するための手段】
【００１２】
本発明の一態様によれば、（イ）ソース・ファイルから関数の呼出関係を抽出する関数呼出情報入力部と、（ロ）リンク時に使用する設定ファイルからアブソリュート・セクションの配置情報を取り出す リンク設定ファイル入力部と、（ハ）関数をリロケータブル・セクション又はアブソリュート・セクションに配置するセクション編集部と、（ニ）関数の配置情報を関数配置情報ファイルとして出力する関数配置設定ファイル出力部と、（ホ）リロケータブル・セクション、アブソリュート・セクションの配置情報を出力するリンク設定ファイル出力部とを備えるプログラム開発支援装置が提供される。
【００１３】
本発明の他の態様によれば、（イ）ソース・ファイルから関数の呼出関係を抽出する関数呼出情報入力部と、（ロ）リンク時に使用する設定ファイルからアブソリュート・セクションの配置情報を取り出すリンク設定ファイル入力部と、（ハ）プログラムコードの命令メモリ領域への割当を求めるセクション割当部と、（ニ）関数の配置情報を関数配置情報ファイルとして出力する関数配置設定ファイル出力部と、（ホ）リロケータブル・セクション、アブソリュート・セクションの配置情報を出力するリンク設定ファイル出力部とを備えるプログラム開発支援装置が提供される。
【００１４】
本発明の他の態様によれば、（イ）ソース・ファイルから関数の呼出関係を抽出する関数呼出情報入力ステップと、（ロ）関数配置情報ファイルから関数のリロケータブル・セクションへの配置情報を取り出す関数配置情報入力ステップと、（ハ）リンク時に使用する設定ファイルからアブソリュート・セクションの配置情報を取り出すリンク設定ファイル入力ステップと、（ニ）関数をリロケータブル・セクション又はアブソリュート・セクションに配置するセクション編集ステップと、（ホ）関数の配置情報を関数配置設定ファイルとして出力する関数配置設定ファイル出力ステップと、（ヘ）リロケータブル・セクション、アブソリュート・セクションの配置情報を出力するリンク設定ファイル出力ステップとを備えるプログラム開発支援装置の動作方法が提供される。
【発明の効果】
【００１５】
本発明のプログラム開発支援装置及びプログラム開発支援装置の動作方法によれば、組み込みプロセッサ用アプリケーションの開発において、関数のセクション配置とセクションのメモリ配置を手動的若しくは自動的に生成、表示、編集することができる。
【発明を実施するための最良の形態】
【００１６】
次に、図面を参照して、本発明の実施の形態を説明する。以下の図面の記載において、同一又は類似の部分には同一又は類似の符号を付している。ただし、図面は模式的なものであり、各ブロックの平面寸法等は現実のものとは異なることに留意すべきである。又、図面相互間においても互いの寸法の関係や比率が異なる部分が含まれていることはもちろんである。
【００１７】
又、以下に示す実施の形態は、この発明の技術的思想を具体化するための装置や方法を例示するものであって、この発明の技術的思想は、各ブロックの構成部品の配置等を下記のものに特定するものでない。この発明の技術的思想は、特許請求の範囲において、種々の変更を加えることができる。
【００１８】
[第１の実施の形態]
以下本発明の第１の実施の形態では、オーバーレイにおけるコード配置を手動的に決定する機構について述べる。
【００１９】
本発明の第１の実施の形態に係るプログラム開発支援装置（ＰＳＡＧ：Ｐｒｏｇｒａｍ Ｓｅｃｔｉｏｎ Ａｓｓｉｇｎｍｅｎｔ Ｇｅｎｅｒａｔｏｒ）２４は、図１に示すように、高級言語ソース・ファイル１００，コンパイラ１２０，リロケータブル・オブジェクト・ファイル１４０，リンカ１６０，及びアブソリュート・オブジェクト・ファイル１８０、関数配置設定ファイル２００，及びリンク設定ファイル２２０とともに協働する。
【００２０】
図１において、実線の矢印は、アプリケーション作成時の処理フローを示す。又、図１の細い矢印の部分は、プログラム開発支援装置のファイルの入出力フローを示す。
【００２１】
図１は、本発明の第１の実施の形態に係るプログラム開発支援装置が入出力するファイルとアプリケーション・プログラムを作成する他のツールの関係を示したものである。
【００２２】
本発明の第１の実施の形態に係るプログラム開発支援装置２４は、組み込みプロセッサ向けにＣ言語など高級言語で記述されたアプリケーション・プログラムを、メモリ張り替えのオーバーレイを目的として、コールグラフ全体、すなわち全ての関数呼出経路の集合を表示し、各関数のリロケータブル・セクションへの配置とリロケータブル・セクションを実際のメモリに配置する場合の配置を表示して、編集する。編集した結果を実際のコンパイル結果に反映させるためのファイルを出力する。出力したファイルを使用して再度アプリケーション・プログラムを作成することによって、期待した関数配置、セクション配置を実現することができる。
【００２３】
本発明の第１の実施の形態に係るプログラム開発支援装置２４の機能ブロックは、図２に示すように模式的に表される。本発明の第１の実施の形態に係るプログラム開発支援装置２４は、アブソリュート・オブジェクト・ファイル１８０と、高級言語ソース・ファイル１００と、関数配置設定ファイル２００と、リンク設定ファイル２２０と、関数呼出情報／配置情報解析ファイル２６２とからなる各機能部を備える。
【００２４】
更に、本発明の第１の実施の形態に係るプログラム開発支援装置２４は、ソース・ファイル名／関数サイズ入力２８０と、関数呼出情報／セクション配置情報解析機能３００と、関数呼出情報／配置情報入力３２０と、関数配置情報入力３４０と、関数配置情報出力３６０と、リンク設定ファイル入力３８０と、リンク設定ファイル出力４００と、関数呼出情報４２０と、関数セクション配置情報４４０と、セクション配置情報４６０と、コールグラフ／セクション配置表示４８０と、関数セクション配置表示５００と、関数セクション配置編集５２０と、セクション配置情報表示５４０と、セクション配置情報編集５６０とからなる各機能部を備える。図２における矢印は、各機能部間のデータの処理フローを表している。
【００２５】
本発明の第１の実施の形態に係るプログラム開発支援装置２４は、図３に示すように、メモリ部１と、プログラム解析部７０と、セクション編集部９２と、セクション出力部８０とを備える。外部にリンカ格納部１６、及びコンパイラ格納部１２が配置される。
【００２６】
メモリ部１は、高級言語ソース・ファイルを格納する高級言語ソース・ファイル格納部１０と、アブソリュート・オブジェクト・ファイルを格納するアブソリュート・オブジェクト・ファイル格納部１８と、関数配置設定ファイルを格納する関数配置設定ファイル格納部２０と、リンク設定ファイルを格納するリンク設定ファイル格納部２２とを備える。
【００２７】
プログラム解析部７０は、高級言語ソース・ファイル格納部１０に格納された高級言語ソース・ファイルを入力する高級言語ソース・ファイル入力部２と、アブソリュート・オブジェクト・ファイル格納部１８に格納されたアブソリュート・オブジェクト・ファイルを入力するアブソリュート・オブジェクト・ファイル入力部３と、関数配置設定ファイル格納部２０に格納された関数配置設定ファイルを入力する関数配置設定ファイル入力部４と、ソース・ファイルから関数の呼出関係を入力する関数呼出情報入力部３２と、関数配置情報ファイルから関数のリロケータブル・セクションへの配置情報を入力する関数配置情報入力部３４と、リンク時に使用する設定ファイルからアブソリュート・セクションの配置情報を入力するリンク設定ファイル入力部３８とを備える。
【００２８】
セクション編集部９２は、プログラム解析部７０からのデータを受信し、関数をリロケータブル・セクションに配置し，編集するリロケータブル・セクション配置編集部９４と、関数をアブソリュート・セクションに配置し，編集するアブソリュート・セクション配置編集部９６とを備える。
【００２９】
セクション出力部８０は、セクション編集部９２からのデータを受信し、関数配置設定ファイルを出力する関数配置設定ファイル出力部５と、リロケータブル・セクション、アブソリュート・セクションの配置情報を出力するリンク設定ファイル出力部４０とを備える。
【００３０】
本発明の第１の実施の形態に係るプログラム開発支援装置の動作方法は、ソース・ファイルから関数の呼出関係を抽出する関数呼出情報入力ステップと、関数配置情報ファイルから関数のリロケータブル・セクションへの配置情報を取り出す関数配置情報入力ステップと、リンク時に使用する設定ファイルからアブソリュート・セクションの配置情報を取り出す リンク設定ファイル入力ステップと、関数をリロケータブル・セクション又はアブソリュート・セクションに配置するセクション編集ステップと、関数の配置情報を関数配置設定ファイルとして出力する関数配置設定ファイル出力ステップと、リロケータブル・セクション、アブソリュート・セクションの配置情報を出力するリンク設定ファイル出力ステップとを備える。
【００３１】
更に詳細には、本発明の第１の実施の形態に係るプログラム開発支援装置は、高級言語のソース・ファイルから関数の呼出関係を抽出する、別ツールで関数の呼出関係を解析した結果を入力する、手動で関数の呼出関係を指示したファイルを入力する機能を持つ関数呼出情報／配置情報解析ファイル入力機能と、高級言語のソース・ファイルもしくはコンパイラが関数を配置するための情報を記述した関数配置情報ファイルから、関数のリロケータブル・セクションへの配置情報を取り出す関数配置情報入力機能と、リンク時に使用する設定ファイルから、リロケータブル・セクションの配置情報、リロケータブル・セクションを連結して生成されるアブソリュート・セクションの配置情報を取り出すリンク設定ファイル入力解析機能と、関数の呼出関係、リロケータブル・セクションに配置される関数、リロケータブル・セクション、アブソリュート・セクションの情報を表示する情報の表示機能と、関数をどのリロケータブル・セクションに配置するか、リロケータブル・セクションをどのアブソリュート・セクションに配置するか、アブソリュート・セクションをどのアドレスに配置するかを編集機能と、リンク時に使用する設定ファイルとして、リロケータブル・セクションの配置情報、アブソリュート・セクションの配置情報を出力する リンク設定ファイル出力機能を有する。
【００３２】
或いは又、本発明の第１の実施の形態に係るプログラム開発支援装置は、アブソリュート・オブジェクト・ファイル中のソースレベル・デバッグ情報から、ソース・ファイルの情報、セクション情報、関数サイズを取り出すアブソリュート・オブジェクト・ファイル入力解析機能を備えていても良い。
【００３３】
本発明の第１の実施の形態に係るプログラム開発支援装置は、Ｃ言語のような高級言語のソース・ファイルをコンパイルする際にどの関数をどのセクションに配置するかをコンパイラに指示する関数配置設定ファイルを出力したり、リンク時にセクション配置をリンカに指示するリンク設定ファイルを出力することで、アプリケーション・プログラムの開発を支援する。
【００３４】
利用者は、表示されたコールグラフを参照して、同じリロケータブル・セクションに配置する関数を決定する。呼び出す関数と呼び出される関数をなるべく同じリロケータブル・セクションに配置することで、オーバーレイによるメモリ張替えを少なくして、性能を向上させることができる。
【００３５】
又、実際にメモリに配置するときに、どのセクションが同じメモリ空間を共有し、メモリ張替えを行うアブソリュート・セクションであるのか、そのアブソリュート・セクションを構成するのは、どのリロケータブル・セクションかというリンク時の設定を編集(追加、変更)することで期待するオーバーレイ用のメモリ配置を作成することができる。
【００３６】
（プログラム開発支援装置の処理手順）
本発明の第１の実施の形態に係るプログラム開発支援装置の処理手順を、図２を用いて説明する。
【００３７】
まずコールグラフを作成するため、Ｃ言語のような高級言語のソース・ファイルを解析して、関数の呼出関係情報を取り出す。なお、本発明の第１の実施の形態に係るプログラム開発支援装置でソース・ファイルを解析するのでなく、別のプログラム開発支援装置で関数の呼出関係の情報を解析して、本発明の第１の実施の形態に係るプログラム開発支援装置ではその別のプログラム開発支援装置が出力したファイルから呼出関係情報を取り出してもよい。
【００３８】
ソース・ファイルを解析した場合は、コンパイル時に呼出先が決定している静的な呼出関係しか解析しかできない。しかし、シミュレータで実行時に関数の呼出情報を収集することで、関数ポインタのように実行時に関数の呼出が変化する呼出関係についても入手することができる。この情報を本発明の第１の実施の形態に係るプログラム開発支援装置に入力することで、動的な呼出関係も解析することができる。
【００３９】
又、シミュレータで収集したデータが不完全な場合もあるので、呼出関係を一定のフォーマットで記述したファイルを読む込む機能も必要である。このようにして入力した関数の呼出情報をコールグラフとして出力する。コールグラフは、関数の呼出関係を表示したものである。表示方法としては、文字のみで表示する形式と、呼ぶ関数と呼ばれる関数を線で結んだ形式がある。
【００４０】
Ｃ言語のような高級言語のソース・ファイル、又は ソース・ファイルとは別にコンパイラが関数を配置する場合に参照する関数配置設定ファイルから、関数がどのリロケータブル・セクションに配置されるかの情報を入力する。これは、現在の関数の配置情報を知るためである。
【００４１】
本発明の第１の実施の形態に係るプログラム開発支援装置を用いて、関数配置を行い、実行性能を測定した後、関数配置の一部分を修正して、もう一度実行性能を測定したい場合などでは、現在の関数の配置情報(以前の編集結果)を知る必要がある。
【００４２】
このようにして入力した関数のセクション配置情報を表示する。又、関数のセクション配置情報を編集(追加、変更)し、期待する関数配置を設定することができる。
【００４３】
又、編集した結果の関数のセクション配置情報をソース・ファイル、又は関数配置設定ファイルとして出力する。このファイルを用いて、再度ソース・ファイルをコンパイルすることにより、期待するセクション配置が行われたリロケータブル・オブジェクト・ファイルが生成される。
【００４４】
リンク時に、リロケータブル・セクションの配置の情報、実際のメモリ構成に合わせるためのアブソリュート・セクションの配置の情報などが記述されたリンク設定ファイルから、セクションの配置情報を入力する。このセクションの配置情報を表示する。又、リロケータブル・セクションの配置情報やアブソリュート・セクションの配置情報を編集(追加、変更、削除)する。そして、編集した結果をリンク設定ファイルとして出力する。このファイルを用いて、再度リロケータブル・オブジェクト・ファイルからアブソリュート・オブジェクト・ファイルを作成することにより、期待するセクション配置が行われたアプリケーション・プログラムを作成することができる。
【００４５】
（表示例）
図４に、本発明の第１の実施の形態に係るプログラム開発支援装置の表示画面例を示す。表示画面を大きく３つの欄に分割し、一番左側をコールグラフと選択した関数の情報を表示する欄、真ん中をリロケータブル・セクションにどの関数が配置されるかの情報を表示、編集する欄、一番右側をアブソリュート・セクションがどのアドレスに配置されるか、どのリロケータブル・セクションで構成されるかの情報を表示、編集する欄となっている。
【００４６】
本発明の第１の実施の形態に係るプログラム開発支援装置によれば、限られた命令メモリ容量のプロセッサ上で動作するプログラムの開発において、コールグラフを参照しながら、関数のリロケータブル・セクションへの配置を行うことができ、配置の編集が容易になる。又、リロケータブル・セクションとアブソリュート・セクションの配置も編集することで、オーバーレイ用のセクション割り当てを同時に設定することができ、オーバーレイ方式のアプリケーション・プログラムの開発が容易となる。
【００４７】
本発明の第１の実施の形態に係るプログラム開発支援装置及びプログラム開発支援装置の動作方法によれば、組み込みプロセッサ用アプリケーションの開発において、関数のセクション配置とセクションのメモリ配置を手動的に生成、表示、編集することができる。
【００４８】
（第１の実施の形態の変形例）
アプリケーション・プログラムを作成するためのソース・ファイルが複数ある場合は、本発明の第１の実施の形態に係るプログラム開発支援装置にすべてのソース・ファイル名を指定するのが、煩雑となる。
【００４９】
本発明の第１の実施の形態の変形例に係るプログラム開発支援装置においては、リンク後のアブソリュート・オブジェクト・ファイルの中のソースレベル・デバッグ情報からソース・ファイル名を利用することで、ソース・ファイル名を指定する必要がなくなり、利用者はアブソリュート・オブジェクト・ファイルのファイル名を指定するだけになり、利便性が増す。更に、ソースレベル・デバッグ情報の中にある関数毎のコードサイズも取り出し、これを表示する。この関数毎のコードサイズ情報は、関数のセクション配置を決める際の参考となる。
【００５０】
本発明の第１の実施の形態の変形例に係るプログラム開発支援装置によれば、アブソリュート・オブジェクト・ファイル中のソースレベル・デバッグ情報から ソース・ファイルのファイル名の情報、セクション情報、関数サイズを取り出すアブソリュート・オブジェクト・ファイル入力解析機能を追加することにより、ファイル名指定の手間が省略でき、又実際の関数サイズやセクションサイズを表示することが可能となる。
【００５１】
[第２の実施の形態]
以下本発明の第２の実施の形態では、オーバーレイにおけるコード配置を自動的に決定する機構について述べる。
【００５２】
本発明の第２の実施の形態に係るプログラム開発支援装置は、図５に示すように、高級言語ソース・ファイル１００，コンパイラ１２０，リロケータブル・オブジェクト・ファイル１４０，リンカ１６０，アブソリュート・オブジェクト・ファイル１８０、関数配置設定ファイル２００，リンク設定ファイル２２０、命令メモリ制約２４０、及び関数実行履歴２６０とともに協働する。
【００５３】
図５において、実線の矢印は、アプリケーション作成時の処理フローを示す。又、点線の矢印は、プログラム開発支援装置２４のファイルの入出力フローを示す。
【００５４】
本発明の第２の実施の形態に係るプログラム開発支援装置２４は、図５に示すように、メモリ部１と、プログラムを解析するプログラム解析部７０と、プログラムコードの命令メモリ領域への割当を求めるセクション割当部９０と、セクション割当部９０で求められたプログラムコードの命令メモリ領域への割当を出力とするセクション出力部８０とを備える。外部にリンカ格納部１６、及びコンパイラ格納部１２が配置される。
【００５５】
メモリ部１は、高級言語ソース・ファイルを格納する高級言語ソース・ファイル格納部１０と、アブソリュート・オブジェクト・ファイルを格納し，アブソリュート・オブジェクト・ファイル中のソースレベル・デバッグ情報からソース・ファイルの情報，セクション情報，関数サイズを取り出すアブソリュート・オブジェクト・ファイル格納部１８と、関数配置設定ファイルを格納する関数配置設定ファイル格納部２０と、リンク設定ファイルを格納するリンク設定ファイル格納部２２と、命令メモリ制約を格納する命令メモリ制約格納部５８と、関数実行履歴を格納する関数実行履歴格納部６０とを備える。
【００５６】
プログラム解析部７０は、高級言語ソース・ファイル格納部１０に格納された高級言語ソース・ファイルを入力する高級言語ソース・ファイル入力部２と、アブソリュート・オブジェクト・ファイル格納部１８に格納されたアブソリュート・オブジェクト・ファイルを入力するアブソリュート・オブジェクト・ファイル入力部３と、関数配置設定ファイル格納部２０に格納された関数配置設定ファイルを入力する関数配置設定ファイル入力部４と、ソース・ファイルから関数の呼出関係を入力する関数呼出情報入力部３２と、関数配置情報ファイルから関数のリロケータブル・セクションへの配置情報を入力する関数配置情報入力部３４と、リンク時に使用する設定ファイルからアブソリュート・セクションの配置情報を入力するリンク設定ファイル入力部３８とを備える。
【００５７】
セクション割当部９０は、プログラム解析部７０からのデータを受信し、全ての関数を別個のセクションに割り当てる関数セクション初期配置部６と、関数コールグラフから全てのセクションの配置アドレスを決定するセクション配置アドレス決定部７と、関数コールグラフ上の親子関数間・兄弟関数間のセクションを統合するセクション統合部８と、命令メモリ制約格納部５８に格納された命令メモリ制約を入力する命令メモリ制約入力部９と、関数実行履歴格納部６０に格納された関数実行履歴を入力する関数実行履歴入力部１１と、自動割当結果をセクション出力部８０に出力する自動割当結果出力部１３とを備える。
【００５８】
セクション出力部８０は、セクション割当部９０からのデータを受信し、関数配置設定ファイルを出力する関数配置設定ファイル出力部５と、・セクション、アブソリュート・セクションの配置情報を出力するリンク設定ファイル出力部４０と、自動割当結果出力部１３からの自動割当結果を入力する自動割当結果入力部１５とを備える。
【００５９】
或いは又、本発明の第２の実施の形態に係るプログラム開発支援装置において、プログラム解析部７０は、プログラムかプログラムの関数コールグラフを求め、セクション割当部９０は、関数コールグラフを元にプログラムコードの命令メモリ領域への割当を求める。
【００６０】
プログラム開発支援装置２４において読み書きするファイル/データは、高級言語ソース・ファイル１００、アブソリュート・オブジェクト・ファイル１８０、関数配置設定ファイル２００、リンク設定ファイル２２０、命令メモリ制約２４０、関数実行履歴２６０である。これらデータと、プログラム開発支援装置２４の各部は以下のような対応関係にある。
【００６１】
プログラム解析部７０は、 高級言語ソース・ファイル１００、アブソリュート・オブジェクト・ファイル１８０、関数配置設定ファイル２００、リンク設定ファイル２２０を入力とし、解析結果（関数コールグラフ・関数サイズ）をセクション割当部９０に渡す。
【００６２】
セクション割当部９０は、上記解析結果と、命令メモリ制約２４０、関数実行履歴２６０を入力とし、自動割当結果（関数のセクションへの配置・セクションのメモリへの配置）を出力とし、セクション出力部８０へ渡す。
【００６３】
セクション出力部は、上記自動割当結果を、関数配置設定ファイル２００、リンク設定ファイル２２０として出力する。リンク設定ファイル２２０については、入力ファイルに自動割当結果を書き加えて出力ファイルとする。
【００６４】
或いは又、本発明の第２の実施の形態に係るプログラム開発支援装置２４において、セクション割当部９０は、関数コールグラフを元にプログラムコードの命令メモリ領域への割当を求める。
【００６５】
或いは又、本発明の第２の実施の形態に係るプログラム開発支援装置２４において、セクション割当部９０は、プログラムの実行時の関数呼出系列である関数実行履歴を入力として、プログラムコードの命令メモリ領域への割当を求める。尚、関数実行履歴２６０は、それ単体で割当を求められるものではなく、関数コールグラフや関数サイズに追加して割当を求めるために使うものである。
【００６６】
或いは又、本発明の第２の実施の形態に係るプログラム開発支援装置２４において、セクション割当部９０は、ユーザの指定した関数の集合を、プログラムの同じセクションに割り当てる。
【００６７】
図５は、本発明の第２の実施の形態に係るプログラム開発支援装置２４が入出力するファイルと、アプリケーション・プログラムを作成する他のツールの関係を示したものである。
【００６８】
本発明の第２の実施の形態に係るプログラム開発支援装置２４は、組み込みプロセッサ向けにＣ言語など高級言語で記述されたアプリケーション・プログラムを、メモリ張替えのオーバーレイを目的として、プログラムの記述内容や関数コールグラフ（関数の呼出経路）、実行内容を元に解析し、各関数のリロケータブル・セクションへの割当と、リロケータブル・セクションのメモリ上への配置を自動的に決定することにより、プログラムコードの命令メモリ上への配置を自動的に決定する。又それらの関数を収めたセクションの定義情報を自動的に生成する。
【００６９】
本発明の第２の実施の形態に係るプログラム開発支援装置２４は、Ｃ言語のような高級言語のソース・ファイルをコンパイルする際にどの関数をどのセクションに配置するかを指示する関数配置設定ファイルと、プログラムのリンク時にセクション配置をリンカに指示するリンク設定ファイルとを、自動的に生成し出力する。
【００７０】
本発明の第２の実施の形態に係るプログラム開発支援装置２４は、プログラム中で、ある関数とそれを呼び出す関数とをなるべく同じリロケータブル・セクションに配置しようと試みることで、オーバーレイによるメモリ張替えを少なくして、プログラムの実行性能を向上させる。このように生成された関数配置設定ファイルとリンク設定ファイルを用いて、アプリケーション・プログラムを再度コンパイル・リンクすることにより、与えられた命令メモリのサイズ制約の範囲内でオーバーレイを行い、かつメモリ張替えのより少ないアプリケーション・プログラムを得ることができる。
【００７１】
本発明の第２の実施の形態に係るプログラム開発支援装置２４は入力として、Ｃ言語のような高級言語で記述されたプログラムの高級言語ソース・ファイルと、そのプログラムをコンパイル・リンクして実行可能としたアブソリュート・オブジェクト・ファイルを入力とする。
【００７２】
本発明の第２の実施の形態に係るプログラム開発支援装置２４は、又、プログラム中の各関数をメモリ上でまとめて扱う単位であるリロケータブル・セクションがアドレス空間上のどの領域に配置されるかを指定するリンク設定ファイルを、入力としてとってもよい。
【００７３】
又本発明の第２の実施の形態に係るプログラム開発支援装置２４は、プログラムの実行に利用可能な命令メモリ制約２４０の開始アドレスとサイズを入力として取る。命令メモリ制約２４０の開始アドレスと容量は、ユーザが値を外部から明示的に指定してもよいし、リンク設定ファイル上のメモリマップを解析して取得してもよい。
【００７４】
（全体の処理手順を説明するフローチャート）
本発明の第２の実施の形態に係るプログラム開発支援装置２４が、プログラム及びその他の入力情報から、出力たる各関数のセクションへの割当情報、及び各セクションの定義情報を生成する手順は、図７に示すように表される。以下のステップにおいて、ステップＳ１〜Ｓ２は、プログラム解析部７０における動作に相当し、ステップＳ３〜Ｓ５は、セクション割当部９０における動作に相当し、ステップＳ６は、セクション出力部８０における動作に相当する。
【００７５】
（プログラム解析部）
プログラム解析部７０においては、入力として与えられたプログラムの高級言語ソース・ファイル格納部１０とアブソリュート・オブジェクト・ファイル格納部１８から、セクション割当部９０で必要とされる情報を抽出・構成する。
【００７６】
（ａ）ステップＳ１において、プログラムの高級言語ソース・ファイル格納部１０内に格納されたプログラムの高級言語ソース・ファイルから、関数コールグラフを作成する。
【００７７】
関数コールグラフとは、プログラム中の個々の関数を１つのノードとみなし、ある関数と、その関数から呼ばれている関数(子関数)のノード間を線で結んだ有向グラフのことである。
【００７８】
（ｂ）次に、ステップＳ２において、プログラムのアブソリュート・オブジェクト・ファイル格納部１８内に格納されたアブソリュート・オブジェクト・ファイルから、各関数のコードサイズを取得する。
【００７９】
関数のコードサイズは、セクション割当部９０で関数をセクションに割り当て、セクションを命令メモリ制約格納部５８のアドレス空間上に配置する際に必要となる。
【００８０】
（セクション割当部）
セクションとは、プロセッサのメモリ上でコードやデータを配置する際の最小単位である。セクションには、任意のアドレスに配置可能なリロケータブル・セクションと、配置アドレスを値として持つアブソリュート・セクションがある。
【００８１】
リンク設定ファイル格納部２２内に格納されたリンク設定ファイルに、アブソリュート・セクションと、各アブソリュート・セクションに配置されるリロケータブル・セクションの対応を記述することにより、リロケータブル・セクションのメモリ上のアドレスへの配置が定まる。
【００８２】
以下では、リロケータブル・セクションと、それに対応するアブソリュート・セクションとは常に一対一の関係にあるものとする。又特に説明がない限り、リロケータブル・セクションとそれに対応するアブソリュート・セクションのことをまとめて、単に「セクション」と呼ぶ。
【００８３】
セクション割当部９０ではプログラム解析部７０で作成した関数コールグラフを元に、プログラム中の各関数のセクションへの割り当てを決定する。又、リロケータブル・セクションのアブソリュート・セクションへの割り当てを決定することにより、関数のメモリ上のアドレスへの配置を決定する。
【００８４】
関数のセクションへの割り当てには様々な方法が考えられるが、ここでは関数コールグラフの親子関数と兄弟関数のセクション統合を用いた方法について説明する。
【００８５】
（ｃ）次に、ステップＳ３において、初期状態Ａ＿ｉｎｉｔとして、全ての関数をそれぞれ別個のセクションに割り当てる。
【００８６】
（ｄ）次に、ステップＳ４において、関数コールグラフから全てのセクションの配置アドレスを決定する。
【００８７】
各セクションの命令メモリ制約２４０上の配置アドレスについては、以下のように決定する。
【００８８】
(ｄ１)関数コールグラフ上で、他の関数から呼ばれていない関数を探す。この関数のことをルート関数と呼ぶ。ルート関数は、通常はプログラムの最初に呼ばれる関数である。
【００８９】
(ｄ２)ルート関数のセクションを、入力で与えられた命令メモリ制約２４０の開始アドレスに配置する。
【００９０】
(ｄ３)ルート関数から呼ばれる個々の子関数のセクションを、それぞれルート関数のセクションの直後のアドレスに配置する。
【００９１】
(ｄ４)以下同様の手順で、各関数のセクションを、その関数を呼ぶ関数（親関数）のセクションの直後のアドレスに配置する。複数の親関数を持つ関数のセクションの場合は、親関数のセクションのうち、セクション末尾のアドレスが最も大きいものを1つ選び、その直後のアドレスに配置する。
【００９２】
このようにして各セクションの配置アドレスを決定することで、ある関数が実行される際に、その関数の親関数のセクション、及び関数の呼出関係を更に上位に遡った全ての関数のセクションについて、現在実行されている関数のセクションと重複しないアドレス領域に配置することができる。
【００９３】
(ｅ)次に、ステップＳ５において、関数コールグラフ上の親子関数間・兄弟関数間のセクションの統合を試みる。
【００９４】
初期状態Ａ＿ｉｎｉｔにおいては、全ての関数が別個のセクションに割り当てられている。この場合、プログラム実行時に新たな関数が呼び出される度に、オーバーレイによるセクションの張替えが必要になり、プログラムの性能低下の原因となる。
【００９５】
このため、ある関数とそこから呼ばれる子関数の両方を、同じセクションに割り当てることが望ましい。又連続して呼び出される複数の関数も又、同じセクションに割り当てることが望ましい。一方で、利用できる命令メモリのサイズには限界があるため、全ての関数を単一のセクションに割り当てることはできない。そこで、プログラムのコールグラフ及び関数のコードサイズと、命令メモリ制約２４０のサイズを下に、関数の組み合わせのうち幾つかを選んで同じセクションに併合することで、命令メモリ制約２４０のサイズの制約を超えない範囲で複数のセクションを１つにまとめる。
【００９６】
セクションの併合には様々な方法が考えられるが、ここでは関数のコードサイズを基準とし、コールグラフ上をルート関数から辿ってコールグラフの末端の関数に至る各経路について、経路上の各関数のコードサイズの合計が大きなものから順に、経路上の各関数及びそれに隣接する関数から１つを選び、併合する方法について説明する。
【００９７】
(ｅ１) ステップＳ５０１において、コールグラフの、ルート関数Ｆ＿ｒｏｏｔから個々の末端関数Ｆ＿ｌｅａｆへの経路Ｐ(Ｆ＿ｒｏｏｔ,…,Ｆ＿ｌｅａｆ)を求める。
【００９８】
末端関数とは、その関数自身から他の関数（子関数）を呼んでいない関数、又はその関数から呼ばれている子関数全てが、Ｆ＿ｌｅａｆからＰ(Ｆ＿ｒｏｏｔ,….,Ｆ＿ｌｅａｆ)をルート関数へ向かって遡った経路上にある関数のことである。
【００９９】
(ｅ２) 次に、ステップＳ５０２において、経路上の各関数のセクションのコードサイズの合計を、各経路毎に求める。
【０１００】
(ｅ３) 次に、ステップＳ５０３において、コードサイズ合計の大きな経路から順に、兄弟間統合を試みる。兄弟間統合については、図８を参照して、以下に説明する。
【０１０１】
(ｅ４) 次に、ステップＳ５０４において、再度各経路のコードサイズ合計を求める。
【０１０２】
(ｅ５) 次に、ステップＳ５０５において、コードサイズ合計の大きな経路から順に、親子間統合を試みる。親子間統合については、図９を参照して、以下に説明する。
【０１０３】
（セクション出力部）
セクション割当部９０で、プログラム中の全ての関数について、関数を配置するセクションと、セクションの命令メモリ制約２４０上の配置アドレスが決定された。
【０１０４】
（ｆ）次に、ステップＳ６において、セクション出力部８０は、関数とセクションの対応を関数配置設定ファイル格納部２０に出力する。又、セクション出力部８０は、セクションの命令メモリ制約２４０上の配置アドレスをリンク設定ファイル格納部２２に出力する。
【０１０５】
（兄弟間統合）
コードサイズ合計が大きいものから順に、各経路に対して下記の処理を行う。
【０１０６】
末端関数から順に、経路上の各関数Ｆについて、関数Ｆの兄弟関数Ｆ＿ｓｉｂｌｉｎｇが存在する場合に、以下の処理を行う。兄弟関数とは、コールグラフ上で同じ親関数から呼ばれており、かつ高級言語ファイル上の親関数の定義において、関数Ｆの呼出個所の直前か直後で呼ばれている関数のことである。
【０１０７】
関数Ｆに兄弟関数Ｆ＿ｓｉｂｌｉｎｇが存在する場合、ＦのセクションＳ(Ｆ)とＦ＿ｓｉｂｌｉｎｇのセクションＳ(Ｆ＿ｓｉｂｌｉｎｇ)の統合を試みる。すなわち、Ｓ(Ｆ)に属する関数全てと、Ｓ(Ｆ＿ｓｉｂｌｉｎｇ)に属する関数全てを１つの新しいセクションＳ＿ｎｅｗに配置し、Ｓ＿ｎｅｗのアドレスをＳ(Ｆ)のアドレスとＳ(Ｆ＿ｓｉｂｌｉｎｇ)のアドレスのうちより大きいアドレスに配置した場合に、Ｓ＿ｎｅｗを含む全ての経路のサイズが命令メモリの制約を超えなければ、Ｓ(Ｆ)とＳ(Ｆ＿ｓｉｂｌｉｎｇ)を統合した新しいセクションＳ＿ｎｅｗを作成する。
【０１０８】
Ｓ＿ｎｅｗの配置アドレスは、複数の親関数を持つセクションの配置アドレスと同様に決定する。すなわち、Ｓ＿ｎｅｗに属する全関数の親関数の配置されているセクションのうち、Ｓ＿ｎｅｗ自身を除いて配置アドレスの末尾が最大であるものの直後に配置する。
【０１０９】
本発明の第２の実施の形態に係るプログラム開発支援装置において、兄弟間統合の処理手順を、図８を用いて、説明する。
【０１１０】
（ａ）ステップＳ１１において、兄弟間統合を適用していない経路のうち、経路上の各関数に対応するセクションのコードサイズ合計が最大の経路Ｐを選ぶ。
【０１１１】
（ｂ）次に、ステップＳ１２において、関数Ｆを経路Ｐの末端関数に等しく設定する。
【０１１２】
（ｃ）次に、ステップＳ１３において、関数Ｆの兄弟関数Ｆ＿ｓｉｂｌｉｎｇが存在するか否かを判断する。ステップＳ１３において、関数Ｆの兄弟関数Ｆ＿ｓｉｂｌｉｎｇが存在する場合には、ステップＳ１４に移行する。ステップＳ１３において、関数Ｆの兄弟関数Ｆ＿ｓｉｂｌｉｎｇが存在しない場合には、ステップＳ１６に移行する。
【０１１３】
（ｄ）次に、ステップＳ１４において、関数Ｆと兄弟関数Ｆ＿ｓｉｂｌｉｎｇのセクションを統合したら、命令メモリサイズを超える経路が発生するか否かを判断する。ステップＳ１４において、関数Ｆと兄弟関数Ｆ＿ｓｉｂｌｉｎｇのセクションを統合したら、命令メモリサイズを超える経路が発生する場合には、ステップＳ１４に移行する。ステップＳ１４において、関数Ｆと兄弟関数Ｆ＿ｓｉｂｌｉｎｇのセクションを統合したら、命令メモリサイズを超える経路が発生しない場合には、ステップＳ１５に移行する。
【０１１４】
（ｅ）次に、ステップＳ１５において、関数Ｆのセクションと兄弟関数Ｆ＿ｓｉｂｌｉｎｇのセクションを統合する。
【０１１５】
（ｆ）次に、ステップＳ１６において、関数Ｆの親関数Ｆ＿ｐａｒｅｎｔが存在するか否かを判断する。ステップＳ１６において、関数Ｆの親関数Ｆ＿ｐａｒｅｎｔが存在する場合には、ステップＳ１８に移行する。ステップＳ１６において、関数Ｆの親関数Ｆ＿ｐａｒｅｎｔが存在しない場合には、ステップＳ１７に移行する。
【０１１６】
（ｇ）次に、ステップＳ１７において、兄弟間統合を適用していない経路が存在するか否かを判断する。ステップＳ１７において、兄弟間統合を適用していない経路が存在する場合には、ステップＳ１１に戻る。ステップＳ１７において、兄弟間統合を適用していない経路が存在しない場合には、終了する。
【０１１７】
（ｈ）次に、ステップＳ１８において、関数Ｆを親関数Ｆ＿ｐａｒｅｎｔに等しく設定し、その後ステップＳ１３に移行する。
【０１１８】
（親子間統合）
コードサイズ合計が大きいものから順に、各経路に対して下記の処理を行う。
【０１１９】
末端関数から順に、経路上の各関数Ｆについて、関数Ｆの親関数Ｆ＿ｐａｒｅｎｔが存在する場合に、以下の処理を行う。すなわち、２つのセクションＳ(Ｆ)とＳ(Ｆ＿ｐａｒｅｎｔ)を統合し新しいセクションＳ＿ｎｅｗを作成した場合に、Ｓ＿ｎｅｗを含む全ての経路のサイズが命令メモリの制約を超えなければ、Ｓ(Ｆ)とＳ(Ｆ＿ｐａｒｅｎｔ)を統合した新しいセクションＳ＿ｎｅｗを作成する。
【０１２０】
Ｓ＿ｎｅｗの配置アドレスは、兄弟間統合の場合と同様、Ｓ＿ｎｅｗに属する全ての親関数のセクションのうち、配置アドレスの末尾が最大であるセクションの直後に配置する。
【０１２１】
ここで、本発明の第２の実施の形態に係るプログラム開発支援装置において、親子間統合の処理手順を、図９を用いて、説明する。
【０１２２】
（ａ）ステップＳ２１において、親子間統合を適用していない経路のうち、経路上のセクションのコードサイズ合計が最大の経路Ｐを選ぶ。
【０１２３】
（ｂ）次に、ステップＳ２２において、関数Ｆを経路Ｐの末端関数に等しく設定する。
【０１２４】
（ｃ）次に、ステップＳ２３において、関数Ｆの親関数Ｆ＿ｐａｒｅｎｔが存在するか否かを判断する。ステップＳ２３において、関数Ｆの親関数Ｆ＿ｐａｒｅｎｔが存在する場合には、ステップＳ２４に移行する。ステップＳ２３において、関数Ｆの親関数Ｆ＿ｐａｒｅｎｔが存在しない場合には、ステップＳ２５に移行する。
【０１２５】
（ｄ）次に、ステップＳ２４において、関数Ｆと親関数Ｆ＿ｐａｒｅｎｔのセクションを統合したら、命令メモリサイズを超える経路が発生するか否かを判断する。ステップＳ２４において、関数Ｆと親関数Ｆ＿ｐａｒｅｎｔのセクションを統合したら、命令メモリサイズを超える経路が発生する場合には、ステップＳ２７に移行する。ステップＳ２４において、関数Ｆと親関数Ｆ＿ｐａｒｅｎｔのセクションを統合したら、命令メモリサイズを超える経路が発生しない場合には、ステップＳ２６に移行する。
【０１２６】
（ｅ）次に、ステップＳ２５において、親子間統合を適用していない経路が存在するか否かを判断する。ステップＳ２５において、兄弟間統合を適用していない経路が存在する場合には、ステップＳ２１に戻る。ステップＳ２５において、兄弟間統合を適用していない経路が存在しない場合には、終了する。
【０１２７】
（ｆ）次に、ステップＳ２６において、関数Ｆのセクションと親関数Ｆ＿ｐａｒｅｎｔのセクションを統合する。
【０１２８】
（ｇ）次に、ステップＳ２７において、関数Ｆを親関数Ｆ＿ｐａｒｅｎｔに等しく設定し、その後ステップＳ２３に移行する。
【０１２９】
（プログラムＰ１のコールグラフ）
本発明の第２の実施の形態に係るプログラム開発支援装置において、プログラムＰ１のコールグラフは、模式的に図１０に示すように表される。
【０１３０】
以下では、図１０に示すような簡単なプログラムＰ１に対して、上記の関数セクション割当を適用する例を説明する。
【０１３１】
プログラムＰ１は、７つの関数ｍａｉｎ, 関数ｆ１, 関数ｆ２，関数ｆ３，関数ｆ４，関数ｆ５，関数ｆ６から構成されるプログラムであり、各関数間の呼出関係をコールグラフとして図式化したものが図１０に相当する。
【０１３２】
ここでは、プログラムの実行は以下の順序で行われる。
【０１３３】
（ａ１）関数ｍａｉｎが実行される。
【０１３４】
（ａ２）関数ｍａｉｎの中から関数ｆ１が呼び出される。
【０１３５】
（ａ３）関数ｆ１の中から関数ｆ２が呼び出される。
【０１３６】
（ａ４）関数ｆ２の実行終了後、関数ｆ１の実行が終了し、関数ｍａｉｎに制御が戻る。
【０１３７】
（ａ５）関数ｆ３が呼び出される。
【０１３８】
（ａ６）以下同様の手順で関数ｆ４, 関数ｆ５, 関数ｆ６がそれぞれ呼び出される。
【０１３９】
（ａ７）最後に関数ｍａｉｎに制御が戻り、全体の実行が終了する。
【０１４０】
ここで、命令メモリ制約２４０の開始アドレスは０Ｘ２０００００番地、利用可能なサイズは６４バイトであるものとする。
【０１４１】
このプログラムに本発明の第２の実施の形態に係るプログラム開発支援装置の関数セクション自動割当を適用する手順は以下のようになる。以下のステップＳ１〜Ｓ６は図７の各ステップに対応する。
【０１４２】
[ａ](ステップＳ１)：プログラムＰ１の高級言語ソース・ファイルからコールグラフを作成する。
【０１４３】
[ｂ](ステップＳ２)：プログラムＰ１の各関数のコードサイズを取得する。
【０１４４】
ここでは各関数のコードサイズは、関数ｆ３が８バイト、関数ｆ４が３２バイト、その他の関数が各１６バイトであるものとする。
【０１４５】
[ｃ](ステップＳ３)： 各関数に対応するセクションを作成する。ここでは関数とセクションの割り当てを、セクションごとに属する関数を’{‘と’ }’で括って表現する。すると、初期状態Ａ＿ｉｎｉｔ＝[{ｍａｉｎ}, {ｆ１},{ｆ２},{ｆ３},{ｆ４},{ｆ５},{ｆ６}]  となる
[ｄ](ステップＳ４)：各セクションの配置アドレスを決定する。
【０１４６】
ここでは、まずルート関数ｍａｉｎのセクションＳ（ｍａｉｎ）のアドレスを、与えられた命令メモリの開始アドレス ０ｘ２０００００番地に配置される。
【０１４７】
次に関数ｍａｉｎの子関数の各セクションであるＳ(ｆ１), Ｓ(ｆ２), Ｓ(ｆ４),Ｓ(ｆ６)の開始アドレスが、Ｓ(ｍａｉｎ)の直後のアドレス ０ｘ２０００１０ 番地に配置される。次に関数ｆ１の子関数のセクションＳ(ｆ３)が０ｘ２０００２０番地に配置され、最後に関数ｆ４の子関数のセクションＳ(ｆ５)が０ｘ２０００３０番地に配置される。
【０１４８】
[ｅ](ステップＳ５)：コールグラフに基づき、セクションの統合を行う。
【０１４９】
まず(ステップＳ５０１) と(ステップＳ５０２)に基づいて、ルート関数から各末端関数への経路と、各経路のサイズを求める。
【０１５０】
ここでは以下の４つの経路が求まる。
【０１５１】
Ｐ（ｍａｉｎ，ｆ１，ｆ２）＝ [ {ｍａｉｎ}  {ｆ１}  {ｆ２}]  (サイズ＝４８バイト)
Ｐ(ｍａｉｎ,ｆ３) ＝ [ {ｍａｉｎ}  {ｆ３}]  (サイズ＝５６バイト)
Ｐ(ｍａｉｎ,ｆ４,ｆ５)＝ [ {ｍａｉｎ}  {ｆ４}  {ｆ５}]  (サイズ＝６４バイト)
Ｐ(ｍａｉｎ,ｆ６)＝ [ {ｍａｉｎ}  {ｆ６} ] (サイズ＝３２バイト)
[ｆ] (ステップＳ５０３): [ｅ]で求めた経路のうち、サイズの大きいものから順に兄弟間統合を行う。
【０１５２】
まずサイズ最大の経路Ｐ(ｍａｉｎ,ｆ４,ｆ５)については、関数ｆ４に兄弟関数ｆ３, ｆ６が存在するが、Ｐ(ｆ５)のサイズが命令メモリのサイズ６４バイトと等しいため、関数ｆ４のセクションに対して兄弟関数ｆ３, ｆ６のセクションのどちらを統合しても、命令メモリのサイズの上限を超えてしまうため、兄弟間統合は行わない。
【０１５３】
次にサイズの大きい経路Ｐ(ｍａｉｎ,ｆ１,ｆ２)については、関数ｆ１に兄弟関数ｆ３が存在する。Ｓ(ｆ３)とＳ(ｆ１)を統合した場合、
Ｐ(ｆ２) ＝ [ {ｍａｉｎ} (１６バイト){ｆ１,ｆ３}(２４バイト), {ｆ２}(１６バイト)]となり、サイズは５６バイトとなる。これは命令メモリのサイズ上限より小さいため、Ｓ(ｆ３)とＳ(ｆ１)を統合する。
【０１５４】
その次にサイズの大きなの経路Ｐ(ｍａｉｎ,ｆ６)については、兄弟関数ｆ４が統合の候補となるが、統合を行うと、Ｓ(ｆ４)を含むＰ(ｍａｉｎ，ｆ４，ｆ５)の経路が命令メモリのサイズ上限を超えてしまうため、統合は行わない。
【０１５５】
最後の経路Ｐ(ｍａｉｎ,ｆ３)については、関数ｆ３がすでに関数ｆ１と同じセクションに統合されているため、このセクションを含む最大サイズの経路はＰ(ｍａｉｎ,ｆ１,ｆ２)である。この経路に、関数ｆ３の兄弟関数であるｆ４のセクションＳ(ｆ４)を統合すると、やはりＰ(ｍａｉｎ,ｆ４,ｆ５)が命令メモリのサイズの上限を超えてしまうため、統合は行わない。
【０１５６】
結果として、Ｓ(ｆ１)とＳ(ｆ３)の統合が行われ、関数セクション割り当て状態は、
Ａ＝ [{ｍａｉｎ} {ｆ１, ｆ３} {ｆ２} {ｆ４}, {ｆ５} {ｆ６}] となる。
【０１５７】
[ｇ](ステップＳ５０４)：再度各経路のコードサイズ合計を求め、親子間統合の適用を試みる。
【０１５８】
サイズ最大の経路Ｐ(ｍａｉｎ,ｆ４,ｆ５)＝ [{ｍａｉｎ}, {ｆ４}, {ｆ５}]については、Ｓ(ｆ４)とＳ(ｆ５)の統合が可能である。この場合、Ｐ(ｍａｉｎ,ｆ４,ｆ５)のサイズは増えない。Ｓ(ｍａｉｎ)とＳ(ｆ４)については、統合すると他の経路(Ｐ(ｍａｉｎ,ｆ１,ｆ２))がサイズ上限を超えるため、統合は行わない。
【０１５９】
次にサイズの大きな経路Ｐ(ｍａｉｎ,ｆ１,ｆ２)＝ [{ｍａｉｎ} {ｆ１, ｆ３} {ｆ２}]については、Ｓ(ｆ１)とＳ(ｆ２)の統合が可能である。
【０１６０】
Ｓ(ｍａｉｎ)とＳ(ｆ１)については、上と同様に他の経路(Ｐ(ｆ５))がサイズ上限を超えるため、統合は行わない。
【０１６１】
残りの経路Ｐ(ｍａｉｎ,ｆ３)とＰ(ｍａｉｎ,ｆ６)についても同様に、Ｓ(ｍａｉｎ)とＳ(ｆ３), Ｓ(ｆ６)の統合は他の経路がサイズ上限を超えるため、行わない。
【０１６２】
結果として、Ｓ(ｆ１)とＳ(ｆ２), Ｓ(ｆ４)とＳ(ｆ５)の統合がそれぞれ行なわれる。その結果、関数セクション割り当て状態はＡ＝ [{ｍａｉｎ} {ｆ１,ｆ２,ｆ３} {ｆ４, ｆ５} {ｆ６}] となり、７つの関数を４つのセクションに、命令メモリのサイズ制約の範囲内で配置できることになる。
【０１６３】
（プログラムＰの関数セクション割り当て結果）
本発明の第２の実施の形態に係るプログラム開発支援装置において、プログラムＰの関数セクション割り当て結果は、模式的に図１１に示すように表される。
【０１６４】
ここで、関数ｍａｉｎのリロケータブル・セクションをｒｓｅｃ１, アブソリュート・セクションをａｓｅｃ１とする。同様に関数ｆ１, 関数ｆ２, 関数ｆ３のセクションを、ｒｓｅｃ２／ａｓｅｃ２, 関数ｆ４, 関数ｆ５のセクションをｒｓｅｃ３／ａｓｅｃ３、関数ｆ６のセクションをｒｓｅｃ４／ａｓｅｃ４と名づける。その結果、ａｓｅｃ１は指定した命令メモリの開始アドレス０ｘ２０００００番地へ配置される。又ａｓｅｃ２, ａｓｅｃ３, ａｓｅｃ４は、それぞれのセクションが含む親関数ｍａｉｎのセクションの直後のアドレス０ｘ２０００１０番地へ配置される。
【０１６５】
このように配置した結果、プログラム実行時に各セクションの関数のうちいずれか１つが実行される直前に、その関数に対応するセクションを外部記憶などから命令メモリへ転送することで、指定した命令メモリの開始アドレスとサイズに沿った張替えが可能となる。すなわち、関数ｍａｉｎを呼び出す直前にセクションａｓｅｃ１を命令メモリに転送し、関数ｍａｉｎから関数ｆ１, 関数ｆ４, 関数ｆ６が呼び出される直前にそれぞれセクションａｓｅｃ２, ａｓｅｃ３, ａｓｅｃ４を命令メモリに転送すればよい。
【０１６６】
[ｈ](ステップＳ６)：[ｇ]で決定された関数のセクションへの割り当てを関数配置設定ファイルに出力する。又セクションの命令メモリ上のアドレスへの割り当てを、リンク設定ファイルに出力する。
【０１６７】
（関数配置設定ファイル）
本発明の第２の実施の形態に係るプログラム開発支援装置において、プログラムＰの関数セクション自動割当結果に対応する関数配置設定ファイルは、模式的に図１２に示すように表される。
【０１６８】
図１２の関数配置設定ファイルは、Ｃ言語の関数プロトタイプ宣言の記法を拡張したものである。関数プロトタイプ宣言の＿ｓｅｃｔｉｏｎ（）修飾により、関数を配置するリロケータブル・セクションを指定する。
【０１６９】
＿ｓｅｃｔｉｏｎ（）修飾の拡張に対応したＣコンパイラを用いて、プログラムのソース・ファイルを再コンパイルすることで、セクションの指定を生成されたアプリケーション・プログラムに反映する。
【０１７０】
（リンク設定ファイル）
本発明の第２の実施の形態に係るプログラム開発支援装置において、プログラムＰの関数セクション自動割当に対応するリンク設定ファイルは、模式的に図１３に示すように表される。
【０１７１】
図１３の設定ファイルでは、ａｓｅｃ１の命令メモリのアドレス(ａｄｄｒ)を０ｘ２０００００番地に指定している。ａｓｅｃ２, ａｓｅｃ３, ａｓｅｃ４の命令メモリのアドレスはａｓｅｃ１の末尾アドレスとしているが、ここでは絶対番地ではなく、ａｓｅｃ１の命令メモリのアドレスを示す演算子ａｄｄｒ(ａｓｅｃ１)と、ａｓｅｃ１のセクションサイズを示す演算子ｓｉｚｅ(ａｓｅｃ１)を使った相対的なアドレス指定としている。このような相対的なアドレス指定を使うことで、コード修正などによって関数ｍａｉｎのコードサイズが変化した場合でも、同じリンク設定ファイルを引き続き利用することが可能となる。
【０１７２】
本発明の第２の実施の形態に係るプログラム開発支援装置によれば、限られた命令メモリ容量のプロセッサ上で動作するプログラムの開発において、プログラム自体を入力として、命令メモリを効率よく利用するオーバーレイ方式を実現するための、命令コードの命令メモリ上の領域への割当を、入力として与えられた命令メモリサイズ制約の範囲内で、かつオーバーレイによるプログラム動作のオーバーヘッドの少なくなる形で、自動的に求めることができる。
【０１７３】
[第３の実施の形態]
本発明の第２の実施の形態に係るプログラム開発支援装置において、セクション割当部９０では、プログラムの関数コールグラフの構造に基づいたセクションの統合方法について説明した。セクション統合の目的は、命令メモリサイズの制約の範囲内で、連続して実行される複数の関数をなるべく同じセクションに配置して、オーバーレイによるメモリ張替えのオーバーヘッドを減らすことにあるが、そのために関数コールグラフの構造以外のデータを用いることも可能である。
【０１７４】
例えば命令セットシミュレータ(ＩＳＳ)などによるプログラムの実行環境がすでに存在するのであれば、プログラムを実際に実行し、その結果として実行時の関数間の呼出や遷移の頻度を得ることが可能である。プログラムの関数コールグラフに加えて、これらの指定を本発明の第２の実施の形態に係るプログラム開発支援装置に明示的に入力として与えることで、プログラムの実際の動作を考慮した、オーバーレイのオーバーヘッドのより少ない関数セクション割り当てを生成することができる。
【０１７５】
以下ではセクション割当部９０に対して、プログラムの実行結果に基づく関数実行履歴を入力として与え、それに基づいて関数のセクションへの割り当てと、セクションのアドレスへの配置を決定する方法について説明する(図１４)。なお、セクション割り当て部以外の部分については、本発明の第２の実施の形態に係るプログラム開発支援装置の構成と同様とする。
【０１７６】
（全体の処理手順を説明するフローチャート）
本発明の第３の実施の形態に係るプログラム開発支援装置において、全体の処理手順を説明するフローチャートは、図１４に示すように表される。図１４において、ステップＳ１〜Ｓ２は、プログラム解析部７０における動作に相当し、ステップＳ３〜Ｓ５０７は、セクション割当部９０における動作に相当し、ステップＳ６は、セクション出力部８０における動作に相当する。以下、本発明の第２の実施の形態と異なる動作について説明する。
【０１７７】
（セクション割当部）
（ａ）ステップＳ５０６において、関数実行履歴から、関数間の実行遷移回数を算出する。ここでは、親関数から子関数への呼出を１カウント、又兄弟関数間の実行遷移を１カウントと数える。ここでは兄弟関数の定義は本発明の第１の実施の形態に係るプログラム開発支援装置と異なり、「同じ親関数から呼ばれて、実行が連続して行われる２つの関数の組み合わせ」であるものとする。すなわち、高級言語ソース・ファイル上での登場順序に関係なく、親関数を同じくする２つの関数の実行が連続して行われる場合に、兄弟関数であるとみなす。
【０１７８】
又２つの関数間で逆方向の実行遷移があった場合、それらの実行遷移回数は合算するものとする。すなわち関数Ａから関数Ｂへ１０回遷移し、関数Ｂから関数Ａへ９回遷移した場合、ＡとＢの間の実行遷移回数は１９としてカウントする。
【０１７９】
（ｂ）次に、ステップＳ５０７において、初期状態Ａ＿ｉｎｉｔの各セクションに対して、ステップＳ５０６で算出した関数間の実行遷移回数を元に、セクション統合を行う（図１５）。具体的には、実行遷移回数の多い関数の組み合わせから順に、双方の関数が属するセクションの統合を試みる。この時、(ステップＳ５，図７)の場合と同様に、２つのセクションを統合した新しいセクションを作成した場合に、新しいセクションを含むサイズ最大の経路のサイズが命令メモリのサイズ制約を超えない場合のみ、セクションの統合を行う。
【０１８０】
（関数呼出回数に基くセクション統合の処理手順）
本発明の第３の実施の形態に係るプログラム開発支援装置において、関数呼出回数に基くセクション統合の処理手順を説明するフローチャートは、図１５に示すように表される。
【０１８１】
（ａ）ステップＳ３１において、関数実行遷移回数が１以上の関数の組み合わせのうち、セクション統合が未適用で回数最大の関数（Ｆ１，Ｆ２）を選ぶ。
【０１８２】
（ｂ）次に、ステップＳ３２において、関数Ｆ１と関数Ｆ２のセクションを統合したら、命令メモリサイズを超える経路が発生するか否かを判断する。ステップＳ３２において、関数Ｆ１と関数Ｆ２のセクションを統合したら、命令メモリサイズを超える経路が発生する場合には、ステップＳ３４に移行する。ステップＳ３２において、関数Ｆ１と関数Ｆ２のセクションを統合したら、命令メモリサイズを超える経路が発生しない場合には、ステップＳ３３に移行する。
【０１８３】
（ｃ）次に、ステップＳ３３において、関数Ｆ１のセクションと関数Ｆ２のセクションを統合する。
【０１８４】
（ｄ）次に、ステップＳ３４において、セクション統合を適用していない関数の組み合わせが存在するか否かを判断する。ステップＳ３４において、セクション統合を適用していない関数の組み合わせが存在する場合には、ステップＳ３１に戻る。ステップＳ３４において、セクション統合を適用していない関数の組み合わせが存在しない場合には、終了する。
【０１８５】
（プログラムＰ２）
本発明の第３の実施の形態に係るプログラム開発支援装置において、プログラムＰ２は模式的に、図１６に示すように表される。以下では、図１６に示すようなプログラムＰ２に対して、上記のセクション割り当て部を適用する例を説明する。
【０１８６】
プログラムＰ２は、関数ｍａｉｎ, 関数ｆ１, 関数ｆ２, 関数ｆ３, 関数ｆ４, 関数ｆ５, 関数ｆ６の７つの関数から構成される。関数ｍａｉｎから 関数ｆ１, 関数ｆ２, , 関数ｆ６の３つの関数が呼ばれ、関数ｆ２から関数ｆ３,  関数ｆ４, 関数ｆ５の３つの関数が呼ばれる。これ以外の関数呼出はないものとする。又、関数のコードサイズはすべて１６バイトであるものとする。
【０１８７】
命令メモリの開始アドレスとサイズは、本発明の第２の実施の形態に係るプログラム開発支援装置と同様、０ｘ２０００００番地から始まる６４バイトとする。
【０１８８】
（プログラムＰ２のコールグラフ）
本発明の第３の実施の形態に係るプログラム開発支援装置において、プログラムＰ２のコールグラフは、模式的に図１７に示すように表される。
【０１８９】
又これに基づく初期状態Ａ＿ｉｎｉｔは、すべての関数を別セクションとするので、Ａ＿ｉｎｉｔ＝[{ｍａｉｎ}, {ｆ１},{ｆ２},{ｆ３},{ｆ４},{ｆ５},{ｆ６}]  となる。
【０１９０】
図１６の関数間の呼出関係から、関数間の実行遷移回数を求めた結果が図１６である。
【０１９１】
本発明の第３の実施の形態に係るプログラム開発支援装置において、プログラムＰ２の関数間実行遷移回数は、模式的に図１８に示すように表される。
【０１９２】
図１８の実行遷移回数を元に回数の多い箇所から、命令メモリのサイズ上限を超えない範囲でセクションの統合を試みる。
【０１９３】
最も回数が多いのは関数ｆ４とｆ５の組み合わせで、ｆ４→ｆ５の１００回とｆ５→ｆ４の９０回の合計１９０回である。ここでセクションＳ(ｆ４)とＳ(ｆ５)を統合した場合、新しいセクション{ｆ４, ｆ５}を含むサイズ最大の経路Ｐ(ｍａｉｎ,ｆ２,ｆ４)とＰ(ｍａｉｎ,ｆ２,ｆ５)のサイズは{ｍａｉｎ}(１６バイト), {ｆ２}(１６バイト), {ｆ４, ｆ５}(３２バイト)となり、命令メモリのサイズ上限６４バイト以下に収まるので、統合を行う。
【０１９４】
その次に大きな実行遷移回数の組み合わせはｆ２とｆ４及びｆ２とｆ５であるが、これについて{ｆ２}と{ｆ４,ｆ５}の統合を行うと、経路Ｐ(ｍａｉｎ,ｆ２,ｆ３)のサイズが{ｍａｉｎ}(１６バイト), {ｆ２, ｆ４, ｆ５}(４８バイト), {ｆ３}(１６バイト)となり、合計サイズが６４バイトを超えてしまうため、統合は行わない。更に実行遷移回数１０回の組み合わせについても、同様に６４バイトを超える経路が発生するために統合はできない。
【０１９５】
最後に実行遷移回数９回の組み合わせである関数ｆ１とｆ６の組み合わせであるが、これについてはセクション統合後の最大サイズ経路Ｐ(ｍａｉｎ,ｆ１)とＰ(ｍａｉｎ,ｆ６)のいずれもが、{ｍａｉｎ}(１６バイト) {ｆ１, ｆ６}(３２バイト)となり、６４バイトを超えることがないため、統合を行う。
【０１９６】
結果として、ｆ１とｆ６、及びｆ４とｆ５のセクション統合が行われ、最終的な状態は
Ａ＿ｉｎｉｔ＝[{ｍａｉｎ}, {ｆ１, ｆ６},{ｆ２},{ｆ３},{ｆ４,ｆ５}]  となる（図１９）。
【０１９７】
（プログラムＰ２の関数セクション割り当て結果）
本発明の第３の実施の形態に係るプログラム開発支援装置において、プログラムＰ２の関数セクション割り当て結果は、模式的に図１９に示すように表される。
【０１９８】
この例では、関数実行履歴が唯一つに定まるプログラムＰ２について適用例を説明したが、実際にはプログラムの入力データに応じて複数の異なった関数実行履歴が得られるのが普通である。その場合、複数の関数実行履歴を本発明の第３の実施の形態に係るプログラム開発支援装置の入力として与えることも可能である。複数の関数実行履歴を入力とする場合、単純に同じ関数の組み合わせについて実行遷移回数を合計してもよいし、個々の関数実行履歴の重要度に応じてそれぞれ適当な乗数をユーザが指定して積和してもよい。
【０１９９】
（第３の実施の形態の変形例）
本発明の第２の実施の形態や第３の実施の形態では、初期状態Ａ＿ｉｎｉｔにおいては、全ての関数が別個のセクションに割り当てられているものとしたが、プログラムの設計者がプログラムの動作フローを考慮し、特定の関数の組み合わせや集合を同じセクションに配置するよう明示的に指定することも可能である。その場合、Ａ＿ｉｎｉｔに対して、最初に設計者の指定した関数群についてセクションの統合を行ってから、セクション割り当て部の処理を行う。
【０２００】
本発明の第３の実施の形態に係るプログラム開発支援装置によれば、限られた命令メモリ容量のプロセッサ上で動作するプログラムの開発において、プログラム自体を入力として、命令メモリを効率よく利用するオーバーレイ方式を実現するための、命令コードの命令メモリ上の領域への割当を、入力として与えられた命令メモリサイズ制約の範囲内で、かつオーバーレイによるプログラム動作のオーバーヘッドの少なくなる形で、自動的に求めることができる。
【０２０１】
[その他の実施の形態]
上記のように、本発明の実施の形態によって記載したが、この開示の一部をなす論述及び図面はこの発明を限定するものであると理解すべきではない。この開示から当業者には様々な代替実施の形態、実施の形態及び運用技術が明らかとなろう。
【０２０２】
このように、本発明はここでは記載していない様々な実施の形態等を含むことは勿論である。したがって、本発明の技術的範囲は上記の説明から妥当な特許請求の範囲に係る発明特定事項によってのみ定められるものである。
【図面の簡単な説明】
【０２０３】
【図１】本発明の第１の実施の形態に係るプログラム開発支援装置のアプリケーション作成時の処理フロー及びファイルの入出力フローを示す図。
【図２】本発明の第１の実施の形態に係るプログラム開発支援装置の処理手順を表す機能的ブロック構成図。
【図３】本発明の第１の実施の形態に係るプログラム開発支援装置の模式的ブロック構成図。
【図４】本発明の第１の実施の形態に係るプログラム開発支援装置の表示画面例を示す図。
【図５】本発明の第２の実施の形態に係るプログラム開発支援装置のアプリケーション作成時の処理フロー及びファイルの入出力フローを示す図。
【図６】本発明の第２の実施の形態に係るプログラム開発支援装置の模式的ブロック構成図。
【図７】本発明の第２の実施の形態に係るプログラム開発支援装置において、全体の処理手順を説明するフローチャート図。
【図８】本発明の第２の実施の形態に係るプログラム開発支援装置において、兄弟間統合の処理手順を説明するフローチャート図。
【図９】本発明の第２の実施の形態に係るプログラム開発支援装置において、親子間統合の処理手順を説明するフローチャート図。
【図１０】本発明の第２の実施の形態に係るプログラム開発支援装置において、プログラムＰ１のコールグラフの模式図。
【図１１】本発明の第２の実施の形態に係るプログラム開発支援装置において、プログラムＰの関数セクション割り当て結果を説明する模式図。
【図１２】本発明の第２の実施の形態に係るプログラム開発支援装置において、プログラムＰの関数セクション自動割当結果に対応する関数配置設定ファイルの模式図。
【図１３】本発明の第２の実施の形態に係るプログラム開発支援装置において、プログラムＰの関数セクション自動割当に対応するリンク設定ファイルの模式図。
【図１４】本発明の第３の実施の形態に係るプログラム開発支援装置において、全体の処理手順を説明するフローチャート図。
【図１５】本発明の第３の実施の形態に係るプログラム開発支援装置において、関数呼出回数に基くセクション統合の処理手順を説明するフローチャート図。
【図１６】本発明の第３の実施の形態に係るプログラム開発支援装置において、プログラムＰ２の模式図。
【図１７】本発明の第３の実施の形態に係るプログラム開発支援装置において、プログラムＰ２のコールグラフの模式図。
【図１８】本発明の第３の実施の形態に係るプログラム開発支援装置において、プログラムＰ２の         関数間実行遷移回数の模式図。
【図１９】本発明の第３の実施の形態に係るプログラム開発支援装置において、プログラムＰ２の         関数セクション割り当て結果を説明する模式図。
【符号の説明】
【０２０４】
１…メモリ部
２…高級言語ソース・ファイル入力部
３…アブソリュート・オブジェクト・ファイル入力部
４…関数配置設定ファイル入力部
５…関数配置設定ファイル出力部
６…関数セクション初期配置部
７…セクション配置アドレス決定部
８…セクション統合部
９…命令メモリ制約入力部
１０…高級言語ソース・ファイル格納部
１１…関数実行履歴入力部
１２…コンパイラ格納部
１３…自動割当結果出力部
１５…自動割当結果入力部
１６…リンカ格納部
１８…アブソリュート・オブジェクト・ファイル格納部
２０…関数配置設定ファイル格納部
２２…リンク設定ファイル格納部
２４…プログラム開発支援装置
２６…関数呼出情報／配置情報解析ファイル格納部
３２…関数呼出情報入力部
３４…関数配置情報入力部
３８…リンク設定ファイル入力部
４０…リンク設定ファイル出力部
５８…命令メモリ制約格納部
６０…関数実行履歴格納部
７０…プログラム解析部
８０…セクション出力部
９０…セクション割当部
９２…セクション編集部
９４…リロケータブル・セクション配置編集部
９６…アブソリュート・セクション配置編集部
１００…高級言語ソース・ファイル
１２０…コンパイラ
１４０…リロケータブル・オブジェクト・ファイル
１６０…リンカ
１８０…アブソリュート・オブジェクト・ファイル
２００…関数配置設定ファイル
２２０…リンク設定ファイル
２４０…命令メモリ制約
２６０…関数実行履歴
２６２…関数呼出情報/配置情報解析ファイル
２８０…ソース・ファイル名/関数サイズ入力
３００…関数呼出情報/セクション配置解析機能
３２０…関数呼出情報／配置情報入力
３４０…関数配置情報入力
３６０…関数配置情報出力
３８０…リンク設定ファイル入力
４００…リンク設定ファイル出力
４２０…関数呼出情報
４４０…関数セクション配置情報
４６０…セクション配置情報
４８０…コールグラフ／セクション配置
５００…関数セクション配置表示
５２０…関数セクション配置編集
５４０…セクション配置情報表示
５６０…セクション配置情報編集
【図１】
2007293383.tif 000003
【図２】
2007293383.tif 000004
【図３】
2007293383.tif 000005
【図５】
2007293383.tif 000006
【図６】
2007293383.tif 000007
【図７】
2007293383.tif 000008
【図８】
2007293383.tif 000009
【図９】
2007293383.tif 000010
【図１０】
2007293383.tif 000011
【図１１】
2007293383.tif 000012
【図１２】
2007293383.tif 000013
【図１３】
2007293383.tif 000014
【図１４】
2007293383.tif 000015
【図１５】
2007293383.tif 000016
【図１６】
2007293383.tif 000017
【図１７】
2007293383.tif 000018
【図１８】
2007293383.tif 000019
【図１９】
2007293383.tif 000020
【図４】
2007293383.tif 000021