(57)【要約】【課題】組み込みプログラムのＲＡＭ使用量の増加を抑制する技術を提供する。【解決手段】マイクロコンピュータのＲＯＭに格納される組み込みプログラムのＲＯＭ配置と組み込みプログラムをＲＡＭへコピーするときのＲＡＭ配置とを決定するコンパイラ装置を以下のように構成する。コンパイラ部は、複数のコマンドに共通で使用されるファンクションの使用頻度を求めて共通で使用するファンクション、特定のコマンドのみで使用するファンクションの順に空き領域ができないようにＲＡＭ配置の構成を決定する。リンカ部は、ＲＡＭ配置構成からＲＡＭ配置アドレスを決定してファンクションのＲＯＭ配置アドレスを決定し、コマンド管理リストとアドレス管理リストを作成してソースプログラムを含めたリスト類よりＲＯＭイメージを作成する。【選択図】図５
2012243118.tif 000002
【特許請求の範囲】
【請求項１】
マイクロコンピュータのＲＯＭに格納される組み込みプログラムのＲＯＭ配置と前記組み込みプログラムをＲＡＭへコピーするときのＲＡＭ配置とを決定するコンパイラ装置であって、
ソースプログラムおよびＲＡＭ実行するファンクション情報からコマンドで使用されるＲＡＭ実行するファンクション情報一覧を作成して該ファンクションのソースプログラムをコンパイルしたオブジェクトよりファンクションサイズを決定し、複数のコマンドに共通で使用されるファンクションの使用頻度を求めて共通で使用するファンクション、特定のコマンドのみで使用するファンクションの順に空き領域ができないようにＲＡＭ配置の構成を決定するコンパイラ部と、
前記ＲＡＭ配置構成からＲＡＭ配置アドレスを決定してファンクションのＲＯＭ配置アドレスを決定し、コマンド管理リストとアドレス管理リストを作成してソースプログラムを含めた前記リスト類よりＲＯＭイメージを作成するリンカ部と
を有することを特徴とする
コンパイラ装置。
【請求項２】
請求項１に記載のコンパイラ装置において、
前記コンパイラ部は、
コマンドで使用されるＲＡＭ実行するファンクション情報の一覧を作成するファンクション判定部と、
ファンクションサイズを決定するファンクションサイズ決定部と、
共通で使用するファンクション、コマンドのみで使用するファンクションの順に空き領域ができないようにＲＡＭの配置を決定するＲＡＭ配置構成決定部と
を有することを特徴とする
コンパイラ装置。
【請求項３】
請求項１または２に記載のコンパイラ装置において、
前記リンカ部は、
ＲＯＭ配置アドレスとＲＡＭ配置アドレスからコマンド管理リストとアドレス管理リストとを作成する管理リスト作成部と、
ソースプログラム、コマンド管理リスト、アドレス管理リストからＲＯＭイメージを作成するＲＯＭイメージ出力部と
を有することを特徴とする
コンパイラ装置。
【請求項４】
請求項３に記載のコンパイラ装置において、
前記管理リスト作成部は、
複数のコマンドで使用するファンクション番号と前記ファンクション番号と同じ数のＲＡＭへのジャンプ先アドレスとを関連づけて前記コマンド管理リストを作成することを特徴とする
コンパイラ装置。
【請求項５】
請求項４に記載のコンパイラ装置において、
前記管理リスト作成部は、
コピー元アドレスとコピー先アドレスとコピーサイズとを１組として、全ファンクション分の複数リストを作成して前記アドレス管理リストを作成することを特徴とするコンパイラ装置。
【請求項６】
マイクロコンピュータのＲＯＭに格納される組み込みプログラムのＲＯＭ配置と前記組み込みプログラムをＲＡＭへコピーするときのＲＡＭ配置とを決定するコンパイラ装置の動作方法であって、
コマンドで使用されるＲＡＭ実行するファンクション情報の一覧を作成するステップと、
ファンクションサイズを決定するステップと、
共通で使用するファンクション、コマンドのみで使用するファンクションの順に空き領域ができないようにＲＡＭの配置を決定するステップと、
ＲＯＭ／ＲＡＭ配置アドレスからコマンド管理リストとアドレス管理リストとを作成するステップと、
ソースプログラム、コマンド管理リスト、アドレス管理リストからＲＯＭイメージを作成するステップと
を有すること特徴とする
コンパイラ装置の動作方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロコンピュータに搭載される組み込みプログラムをコンパイルするコンパイラ装置に関する。
【背景技術】
【０００２】
用語の定義：
本明細書において、『ファンクション』とは、『関数』を構成する１つの処理ブロックを意味しており、『関数』は、『ファンクション』の集まりとして構成される。また、『コマンド』とは、関数の集まりであり１つの命令体系を示している。例えば、Ｗｉｎｄｏｗｓ（登録商標）のコマンドプロンプト上のＣＤコマンドやＤＩＲコマンドは、『コマンド』の例である。
【０００３】
発明の背景：
低速なＲＯＭ（ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ）に格納されている組み込みプログラムを高速に動作させるための一つの手法として、組み込みプログラムを低速なＲＯＭから高速なＲＡＭ（ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）にコピーし、当該ＲＡＭ上で当該組み込みプログラムを実行する手法（以下、組み込みシステムと記載する場合もある）が知られている。
【０００４】
組み込みシステムは、例えば、家庭用機器、産業用機器、医療用機器のような、電子制御を必要とするほとんどの製品に用いられている。それら電子制御を必要とする製品には、組み込みシステムを実現するためのマイクロコンピュータが搭載されている。
【０００５】
組み込みシステムにおいて、組み込みプログラムをマイクロコンピュータのＲＡＭにコピーして実行する場合、データの初期値やプログラムコードを、実行前に、ＲＡＭ上に展開する必要がある。つまり、ＲＡＭに展開するデータをＲＯＭ上に持たせておき、当該データをアプリケーション実行前にＲＯＭからＲＡＭにコピーする作業が必要になる。ＲＡＭに展開するデータをＲＯＭ上に持たせておき、当該データをアプリケーション実行前にＲＯＭからＲＡＭにコピーするように組み込むプログラムを作成する作業は、しばしば、ＲＯＭ化と称される。
【０００６】
組み込みシステムを有する製品に対する多機能化や高性能化の要求に伴って、制御をするための組み込みプログラムのプログラム容量も増加してきている。それに対し、製品のコスト競争力を上げるために、マイクロコンピュータのような、実装部品のコストダウンの要求が高まってきている。組み込みプログラムをＲＯＭからＲＡＭにコピーして実行するコンピュータにおいて、必要なＲＯＭ容量及びＲＡＭ容量を低減させる技術が知られている（例えば、特許文献１参照）。
【０００７】
図１は、ＲＯＭ化用オブジェクトを作成する典型的な手順を示す概念図である。まず、組み込みプログラムのソースプログラム５０１に、ＲＯＭ化のためのコピー関数５０２の記述が追加される。次に、ＲＯＭ化領域確保コード５０３と、コピー関数５０２を含むソースプログラム５０１に対してＲＯＭ化をするオプションを指定しながらコンパイルを行ったオブジェクト５０８と、ＲＯＭ化ライブラリ５０４とリンクすることにより、実行可能オブジェクト５０５が生成される。最後に、ＲＯＭ化プロセッサ（ｒｏｍｐ８５０）５０６により、ＲＯＭ化用オブジェクト５０７が生成される。
【０００８】
図２は、特許文献１に記載のマイクロコンピュータ１００の構成を示すブロック図である。マイクロコンピュータ１００は、ＣＰＵ（ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）１０１と、ＲＯＭ１０２と、ＲＡＭ１０４とを備えている。ＲＯＭ１０２には、組み込みプログラム１０３が格納されている。組み込みプログラム１０３は、その少なくとも一部分がＲＡＭ１０４にコピーされて実行される。図２において、ＲＡＭ１０４にコピーされた組み込みプログラムは、符号１０５によって参照されている。
【０００９】
図３は、組み込みプログラム作成装置１２０の構成を示すブロック図である。組み込みプログラム作成装置１２０は、演算装置として機能するＣＰＵ１２１と、ＲＡＭ１２２と、入力装置１２３と、出力装置１２４と、外部記憶装置１２５とを備えている。外部記憶装置１２５には、組み込みプログラムの作成を支援するために使用する各種ソフトウェア（プログラミングツール１２６、コンパイラ１２７、及びヘキサコンバータ１２８）がインストールされている。
【００１０】
図４は、従来の組み込みプログラムの作成手順及び当該組み込みプログラムをＲＯＭに格納する手順を示すフローチャートである。ステップＳ１において、ソースプログラムを作成する。次に、ステップＳ１で作成したソースプログラムの中に、ＲＡＭ１０４で実行するファンクションが存在するか否かを判断し（ステップＳ２）、存在する場合は、ＲＡＭ１０４で実行するファンクションが抽出される（ステップＳ３）。次に、ステップＳ３で抽出したファンクションのヘッダ（先頭）とボトム（末尾）にシンボルが定義される（ステップＳ４）。後述のように、ファンクションのヘッダとボトムに定義されたシンボルは、ファンクションをＲＡＭ１０４にコピーする際に、コピー元（ＲＯＭ）のコピー開始アドレス及びコピー終了アドレスを認識するために使用される。また、ファンクションのヘッダとボトムに定義されたシンボルは、ＲＡＭ１０４にコピーされるファンクションのプログラムサイズを認識するためにも使用される。
【００１１】
続いて、ステップＳ３で抽出したファンクションをＲＡＭ１０４に配置する構成が決定される（ステップＳ５）。各ファンクションのプログラムサイズがヘッダとボトムに定義されたシンボルから認識され、認識されたプログラムサイズを用いてＲＡＭで実行されるファンクションのＲＡＭ１０４上の配置、即ち、ファンクションがＲＡＭ１０４にコピーされる際の宛先のアドレスであるＲＡＭ配置アドレスが決定される。決定されたＲＡＭ配置アドレスは、アドレス管理リストに定義される（ステップＳ６）。次にアドレス管理リストの作成が終了したら、アドレス管理リストに記述されたＲＡＭ１０４上のアドレスで各ファンクションが実行されるように、ステップＳ１で作成したソースプログラムが修正される（ステップＳ７）。
【００１２】
その後、全てのコマンドのソースプログラム作成が終了したか否かを判断し（ステップＳ８）、終了した場合は、作成したソースプログラムがコンパイルされてオブジェクトコードが生成され、更に、そのオブジェクトコードがヘキサフォーマットに変換されて組み込みプログラム１０３のヘキサファイルが生成される（ステップＳ９）。更に、そのヘキサファイルがＲＯＭライターによってＲＯＭに格納される（ステップＳ１０）。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開２００９−２１１１９３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１４】
上述のように、ＲＯＭ化によってＲＡＭへ展開される組み込みプログラムは、コマンド毎にＲＯＭへ格納されている。組み込みプログラムがコマンドごとに用意されている場合、同じ動作をするプログラムが、ＲＯＭに複数存在してしまうことがある。そのような場合は、ＲＯＭが占有する面積が大きくなってしまう。また、従来の組み込みシステムでは、ＲＡＭで実行する必要がないプログラムもＲＡＭへ展開しているために、確保しておくべきＲＡＭの面積が大きくなり、製品の価格が上昇してしまうことがあった。
【００１５】
特許文献１に記載の技術において、組み込みプログラムには、各コマンドのみで使用するファンクション（以下、専用ファンクションと記載する場合もある）と、共通で使用するファンクション（以下、共用ファンクションと記載する場合もある）とが含まれている。プログラム配置時において、専用ファンクション、共用ファンクションの順で配置され、かつ共用ファンクションは、各コマンドで同じアドレスに配置されている。この場合において、共用ファンクションの配置は、専用ファンクションのプログラムサイズが最大になるファンクションに配置アドレスを合わせる必要がある。
【００１６】
ＲＡＭに展開してから実行するファンクションのＲＡＭ配置を決定する（ステップＳ５）際に、共用ファンクションの一部を使用しないコマンドでは、専用ファンクションと共用ファンクションの間にファンクションが配置されない領域（以下、空き領域と記載する場合もある）ができてしまう。そのため、組み込みプログラムのＲＡＭ使用量が増加するという問題がある。
【課題を解決するための手段】
【００１７】
マイクロコンピュータのＲＯＭに格納される組み込みプログラムのＲＯＭ配置と組み込みプログラムをＲＡＭへコピーするときのＲＡＭ配置とを決定するコンパイラ装置を以下のように構成する。そのコンパイラ装置は、コンパイラ部と、リンカ部とを備えているものとする。ここで、コンパイラ部は、ソースプログラムおよびＲＡＭ実行するファンクション情報からコマンドで使用されるＲＡＭ実行するファンクション情報一覧を作成して該ファンクションのソースプログラムをコンパイルしたオブジェクトよりファンクションサイズを決定し、複数のコマンドに共通で使用されるファンクションの使用頻度を求めて共通で使用するファンクション、特定のコマンドのみで使用するファンクションの順に空き領域ができないようにＲＡＭ配置の構成を決定する。リンカ部は、ＲＡＭ配置構成からＲＡＭ配置アドレスを決定してファンクションのＲＯＭ配置アドレスを決定し、コマンド管理リストとアドレス管理リストを作成してソースプログラムを含めたリスト類よりＲＯＭイメージを作成する。
【発明の効果】
【００１８】
本願において開示される発明のうち、代表的なものによって得られる効果を簡単に説明すれば、組み込みプログラムのＲＡＭ使用量の増加を抑制することが可能となる。
【図面の簡単な説明】
【００１９】
【図１】図１は、ＲＯＭ化用オブジェクトを作成する典型的な手順を示す概念図である。
【図２】図２は、特許文献１に記載のマイクロコンピュータ１００の構成を示すブロック図である。
【図３】図３は、組み込みプログラム作成装置１２０の構成を示すブロック図である。
【図４】図４は、従来の組み込みプログラムの作成手順及び当該組み込みプログラムをＲＯＭに格納する手順を示すフローチャートである。
【図５】図５は、本実施形態のコンパイラ装置１の構成を例示するブロック図である。
【図６Ａ】図６Ａは、ファンクション判定部１５によって生成される情報の構成を例示するブロック図である。
【図６Ｂ】図６Ｂは、ファンクションサイズ決定部１６によって生成される情報の構成を例示するブロック図である。
【図６Ｃ】図６Ｃは、ＲＡＭ配置構成決定部１７によって生成される情報の構成を例示するブロック図である。
【図７】図７は、コマンド管理リスト８の構成を例示するブロック図である。
【図８】図８は、本実施形態のアドレス管理リスト９の構成を例示するブロック図である。
【図９】図９は、本実施形態のコンパイラ装置１における組み込みプログラムの作成手順を例示するフローチャートである。
【図１０Ａ】図１０Ａは、本実施形態のコンパイラ装置１における、ＲＡＭ配置を決定する手順を示すフローチャートである。
【図１０Ｂ】図１０Ｂは、本実施形態のコンパイラ装置１における、ＲＡＭ配置を決定する手順を示すフローチャートである。
【図１１】図１１は、実際のＲＯＭとＲＡＭとのファンクションの配置を例示するブロック図である。
【図１２】図１２は、実際のＲＯＭとＲＡＭとのファンクションの配置を例示するブロック図である。
【発明を実施するための形態】
【００２０】
以下、本発明の実施の形態を図面に基づいて説明する。なお、実施の形態を説明するための図において、同一の部材には原則として同一の符号を付し、その繰り返しの説明は省略する。図５は、本実施形態のコンパイラ装置１の構成を例示するブロック図である。本実施形態のコンパイラ装置１は、コンパイラ部２とリンカ部３とを備えている。
【００２１】
コンパイラ部２は、字句・構文解析部１１と、中間語作成部１２と、最適化部１３と、コード生成部１４と、ファンクション判定部１５と、ファンクションサイズ決定部１６と、ＲＡＭ配置構成決定部１７とを備えている。
【００２２】
字句・構文解析部１１は、記憶装置に記憶されているソースプログラム（原始プログラム）４の字句・構文解析を行なう。中間語作成部１２は、ソースプログラム４を中間言語で作成する。最適化部１３は、変数名表、定数表などの各種情報に基づいて、コードの最適化を行う。コード生成部１４は、オブジェクトプログラムを生成する。
【００２３】
ファンクション判定部１５は、ソースプログラム４およびＲＡＭ実行するファンクション情報５から、各コマンドで使用されるＲＡＭ実行するファンクションの一覧情報を作成する。ファンクションサイズ決定部１６は、作成したＲＡＭ実行するファンクション情報と、ＲＡＭ実行するファンクションのソースプログラムをコンパイルしたオブジェクトより、各ファンクションサイズを決定する。
【００２４】
ＲＡＭ配置構成決定部１７は、各コマンドで使用するファンクションから、各コマンドのみで使用されるファンクションと共通で使用するファンクションに分類する。また、ＲＡＭ配置構成決定部１７は、共通で使用するファンクションの使用頻度を求め、共通で使用するファンクションの使用頻度情報、各ファンクションのサイズにより共通で使用するファンクション、各コマンドのみで使用するファンクションの順に空き領域ができないようにＲＡＭの配置を決定する。
【００２５】
リンカ部３は、コード配置部２１と、管理リスト作成部２２と、ＲＯＭイメージ出力部２３とを備えている。コード配置部２１は、作成した複数のオブジェクト６をメモリ上に配置するための割り付けを行う。管理リスト作成部２２は、ＲＡＭ配置構成からＲＡＭ配置アドレスを決定する。また、管理リスト作成部２２は、各ファンクションのＲＯＭ配置アドレスを決定する。そして、管理リスト作成部２２は、ＲＯＭ配置アドレスとＲＡＭ配置アドレスとから、コマンド管理リスト８とアドレス管理リスト９を作成する。ＲＯＭイメージ出力部２３は、決定したＲＯＭ配置アドレスとＲＡＭ配置アドレスをソースプログラム（ソースプログラム４）へフィードバックする。また、ＲＯＭイメージ出力部２３は、コマンド管理リスト８、アドレス管理リスト９およびソースプログラム（ソースプログラム４）から、ＲＯＭイメージを作成する。
【００２６】
図６Ａ、図６Ｂおよび図６Ｃは、コンパイラ部２のファンクション判定部１５、ファンクションサイズ決定部１６およびＲＡＭ配置構成決定部１７によって生成される各情報の構成を例示するブロック図である。以下の説明においては、本願発明の理解を容易にするために、処理対象のコマンドが、コマンドＡ、コマンドＢおよびコマンドＣの３つである場合を例示する。
【００２７】
図６Ａは、ファンクション判定部１５によって生成される使用するファンクションの一覧情報Ｆ６０１の構成を例示している。図６Ｂは、ファンクションサイズ決定部１６によって生成されるファンクションサイズ情報Ｆ６０２の構成を例示している。図６Ｃは、ＲＡＭ配置構成決定部１７によって生成される専用ファンクション一覧情報Ｆ６０３、共用ファンクション一覧情報Ｆ６０４および共用ファンクション使用頻度情報Ｆ６０５の構成を例示している。
【００２８】
図６Ａに例示されているように、使用するファンクションの一覧情報Ｆ６０１は、コマンド毎の使用するファンクション番号一覧であり、コマンドごとの使用するファンクションがグループ化されている。使用するファンクションの一覧情報Ｆ６０１は、第１ファンクショングループＦ６０１−１と、第２ファンクショングループＦ６０１−２と、第３ファンクショングループＦ６０１−３とを含んでいる。例えば、第１ファンクショングループＦ６０１−１は、コマンドＡで使用するファンクション番号のグループであり、ファンクション＃１、ファンクション＃４、ファンクション＃５を含んでいる。
【００２９】
図６Ｂに例示されているように、ファンクションサイズ情報Ｆ６０２は、各ファンクションのサイズをファンクション番号で参照できるように構成されている。
【００３０】
図６Ｃに例示されているように、専用ファンクション一覧情報Ｆ６０３は、各コマンドのみで使用するファンクション番号の一覧であり、第１専用ファンクションＦ６０３−１と、第２専用ファンクションＦ６０３−２と、第３専用ファンクションＦ６０３−３を含んでいる。専用ファンクション一覧情報Ｆ６０３によって、例えば、ファンクション番号が＃１である第１専用ファンクションＦ６０３−１（ファンクション＃１）は、コマンドＡでのみ使用されるファンクションであることが定義される。
【００３１】
共用ファンクション一覧情報Ｆ６０４は、複数のコマンドで共通に使用されるファンクションの一覧であり、第１共用ファンクションＦ６０４−１と、第２共用ファンクションＦ６０４−２と、第３共用ファンクションＦ６０４−３とを含んでいる。共用ファンクション一覧情報Ｆ６０４によって、例えば、ファンクション番号として＃４が付されている第１共用ファンクションＦ６０４−１（ファンクション＃４）は、複数のコマンドで共通に使用されるファンクションであることが定義される。
【００３２】
共用ファンクション使用頻度情報Ｆ６０５は、共用ファンクション一覧情報Ｆ６０４の各ファンクションに対して、全コマンド中で使用される回数の一覧である。共用ファンクション使用頻度情報Ｆ６０５は、第１使用頻度情報Ｆ６０５−１と、第２使用頻度情報Ｆ６０５−２と、第３使用頻度情報Ｆ６０５−３とを含んでいる。第１使用頻度情報Ｆ６０５−１は、ファンクション＃４の使用回数情報を示している。第２使用頻度情報Ｆ６０５−２は、ファンクション＃５の使用回数情報を示している。第３使用頻度情報Ｆ６０５−３は、ファンクション＃６の使用回数情報を示している。
【００３３】
図７は、コマンド管理リスト８の構成を例示するブロック図である。コマンド管理リスト８は、各コマンドで使用するファンクション番号のグループ（ファンクション番号情報Ｌ１）と、ＲＡＭへのジャンプ先アドレスのグループ（ジャンプ先アドレス情報Ｌ２）とを備えている。ファンクション番号情報Ｌ１には、複数のコマンドの各々の名称と、そのコマンドで使用するファンクション番号とが関連付けられている。ファンクション番号情報Ｌ１は、コマンドＡ用ファンクション番号情報Ｌ１−１と、コマンドＢ用ファンクション番号情報Ｌ１−２と、コマンドＣ用ファンクション番号情報Ｌ１−３とを含んでいる。コマンドＡ用ファンクション番号情報Ｌ１−１は、コマンドＡで使用するファンクション番号を示している。コマンドＢ用ファンクション番号情報Ｌ１−２はコマンドＢで使用するファンクション番号を示している。コマンドＣ用ファンクション番号情報Ｌ１−３は、コマンドＣで使用するファンクション番号を示している。
【００３４】
ジャンプ先アドレス情報Ｌ２には、複数のコマンドの各々の名称と、各コマンドのＲＡＭへのジャンプ先アドレスとが関連付けられている。ジャンプ先アドレス情報Ｌ２は、第１ジャンプ先アドレス情報Ｌ２−１と、第２ジャンプ先アドレス情報Ｌ２−２と、第３ジャンプ先アドレス情報Ｌ２−３とを含んでいる。第１ジャンプ先アドレス情報Ｌ２−１は、コマンドＡのＲＡＭジャンプ先アドレスを示している。コマンドＢ用ファンクション番号情報Ｌ１−２は、コマンドＢのＲＡＭジャンプ先アドレスを示している。コマンドＣ用ファンクション番号情報Ｌ１−３は、コマンドＣのＲＡＭジャンプ先アドレスを示している。
【００３５】
図８は、本実施形態のアドレス管理リスト９の構成を例示するブロック図である。アドレス管理リスト９は、コピー元アドレスグループ９−１と、コピー先アドレスグループ９−２と、コピーサイズグループ９−３とを備えている。アドレス管理リスト９は、複数のファンクションのうちの一つを特定したときに、そのファンクションに対応するコピー元アドレスと、コピー先アドレスと、コピーサイズとの組を抽出することができるように構成されている。アドレス管理リスト９には、各ファンクションに対応して、複数の組が備えられている。
【００３６】
図９は、本実施形態のコンパイラ装置１における組み込みプログラムの作成手順を例示するフローチャートである。ステップＳ１０１において、ファンクション判定部１５は、ソースプログラムとＲＡＭで実行するファンクションの抽出結果（ＲＡＭ実行するファンクション情報５）を読み込む。
ステップＳ１０２において、ＲＡＭ配置構成決定部１７は、そのＲＡＭ実行するファンクション情報５に基づいて、ＲＡＭに配置する構成を決定する。
【００３７】
ステップＳ１０３において、管理リスト作成部２２は、その決定したＲＡＭの配置順に、各ファンクションのＲＡＭ配置アドレスを決定する。また、ＲＯＭ配置アドレスを決定するために、全コマンド数から、後段のステップで作成されるコマンド管理リスト８のサイズを求める。同様に、全ファンクション数から、後段のステップで作成されるアドレス管理リスト９のサイズを求める。そして、コマンド管理リスト８を配置するアドレス、アドレス管理リスト９を配置するアドレス、および各ファンクションを配置するアドレスを順に特定してＲＯＭ配置アドレスを決定する。
【００３８】
ステップＳ１０４において、管理リスト作成部２２は、各コマンドで使用するファンクション番号のグループ（ファンクション番号情報Ｌ１）と、ＲＡＭへのジャンプ先アドレスのグループ（ジャンプ先アドレス情報Ｌ２）とで構成されるコマンド管理リスト８を作成する。また、管理リスト作成部２２は、各ファンクションの各々のコピー元アドレスを示すコピー元アドレスグループ９−１と、各ファンクションの各々のコピー先アドレスを示すコピー先アドレスグループ９−２と、各ファンクションの各々のコピーサイズを示すコピーサイズグループ９−３とを備えるアドレス管理リスト９を構成する。換言すると、管理リスト作成部２２は、特定のファンクションに対し、コピー元アドレス、コピー先アドレスおよびコピーサイズが組となるようにアドレス管理リスト９を構成し、そのアドレス管理リスト９が、全ファンクション分の複数組のリストとなるようにアドレス管理リスト９を構成する。
【００３９】
ステップＳ１０５において、ＲＯＭイメージ出力部２３は、定義したＲＡＭアドレスでファンクションが実行できるように、アドレス情報をファンクションへのアクセス先アドレスへ反映させてフィードバックする。その後ステップＳ１０６において、ＲＯＭイメージ出力部２３は、ソースプログラム（ソースプログラム４）、コマンド管理リスト８、およびアドレス管理リスト９からＲＯＭイメージ７を作成する。
【００４０】
上述の図６Ａ〜図６Ｃに示されるファンクションの情報は、ソースプログラム（ソースプログラム４）と、ＲＡＭで実行するファンクションの抽出結果（ＲＡＭ実行するファンクション情報５）に基づいて生成される。具体的には、使用するファンクションの一覧情報Ｆ６０１と、ファンクションサイズ情報Ｆ６０２と、専用ファンクション一覧情報Ｆ６０３と、共用ファンクション一覧情報Ｆ６０４と、共用ファンクション使用頻度情報Ｆ６０５とは、上述のステップＳ１０２において作成される。その作成されたファンクション情報は、コマンド管理リスト８、アドレス管理リスト９を作成する時に用いられる。
【００４１】
上述の図７に例示されるコマンド管理リスト８のファンクション番号情報Ｌ１を作成する場合には、使用するファンクションの一覧情報Ｆ６０１が参照される。例えば、第１ファンクショングループＦ６０１−１が参照されて、コマンド管理リスト８のコマンドＡ用ファンクション番号情報Ｌ１−１が構成される。また、各ファンクションのＲＡＭ配置アドレス決定後、ステップＳ１０４では、専用ファンクション一覧情報Ｆ６０３のＲＡＭ配置アドレスに基づいて、コマンド管理リスト８のジャンプ先アドレス情報Ｌ２が構成される。例えば、第１専用ファンクションＦ６０３−１のＲＡＭ配置アドレスが参照されて、コマンド管理リスト８の第１ジャンプ先アドレス情報Ｌ２−１が構成される。本実施形態のコマンド管理リスト８とアドレス管理リスト９は、マイクロコンピュータに保持される。そのマイクロコンピュータに備えられたＣＰＵは、ＲＯＭ化を行うときに、コマンド管理リスト８とアドレス管理リスト９とに示される情報に基づいて、ＲＯＭから読み出したデータをＲＡＭに展開する。
【００４２】
上述の図８のアドレス管理リスト９は、ステップＳ１０４において構成される。各ファンクションのＲＯＭ配置アドレスがコピー元アドレスとして、アドレス管理リスト９に格納される。また、ＲＡＭ配置アドレスがコピー先アドレスとして、アドレス管理リスト９に格納される。そして、ファンクションサイズ情報Ｆ６０２に示される情報が、コピーサイズとして、アドレス管理リスト９に格納される。
【００４３】
図１０Ａ、図１０Ｂは、本実施形態のコンパイラ装置１における、組み込みプログラムからファンクションを抽出して、ＲＡＭ配置を決定する手順を示すフローチャートである。ステップＳ２０１において、調査対象のファンクションを特定する。ステップＳ２０２において、ファンクション判定部１５は、全コマンドに対して調査対象のファンクションがコマンドで使用されているかを判断する。その判断の結果、調査対象のファンクションがコマンドで使用されている場合には、処理はステップＳ２０３に進み、使用されていない場合には、処理はステップＳ２０４に進む。
【００４４】
ステップＳ２０３において、調査対象のファンクションがコマンドで使用されているので、使用しているコマンドとファンクションとの関連を使用するファンクションの一覧情報Ｆ６０１へ登録する。
ステップＳ２０４において、ファンクションサイズ決定部１６は、各ファンクションのプログラムサイズを決定して、ファンクションサイズ情報Ｆ６０２を作成する。
【００４５】
ステップＳ２０５において、ＲＡＭ配置構成決定部１７は、対象ファンクションが複数のコマンドで使用されている否かの判断を実行する。その判断の結果、対象ファンクションが複数のコマンドで使用されている場合は。処理はステップＳ２０６に進み、対象ファンクションが複数のコマンドで使用されていない場合は、処理はステップＳ２０７に進む。
【００４６】
ステップＳ２０６において、対象ファンクションが複数のコマンドで使用されているので、複数のコマンドで使用されているファンクションを共用ファンクション一覧情報Ｆ６０４へ登録する。また、共用ファンクションの使用頻度を求め、対象ファンクションの共用ファンクション使用頻度情報Ｆ６０５を作成する。
【００４７】
ステップＳ２０７において、対象ファンクションが各コマンドのみで使用されているので、そのファンクションを専用ファンクション一覧情報Ｆ６０３へ登録する。
【００４８】
ステップＳ２０８において、ＲＡＭ配置構成決定部１７は、共用ファンクション一覧情報Ｆ６０４を参照し、下位アドレスから対象ファンクションのサイズで配置可能な空き領域があるかを判断する。その判断の結果、配置可能な空き領域がない場合は、処理はステップＳ２１０に進み、配置可能な空き領域がある場合は、処理はステップＳ２０９に進む。
【００４９】
ステップＳ２１０において、配置可能な空き領域がないので、配置済みの後ろへファンクションの配置を決定し、処理はステップＳ２１２へ進む。
【００５０】
ステップＳ２０９において、対象ファンクションの配置は、使用する各コマンドで同じか否かの判断を実行する。その判断の結果、対象ファンクションの配置が使用する各コマンドで同じ場合は、処理はステップＳ２１１に進み、その条件が異なる場合は、処理はステップＳ２０８に戻る。ステップＳ２１１において、ＲＡＭ配置構成決定部１７は、空き領域にファンクションの配置を決定する。
【００５１】
ステップＳ２１２において、ＲＡＭ配置構成決定部１７は、専用ファンクション一覧情報Ｆ６０３を参照して、下位アドレスから対象ファンクションのサイズで配置可能な空き領域があるかを判断する。その判断の結果、配置可能な空き領域がある場合は、処理はステップＳ２１３に進み、空き領域がない場合は、処理はステップＳ２１４に進む。
【００５２】
ステップＳ２１３において、配置可能な空き領域があるので、空き領域にファンクションの配置を決定して処理を終了する。ステップＳ２１４において、配置可能な空き領域がないので、配置済みの後ろへファンクションの配置を決定して処理を終了する。
【００５３】
以下に、上述の動作を実行した場合のファンクションの配置に関して説明を行う。図１１と図１２は、実際のＲＯＭとＲＡＭとのファンクションの配置を例示するブロック図である。図１１は、
（ファンクション＃２のサイズ）＞（ファンクション＃５のサイズ）
の場合の配置を例示している。また、図１２は、
（ファンクション＃２のサイズ）≦（ファンクション＃５のサイズ）
の場合の配置を例示している。
【００５４】
上述の動作を実行する場合、共用ファンクション一覧情報Ｆ６０４の中で、全コマンドで使用するファンクションを最多の頻度のファンクションとし、使用頻度の高い順番にファンクションを特定していく。特定したファンクションに対して、下位アドレスから順に対象ファンクションのサイズで配置可能な空き領域が有るかを判断する。このとき、ファンクションの実体が１つなので、ファンクション間の分岐先アドレスに不具合を生じさせないようにするため、対象ファンクションの配置が、使用する各コマンドで同じかを判断して、共通で使用するファンクションのＲＡＭ配置を決定していく。
【００５５】
図１１を参照すると、（ファンクション＃２のサイズ）＞（ファンクション＃５のサイズ）の場合、全コマンドが使用するファンクション＃４を、使用頻度が最も高いファンクションとして特定する。このとき、最下位アドレスが空いていて、かつ最下位アドレスには他のファンクションが配置されていないため、そのファンクション＃４を、最下位アドレスを先頭とした領域（ファンクション＃４の領域Ｆ７０１）へ配置する。
【００５６】
次に、ファンクション＃５を使用頻度の高いファンクションとして特定する。そのファンクション＃５を配置するために、下位アドレスから順に配置可能な領域を探す。図１１に示されているように、ファンクション＃４の領域Ｆ７０１の後ろ（上位側）に配置可能な空き領域がある。ファンクション＃５をこの領域に配置した場合、使用するコマンドＡ、Ｃで同じアドレスにすることが可能となる。そのため、ファンクション＃４の領域Ｆ７０１の後ろ（上位側）をファンクション＃５の領域Ｆ７０５とする。
【００５７】
次に、ファンクション＃６を使用頻度の高いファンクションとして特定する。ファンクション＃６を配置する際、最下位より配置可能な領域を検索する。コマンドＢではファンクション＃４の領域Ｆ７０１の後ろ（上位側）に配置できる。しかし、コマンドＣでは既にファンクション＃５がファンクション＃５の領域Ｆ７０５に配置済みである。したがって、各コマンド（コマンドＢ、Ｃ）で同じアドレスへ配置できなくなってしまう。
【００５８】
ファンクションは、各コマンドで同じ配置アドレスになる必要がある。そのため、次にファンクション＃５の領域Ｆ７０５の後ろ（上位側）を検索する。図１１に示されているように、検索結果からファンクション＃６は、コマンドＣのファンクション＃５の領域Ｆ７０５の後ろ（上位側）に配置する事ができる。コマンドＢでも同様に配置することが可能なため、ファンクション＃５の領域Ｆ７０５の後ろ（上位側）をファンクション＃６の領域Ｆ７０３とする。
【００５９】
共用ファンクションの配置を決定した後、下位アドレスから順に対象ファンクションのサイズで配置可能な空き領域が無いかを判断する。その空き領域に、専用ファンクションの配置を決定していく。
【００６０】
例えば、図１１でファンクション＃２の配置する時、コマンドＢの配置例を参照すると、ファンクション＃４の領域Ｆ７０１とファンクション＃６の領域Ｆ７０３との間の空き領域Ｆ７０２のサイズは、ファンクション＃５の領域Ｆ７０５のサイズと同じなる。（ファンクション＃２のサイズ）＞（ファンクション＃５のサイズ）の場合、空き領域Ｆ７０２にファンクション＃２を配置することができない。したがって、ファンクション＃２が配置される領域として、配置済みのファンクション＃６の領域Ｆ７０３の後ろ（上位側）が割り当てられる。
【００６１】
また、図１２を参照すると、（ファンクション＃２のサイズ）≦（ファンクション＃５のサイズ）の場合、ファンクション＃４の領域Ｆ７０１とファンクション＃６の領域Ｆ７０３との間の空き領域Ｆ７０２のサイズは、ファンクション＃５の領域Ｆ７０５のサイズと同じなる。したがって、図１１では空き領域であった空き領域Ｆ７０２に、ファンクション＃２を配置してファンクション＃２の領域Ｆ７０４として利用することが可能となる。
【００６２】
以上、本願発明の実施の形態を具体的に説明した。本願発明は上述の実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能である。
【符号の説明】
【００６３】
１…コンパイラ装置
２…コンパイラ部
３…リンカ部
４…ソースプログラム（原始プログラム）
５…ＲＡＭ実行するファンクション情報
６…オブジェクト
７…ＲＯＭイメージ
８…コマンド管理リスト
９…アドレス管理リスト
９−１…コピー元アドレスグループ
９−２…コピー先アドレスグループ
９−３…コピーサイズグループ
１１…字句・構文解析部
１２…中間語作成部
１３…最適化部
１４…コード生成部
１５…ファンクション判定部
１６…ファンクションサイズ決定部
１７…ＲＡＭ配置構成決定部
２１…コード配置部
２２…管理リスト作成部
２３…ＲＯＭイメージ出力部
Ｆ６０１…使用するファンクションの一覧情報
Ｆ６０１−１…第１ファンクショングループ
Ｆ６０１−２…第２ファンクショングループ
Ｆ６０１−３…第３ファンクショングループ
Ｆ６０２…ファンクションサイズ情報
Ｆ６０３…専用ファンクション一覧情報
Ｆ６０３−１…第１専用ファンクション
Ｆ６０３−２…第２専用ファンクション
Ｆ６０３−３…第３専用ファンクション
Ｆ６０４…共用ファンクション一覧情報
Ｆ６０４−１…第１共用ファンクション
Ｆ６０４−２…第２共用ファンクション
Ｆ６０４−３…第３共用ファンクション
Ｆ６０５…共用ファンクション使用頻度情報
Ｆ６０５−１…第１使用頻度情報
Ｆ６０５−２…第２使用頻度情報
Ｆ６０５−３…第３使用頻度情報
Ｆ７０１…ファンクション＃４の領域
Ｆ７０２…空き領域
Ｆ７０３…ファンクション＃６の領域
Ｆ７０４…ファンクション＃２の領域
Ｆ７０５…ファンクション＃５の領域
Ｌ１…ファンクション番号情報
Ｌ１−１…コマンドＡ用ファンクション番号情報
Ｌ１−２…コマンドＢ用ファンクション番号情報
Ｌ１−３…コマンドＣ用ファンクション番号情報
Ｌ２…ジャンプ先アドレス情報
Ｌ２−１…第１ジャンプ先アドレス情報
Ｌ２−２…第２ジャンプ先アドレス情報
Ｌ２−３…第３ジャンプ先アドレス情報
１００…マイクロコンピュータ
１０１…ＣＰＵ
１０２…ＲＯＭ
１０３…組み込みプログラム
１０４…ＲＡＭ
１０５…組み込みプログラム
１２０…組み込みプログラム作成装置
１２１…ＣＰＵ
１２２…ＲＡＭ
１２３…入力装置
１２４…出力装置
１２５…外部記憶装置
１２６…プログラミングツール
１２７…コンパイラ
１２８…ヘキサコンバータ
５０１…ソースプログラム
５０２…コピー関数
５０３…ＲＯＭ化領域確保コード
５０４…ＲＯＭ化ライブラリ
５０５…実行可能オブジェクト
５０６…ＲＯＭ化プロセッサ
５０７…ＲＯＭ化用オブジェクト
５０８…オブジェクト
【図１】
2012243118.tif 000003
【図２】
2012243118.tif 000004
【図３】
2012243118.tif 000005
【図４】
2012243118.tif 000006
【図５】
2012243118.tif 000007
【図６Ａ】
2012243118.tif 000008
【図６Ｂ】
2012243118.tif 000009
【図６Ｃ】
2012243118.tif 000010
【図７】
2012243118.tif 000011
【図８】
2012243118.tif 000012
【図９】
2012243118.tif 000013
【図１０Ａ】
2012243118.tif 000014
【図１０Ｂ】
2012243118.tif 000015
【図１１】
2012243118.tif 000016
【図１２】
2012243118.tif 000017