(57)【要約】      （修正有）【課題】プログラムコードを実行するに際し、メモリ使用量を適切に削減することができるようにする。【解決手段】実行可能な設計図面の情報を用いて、各オブジェクトのデータ属性を変更するメソッドが、外部オブジェクトによって利用されないと判断出来る場合に、最適化可能箇所抽出部２０５は、そのオブジェクトのデータ属性を、ＲＯＭ割り当て可能データ一覧リストに登録することにより、ＲＯＭへデータを割り当てることができるようにして、生成したプログラムコードを実行するに際してＲＡＭの使用量を削減することができるようにする。【選択図】図２
2006285583.tif 000002
【特許請求の範囲】
【請求項１】
組み込み機器が有する第１のメモリから第２のメモリに読み出すことによって実行されるプログラムのプログラムコードを、設計図面を用いて自動生成するプログラムコード生成装置であって、
前記設計図面から、前記組み込み機器において前記プログラムを実行する際に前記第１のメモリに割り当て可能なデータ属性を抽出する抽出手段と、
前記抽出手段によって得られた抽出結果に基づいて、プログラムコードを生成するプログラムコード生成手段とを有することを特徴とするプログラムコード生成装置。
【請求項２】
前記抽出手段は、前記最適化可能箇所として抽出されたデータ属性の中で、データサイズがメモリアドレスのビット数よりも大きいデータ属性を抽出することを特徴とする請求項１に記載のプログラムコード生成装置。
【請求項３】
前記抽出手段は、前記最適化可能箇所として抽出されたデータ属性の中で、前記組み込み機器において前記プログラムを実行する際に、前記第１のメモリに割り当てた場合の実行速度の低下が基準値以内となるデータ属性を抽出することを特徴とする請求項１に記載のプログラムコード生成装置。
【請求項４】
前記プログラムコード生成手段は、前記データ属性を定数定義したプログラムコードを生成し、そのプログラムコードのコンパイル及びリンクを行うことを特徴とする請求項１に記載のプログラムコード生成装置。
【請求項５】
前記抽出手段は、前記設計図面における各クラスのデータ属性の中で、オブジェクトが生成された後に変更される可能性がないデータ属性を抽出することを特徴とする請求項１〜４の何れか１項に記載のプログラムコード生成装置。
【請求項６】
前記オブジェクトが生成された後に変更される可能性がないデータ属性は、データ属性を変更するようなメソッドが設計モデル全体の中で呼び出されていない場合のデータ属性であることを特徴とする請求項５に記載のプログラムコード生成装置。
【請求項７】
組み込み機器が有する第１のメモリから第２のメモリに読み出すことによって実行されるプログラムのプログラムコードを、設計図面を用いてプログラムコードを自動生成するプログラムコード生成方法であって、
前記設計図面から、前記組み込み機器において前記プログラムを実行する際に前記第１のメモリに割り当て可能なデータ属性を抽出する抽出ステップと、
前記抽出ステップにおいて得られた抽出結果に基づいて、プログラムコードを生成するプログラムコード生成ステップとを有することを特徴とするプログラムコード生成方法。
【請求項８】
組み込み機器が有する第１のメモリから第２のメモリに読み出すことによって実行されるプログラムのプログラムコードを、設計図面を用いて自動生成することをコンピュータに実行させるためのコンピュータプログラムであって、
前記設計図面から、前記組み込み機器において前記プログラムを実行する際に前記第１のメモリに割り当て可能なデータ属性を抽出する抽出ステップと、
前記抽出ステップにおいて得られた抽出結果に基づいて、プログラムコードを生成するプログラムコード生成ステップとをコンピュータに実行させることを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムコード生成装置、プログラムコード生成方法、及びコンピュータプログラムに関し、特に、プログラムコードを生成するために用いて好適なものである。
【背景技術】
【０００２】
プログラム生成装置とは、ＵＭＬ（Unified-Modeling-Language）やＳＤＬ（Specification & Description Language）といったフォーマル言語で記述されたソフトウェアの実行可能モデルを入力として、それらの仕様を解析し、プログラムコードを生成するものである。近年、実行可能モデルを作成するモデルエディタと、プログラム生成装置と、プログラムコード生成装置によって生成されるプログラムコードとから、実行形式プログラムを作成するコンパイラ／リンカを統合したツールを用いて、実行可能モデルをベースとしてソフトウェアの開発を行なう、ＭＤＡ（Model-Driven-Architecture）技術が広まり、プログラムコード生成装置を用いて多くのソフトウェアが開発されるようになってきた。
【０００３】
しかしながら、ＭＤＡ技術によって生成されるプログラムコードはコードサイズが大きく、機器において実施にプログラムを実行するためには多くのＲＡＭを必要とするという問題がある。このため、組み込みシステムなどのメモリ容量の制限が厳しい領域では、ＭＤＡ技術の導入に躊躇するケースが多い。
【０００４】
ところで、組み込み機器のソフトウェア開発においては、ＲＡＭ容量を削減するために、様々な提案がなされて来た。例えば、特開２０００−４０００５号公報や特開２００１−１８４２１４号公報では、プログラムコード中のconst指定されたインスタンス変数やオブジェクトをＲＯＭ上に配置することにより、ＲＡＭ容量の削減を図っている。
【０００５】
【特許文献１】特開２０００−４０００５号公報
【特許文献２】特開２００１−１８４２１４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、これらの先行技術で述べられている最適化は、プログラムコードの翻訳時に限定された工夫であり、ＭＤＡ技術の実行可能モデルを考慮したものではない。すなわち、プログラムコード・コンパイラでは、ファイルスコープ内で閉じた最適化のみしかされていないため、プログラム全体の最適化は実現されていない。また、ソフト開発者が所定のconstキーワードを指定しないソースコードについては最適化することが出来ない。このため、実際にはＲＡＭ容量の大幅な削減には結びつかないのが現状である。
本発明は、上述の問題点に鑑みてなされたものであり、プログラムコードの実行に際し、メモリ使用量を適切に削減することができるようにすることを目的とする。
【課題を解決するための手段】
【０００７】
本発明のプログラムコード生成装置は、組み込み機器が有する第１のメモリから第２のメモリに読み出すことによって実行されるプログラムのプログラムコードを、設計図面を用いて自動生成するプログラムコード生成装置であって、前記設計図面から、前記組み込み機器において前記プログラムを実行する際に前記第１のメモリに割り当て可能なデータ属性を抽出する抽出手段と、前記抽出手段によって得られた抽出結果に基づいて、プログラムコードを生成するプログラムコード生成手段とを有することを特徴とする。
【０００８】
本発明のプログラムコード生成方法は、組み込み機器が有する第１のメモリから第２のメモリに読み出すことによって実行されるプログラムのプログラムコードを、設計図面を用いてプログラムコードを自動生成するプログラムコード生成方法であって、前記設計図面から、前記組み込み機器において前記プログラムを実行する際に前記第１のメモリに割り当て可能なデータ属性を抽出する抽出ステップと、前記抽出ステップにおいて得られた抽出結果に基づいて、プログラムコードを生成するプログラムコード生成ステップとを有することを特徴とする。
【０００９】
本発明のコンピュータプログラムは、組み込み機器が有する第１のメモリから第２のメモリに読み出すことによって実行されるプログラムのプログラムコードを、設計図面を用いて自動生成することをコンピュータに実行させるためのコンピュータプログラムであって、前記設計図面から、前記組み込み機器において前記プログラムを実行する際に前記第１のメモリに割り当て可能なデータ属性を抽出する抽出ステップと、前記抽出ステップにおいて得られた抽出結果に基づいて、プログラムコードを生成するプログラムコード生成ステップとをコンピュータに実行させることを特徴とする。
【発明の効果】
【００１０】
本発明によれば、プログラムコードを実行する際のメモリ使用量を削減することができる。
【発明を実施するための最良の形態】
【００１１】
（第１の実施形態）
次に、図面を参照しながら、本発明の第１の実施形態について説明する。
図１は、本実施形態のプログラムコード生成装置の構成の一例を示すブロック図である。
図１において、１はＣＰＵである。ＣＰＵ１は、プログラムコード生成装置を統括制御し、例えば、バス２に接続された装置３、４、５、７、９にアクセスして制御を行なう。
３は、バス２を介してＣＰＵ１からアクセス可能な読み出し専用メモリ（ＲＯＭ）である。本実施形態では、処理プログラム３ａ及び処理プログラム３ａにより使用されるパラメータ３ｂがＲＯＭ３に格納されている。
【００１２】
４は読み書き可能なメモリ（ＲＡＭ）である。ＲＡＭ４には、設計図面情報、プラットフォーム情報、最適化可能箇所情報、実行環境制約情報、最適化予定情報、プログラムコード、プロジェクトファイル、ライブラリ、及び実行可能形式をそれぞれ格納するための領域４ａ〜４ｉが確保されている。これらデータ格納領域４ａ〜４ｉに格納される情報は、それぞれ処理プログラム３ａにより作成及び変更される。
【００１３】
５は入力インターフェイスであり、キーボード、ボタン、マウス、ダイアル、タブレット等の入力装置６を介してなされる入力を受け取る。７は出力インターフェイスであり、例えばＣＲＴ（又はＬＣＤ）８ａや、プリンタ（又はプロッタ）８ｂ等を備える出力装置８に対し、データの表示指示や出力指示を行なう。９は外部記憶装置インターフェイスであり、ＨＤ、ＦＤ、ＣＤ−ＲＯＭ、ＭＤなどの外部記憶装置１０に対するデータの入出力を行なうものである。
【００１４】
本実施形態では、処理プログラム３ａやパラメータ３ｂがＲＯＭ３にあるものとし、また、処理対象となる各データの格納領域４ａ〜４ｉがＲＡＭ４にあるものとして説明を行なうが、これら全て又は一部を、外部記憶装置１０に配置することも可能であり、更に、必要に応じて、外部記憶装置１０からＲＡＭ４にロードして使用することも可能である。また、ＣＰＵ１のキャッシュメモリに配置することも可能である。
【００１５】
図２は、図１に示した処理プログラム３ａの構成要件と、その構成要件と図１に示したデータ格納領域４ａ〜４iに格納されるデータとの関係と、を示す図である。
【００１６】
図２において、２００は、入力インターフェイス５を介して入力されるデータを扱うＧＵＩ入力処理部である。オペレータはこのＧＵＩ入力処理部２００によりデータの入力や編集ができるようになっている。２０１は、実行可能な設計図面を外部記憶装置１０内から読み出し、構文解析を行なう実行可能設計図面解析部である。この実行可能設計図面解析部２０１によって、処理プログラム３ａが実行可能な設計図面を解釈することを可能にする。なお、設計図面は、プラットフォームに依存せず、オブジェクト指向であるのが好ましい。
【００１７】
２０２は、外部記憶装置１０内から実行ファイルの動作するＯＳや、プログラミング言語や、フレームワークといったプラットフォームデータを読み込み、構文解析を行なうプラットフォーム依存解析部である。このプラットフォーム依存解析部２０２によって、処理プログラム３ａがプラットフォーム情報を解釈することを可能にする。
２０３は、実行可能設計図面解析部２０１より生成された設計図面情報である。この設計図面情報２０３は、処理プログラム３ａが解釈することが可能な情報である。２０４は、プラットフォーム依存解析部２０２により生成されたプラットフォーム情報である。このプラットフォーム情報は、処理プログラム３ａが解釈することが可能な情報である。
【００１８】
２０５は、全ての設計図面情報２０３を解析することで、生成されたプログラムが組み込まれる組み込み機器において、該プログラムを記憶するメモリ（ＲＯＭ）から高速に読み書き可能なメモリ（ＲＡＭ：ＲＡＭ４とは異なる）に展開（読出し）せずにプログラムの実行が可能な箇所（以下、簡略化のためＲＯＭへの割り当てが可能な箇所と呼び説明する）を設計図面内で特定する最適化可能箇所抽出部である。この最適化可能箇所抽出部２０５は、実行可能な設計図面内における最適化が可能な箇所を絞り込む。２０６はプラットフォーム情報２０４から、３２ｂｉｔ演算の禁止や、使用メモリ量の制限といった、最適化の際に行なうべき制約を解析する実行環境制約解析部である。この実行環境制約解析部２０６は、速度やメモリ量といったトレードオフ選択が必要な情報を抽出する。
【００１９】
２０７は最適化可能箇所抽出部２０５より生成された最適化可能箇所である。この最適化可能箇所２０７は、最適化が可能な箇所を特定するための情報である。２０８は、実行環境制約解析部２０６により作成された実行環境制約である。この実行環境制約２０８は、実行環境における制約条件の情報である。
【００２０】
２０９は、最適化可能箇所２０７と実行環境制約２０８とを用いて、プログラムコードやプロジェクトファイルを自動生成する際にどのような最適化が効果的且つ適用可能かを示す情報（最適化予定リスト）を抽出する最適化予定リスト抽出部である。２１０は、最適化予定リスト作成部２０９より抽出された最適化予定リストである。上述したように、最適化予定リスト２１０は、プログラムコードやプロジェクトファイルを自動生成する際にどのような最適化が効果的且つ適用可能かを示す情報である。
【００２１】
２１１は、設計図面情報２０３と、プラットフォーム依存情報２０４と、最適化予定リスト２１０とを用いて、プログラムコードを自動生成するプログラムコード生成部である。このプログラムコード生成部２１１によって、設計図面の依存関係や実行対象となるプラットフォームに応じて最適化されたプログラムコードの自動生成が可能になる。
２１２は、設計図面情報２０３と、プラットフォーム依存情報２０４と、最適化予定リスト２１０とを用いて、プログラムコードやライブラリを管理するプロジェクトファイルを自動生成するプロジェクトファイル生成部である。２１３は、プログラムコード生成部２１１により生成されたプログラムコードである。
【００２２】
２１４は、プロジェクトファイル生成部２１２から生成されたプログラムコードである。２１５は、プログラムコードから参照されるライブラリである。２１６は、プロジェクトファイル２１４が管理するプログラムコード２１３と、プロジェクトファイル２１４と、ライブラリ２１５とを用いて、実行可能形式２１７を生成するコード・コンパイラである。
【００２３】
次に、実行可能設計図面について説明する。図３は、実行可能な設計図面の全体構成の一例を示す図である。なお、このような図は、一般にドメイン図と呼ばれている。
図３において、３０１は、実行可能な設計図面を構成するドメイン（Domain）と呼ばれる集合である。３０２は、ドメイン同士の結びつきを表現したものであり、関連と呼ばれる。
【００２４】
図４は、モデルの最小単位であるクラスの静的な構造の一例を示す図である。なお、このような図は、クラス図と呼ばれる。図４では、「Oven」という名前を持つクラスの定義の一例を示している。
図４において、記述４０１は、名前「Oven」を表す。記述４０２は、「Oven」クラスが、「name」というString型のインスタンス変数を持つことを表現している。記述４０３は、「Oven」クラスが、「evOn」、「evOff」というイベントと、「evCleanup」というイベントの２つのイベントを受け付けること、更に、「name」を参照するための「getName」という名前のメソッドと、「Oven」クラスのオブジェクトをコピーするための「Copy」という名前のメソッドを備えていることを表現している。
【００２５】
このようなクラスの動的振る舞いについては、図５に示すような状態遷移図で、モデルが定義される。図５は、「Oven」クラスの状態遷移図の一例を示している。
図５において、５０２は初期状態、５０３は状態、５０４は遷移線、５０５は終了状態である。遷移線５０４に記述されているイベント名は、その遷移が発生するきっかけとなるイベントを表す。
例えば、遷移５０１では、「Oven」クラスのオブジェクトの状態がオフ（Ｏｆｆ）のときに、オンイベント（「evOn」）が発行されると、外部オブジェクトであるＰＩＯオブジェクトに、「lightOn」イベントを発行するアクションを実行してから、オン（Ｏｎ）状態に遷移するということを表現している。一方、「Oven」クラスのオブジェクトの状態がオン（Ｏｎ）のときに、オフイベント（「evOff」）が発行されると、外部オブジェクトであるＰＩＯオブジェクトに、「lightOff」イベントを発行するアクションを実行してから、オフ（Ｏｆｆ）状態に遷移する。さらに、クリーンアップイベント（「evCleanup」）が発行されると、クリーニング（Cleaning）状態に遷移する。なお、状態遷移図において、アクション部分だけを別ファイルに定義することも可能である。
【００２６】
図６は、あるクラスにおけるアクション定義の一例を示す図である。
図６において、アクション中に、「Oven」クラスのオブジェクトに対する操作が記述されている。記述６０１は、「Oven」クラスのオブジェクトのインスタンスｏ１を生成することを意味している。記述６０２は、「getName」メソッドを通じて、ｏ１のnameを参照することを意味している。記述６０３は、「Oven」クラスのオブジェクトのインスタンスｏ１をコピーして、新たにインスタンスｏ２として定義することを意味している。
【００２７】
本実施形態では、最適化可能箇所抽出部２０５は、上記実行可能な設計図面の情報を用いて、各オブジェクトのデータ属性を変更するメソッドが、外部オブジェクトによって利用されないと判断出来る場合に、そのオブジェクトのデータ属性を、ＲＯＭ割り当て可能データ一覧リストに登録することで、組み込み機器に内蔵されるＲＯＭへデータを割り当てるようにして、最適化可能な箇所を絞り込む。上記ＲＯＭ割り当て可能データ一覧リストは、最適化可能箇所２０７に含まれる。
【００２８】
図７及び図８に、本実施形態における最適化可能箇所抽出部２０５の動作の一例を説明するフローチャートを示す。図７は、最適化可能箇所抽出部２０５の動作フローチャートのうち、全ての設計図面情報２０３を解析する部分を示したものである。
【００２９】
図７のステップＳ７０１において、上記ＲＯＭ割り当て可能データ一覧リストをクリアする。ステップＳ７０３において、設計図面情報２０３から、クラスＡのエントリ情報を読み出す。さらにステップＳ７０４において、クラスＡのデータ属性を、ＲＯＭ３へ割り当てることが可能か否かを判断する。このようなステップＳ７０３、Ｓ７０４の処理を全てのクラスＡについて行なう（ステップＳ７０２、Ｓ７０５）。
【００３０】
図８は、図７のステップＳ７０４の処理（クラスＡのデータ属性を、組み込み機器に内蔵されるＲＯＭへ割り当てることが可能か否かを判断する処理）の詳細の一例を説明するフローチャートである。
まず、ステップＳ８０１において、設計図面情報２０３から、クラスＡの属性定義や、アクション記述等の設計情報を読み出す。
そして、クラスＡの各属性ａについて、以下のステップＳ８０３〜Ｓ８１１の処理を行なう（ステップＳ８０２、Ｓ８１２）。まず、ステップＳ８０３において、クラスＡのメソッドとイベントのうち（クラスＡの生成メソッドすなわちコンストラクタは除く）、属性ａを変更するものをリストｆＡに保持する。
【００３１】
この際、クラスＡのメソッドFuncXが、例えばメソッドFuncX内で属性ａの代入操作が行なわれる場合には、属性ａを変更すると判断できる。また、メソッドFuncX内では属性ａの代入操作を直接行なっていなくても、メソッドFuncXから、代入操作を行なうFuncYを呼び出している場合には、FuncXも間接的に属性ａを変更していると判断する。
ただし、図４に示した「Copy」メソッドのように、第１のインスタンスの属性データを、第２のインスタンスの属性データに代入する場合や、インスタンスを新たに生成するコンストラクタを呼び出す場合には、属性は変更されないと判断する。イベントについても同様である。
【００３２】
次に、ステップＳ８０４において、属性ａの取りうる値を保持するリストｖａを用意する。さらに、設計図面に含まれるクラスＡ以外の全てのクラスｘについて、ステップＳ８０６〜Ｓ８０９の処理を行なう。まず、ステップＳ８０６において、設計図面情報２０３から、クラスｘのアクション記述等の設計情報を読み出す。次に、ステップＳ８０７において、クラスｘのメソッド若しくは状態遷移の記述中で、リストｆＡに保持されているクラスＡのイベント、及びメソッドのいずれかを呼び出しているかどうかを判定する。
【００３３】
この判定の結果、リストｆＡ中のイベント又はメソッドをクラスｘから呼び出している場合、属性ａを、組み込み機器に内蔵されるＲＯＭに割り当て不可能と判断する。一方、クラスｘがリストｆＡ中のイベント又はメソッドを呼び出していない場合、ステップＳ８０８において、クラスｘの関数のうち、クラスＡのコンストラクタを呼び出しているかどうかを判定する。この判定の結果、クラスＡのコンストラクタを呼び出している場合には、ステップＳ８０９において、コンストラクタ中で属性ａに設定されている値を、リストｖａに追加する。いずれのクラスｘについても、リストｆＡ中のイベント又はメソッドを呼び出していないと判断できる場合には、ステップＳ８１１において、属性ａをＲＯＭ割り当て可能データ一覧リストに加える。
【００３４】
最適化予定リスト作成部２０９は、最適化可能箇所２０７と等価な情報である最適化予定リスト２１０を作り出す。プログラムコード生成部２１１は、最適化予定リスト２１０に含まれる属性が、コンパイル／リンク後に組み込み機器に内蔵されるＲＯＭに配置することを保証することを特徴とするプログラムコード２１３を生成する。プログラムコードを生成する際のプログラムコード生成部２１１の動作の一例を図９及び図１０のフローチャートに示す。
【００３５】
図９において、プログラムコード生成部２１１は、ステップＳ９０１〜Ｓ９０５において、全てのクラスＡについてのプログラムコード生成を行なう。まず、ステップＳ９０２において、全ての設計図面情報２０３からクラスＡの設計情報を読み出す。
次に、ステップＳ９０３において、クラスＡのデータ属性部のプログラムコードを生成する。さらに、ステップＳ９０４において、クラスＡのメソッド部のプログラムコードを生成する。メソッド部のプログラムコード生成９０４は、従来技術を用いて実現することが出来る。
【００３６】
図１０に、図９のステップＳ９０３の処理（クラスＡのデータ属性部のプログラムコード作成処理）の詳細の一例を説明するフローチャートを示す。
ステップＳ１００１〜Ｓ１００７において、クラスＡの各属性ａについてプログラムコードの生成を行なう。
【００３７】
まず、ステップＳ１００２において、属性ａがＲＯＭ割り当て可能データ一覧リストに保持されているかどうかを判定する。このＲＯＭ割り当て可能データ一覧リストは、最適可能箇所抽出部２０５によって作成され、最適可能箇所２０７中に保持されているものである。本実施形態では、最適可能箇所２０７が最適化予定箇所になっているため、ＲＯＭ割り当て可能データ一覧リストと同一の内容のリストが最適化予定リスト２１０にも保持されている。
【００３８】
ステップＳ１００２において、属性ａが組み込み機器に内蔵されるＲＯＭに割り当て可能データ一覧リストに保持されていないと判定した場合は、ステップＳ１００６において、属性ａを通常のインスタンス変数として定義したプログラムコードを生成する。これは従来技術を用いて実現することが出来る。一方、ステップＳ１００２において、属性ａがＲＯＭ割り当て可能データ一覧リストに保持されていると判定した場合には、ステップＳ１００３において、最適可能箇所抽出部２０５によって作成された、属性ａの取りうる値を保持するリストｖａに含まれる値を、全てグローバル変数として、プログラムコード中にConst定義する。
【００３９】
次に、ステップＳ１００４において、属性ａをグローバル変数へのポインタとして定義する。さらに、ステップＳ１００５において、クラスＡのコンストラクタ中で、属性ａを、コンストラクタの引数に指定されたグローバル変数領域に設定するようなプログラムコードを生成する。
【００４０】
図１１に、以上の手順で生成されたプログラムコードの一例を示す。
図１１において、１１０１は、図１０のステップＳ１００３においてConst定義されたグローバル変数に関するプログラムコードである。１１０２は、クラスＡのデータ属性定義とメソッド定義に関するプログラムコードである。１１０３は、クラスＡのメソッドを呼び出す他のクラスに関して生成されるプログラムコードである。本実施形態により生成される図１１のプログラムコードと比較するために、従来技術により生成されるプログラムコードを、図１２に示す。なお、図１１及び図１２は共に、設計図面情報２０３の例として挙げた「Oven」クラスの設計図（図４、図５、図６）に対応するものである。
【００４１】
図１１に示すプログラムコード１１０１〜１１０３を、コード・コンパイラ２１６を用いてコンパイル・リンクして作成した実行可能形式２１７を実行した際の、組み込み機器のメモリ（ＲＯＭ１３０１，ＲＡＭ１３０２）に配置されるプログラムコードの一例を図１３に示す。一方、従来技術を用いて作成された図１２に示すプログラムコード１２０１、１２０２をコンパイル・リンクして作成した実行可能形式を実行した際の、組み込み機器のメモリ（ＲＯＭ１４０１，ＲＡＭ１４０２）に配置されるプログラムコードは、図１４に示すようになる。
図１４において、クラスＡの属性nameの値"Oven1"が、インスタンス毎にＲＡＭ１４０２上に配置されるのに対して、図１３においては、属性ａのデータの実体はＲＯＭ１３０１にあり、インスタンス間でその値を共有しており、インスタンス毎に必要なＲＡＭ１３０２の領域は、ＲＯＭ１３０１に記憶されているデータの実体へのポインタのみとなっている。このため、従来技術に比べてＲＡＭの容量を削減することが出来る。特にデータの値が、文字列などの大きなサイズを要するものの場合には、その大きな削減効果を得ることが出来る。
【００４２】
以上のように本実施形態では、実行可能な設計図面の情報（実行可能モデル全体のパース結果）を用いて、各オブジェクトのデータ属性を変更するメソッド（操作関数）が、外部オブジェクトによって利用されない（コールされない）と判断出来る場合に、最適化可能箇所抽出部２０５は、そのオブジェクトのデータ属性（そのオブジェクトのデータ属性を定数定義したプログラムコード）を、ＲＯＭ割り当て可能データ一覧リストに登録するようにしたので、組み込み機器に内蔵されるＲＯＭへデータを割り当てることができる。これにより、組み込み機器において生成したプログラムコードを実行する際のＲＡＭの使用量を削減することができる。
【００４３】
なお、本実施形態においては、最適化可能箇所抽出部２０５は、設計図面内の全てのクラスｘについて、リストｆＡ中のイベントとメソッドを呼び出すか否かを判定するようにしたが、必ずしも全てのクラスｘについて行なう必要はない。例えば、設計図面情報２０３に含まれるドメイン３０１〜３０３間の関連情報や、クラス間の関連情報を活用し、リストｆＡ中のイベントとメソッドを呼び出すか否かの判定対象を、クラスＡと関連をもつクラスに絞り込むようにしてもよい。このようにすれば、図８のステップＳ８０５〜Ｓ８１０で行なわれる最適可能箇所を抽出する処理をより効率的に行なうことが可能になる。
【００４４】
また、本実施形態においては、クラスＡの属性の可視性がクラスＡ内に閉じており（private属性として定義されており）、クラスＡ以外のクラスは、必ずクラスＡのメソッドとイベントを経由してクラスＡの属性にアクセスすることを前提としているが、クラスＡの属性を外部クラスから直接参照したり、変更したりすることができる（public属性として定義されている）ようにしてもよい。このようにすれば、図８に示したステップＳ８０７の判定動作に加えて、クラスｘ内で属性ａに直接代入操作をしているかどうかの判定も行なうことで、クラスＡの属性ａを組み込み機器に内蔵されるＲＯＭに割り当てることが可能かどうかの判断を行なうことが出来る。
【００４５】
（第２の実施形態）
次に、本発明の第２の実施形態について説明する。本実施形態では、最適化可能箇所の情報に加えて、実行環境制約に含まれるメモリアドレスのbit数を用いて、組み込み機器に内情されるＲＡＭの容量を削減することが出来るかどうか判断する処理を実行する。このように、本実施形態と第１の実施形態とは、ＲＡＭの容量を削減する際の手法が異なるだけであり、その他の部分については本実施形態と第１の実施形態とは同じである。
したがって、本実施形態の説明において、第１の実施形態と同一の部分については、図１〜図１４に付した符号と同一の符号を付すなどして詳細な説明を省略する。
【００４６】
本実施形態のプログラムコード生成装置は、第１の実施形態と同様に、図１に示した構成によって実現されるが、最適化予定リスト作成部は最適化可能箇所２０７の情報に加えて、実行環境制約２０８に含まれるメモリアドレスのbit数を用いて、最適化予定リストを生成する。そして、この最適化予定リストを用いて、組み込み機器におけるデータのＲＯＭへの配置によって実際にＲＡＭの容量を減らすことが出来るかどうか判断する。また、組み込み機器に内蔵されるＲＯＭのデータに対する演算は、第１の実施の形態に関しても同様であるが、ＲＡＭのデータに対する演算よりも実行スピードが遅くなる。このため、データをＲＯＭに配置することによるメリットと、実行スピードの低減というデメリットとのトレードオフを考慮する。
【００４７】
実行環境制約２０８には、（１）メモリアドレスのbit数ｎ、（２）ＲＡＭ４の単位データ当たりの読み出し速度s＿RAM、（３）ＲＯＭ３の単位データ当たりの読み出し速度s＿ROM、（４）データをＲＯＭ３に配置することによるメリット・デメリットを評価するための定量化式F（size＿a，s＿RAM，s＿ROM）が含まれる。ここでsize＿aは、最適化予定リストに保持されているＲＯＭ割り当て可能データ一覧リストに含まれるクラスＡのデータ属性ａの値のサイズである。
【００４８】
図１５に、最適化予定リスト作成部の動作フローチャートを示す。ステップＳ１５０１において、最適化予定リスト２１０に保持されるＲＯＭ割り当て予定データ一覧リストを用意する。ステップＳ１５０２〜Ｓ１５０６において、最適化可能箇所２０７に保持されるＲＯＭ割り当て可能データ一覧リストに含まれる各データ属性について、以下の処理を行なう。
【００４９】
まず、ステップＳ１５０３において、属性ａのデータサイズsize＿aが、メモリアドレスのbit数よりも大きいかどうかを判定する。この判定の結果、属性ａのデータサイズsize＿aが、メモリアドレスのbit数以下の場合には、属性ａを組み込み機器に内蔵されるＲＯＭに配置した場合に、ＲＯＭに記憶されているデータ実体のサイズが、ＲＡＭのデータ実体へのポインタの領域のサイズと同じか、若しくは小さいということであるので、ＲＡＭのサイズは増加し、ＲＯＭに記憶することによるメリットはないと判断できる。
【００５０】
一方、ステップＳ１５０３において、属性ａのデータサイズsize＿aが、メモリアドレスのbit数よりも大きい場合には、ステップＳ１５０４において、定量化式F（size＿a，s＿RAM，s＿ROM）が、基準値upperTよりも小さいかどうかを判定する。ここでは、定量化式F（size＿a，s＿RAM，s＿ROM）を、size＿a×s＿ROM（F（size＿a，s＿RAM，s＿ROM）＝size＿a×s＿ROM）としている。この定量化式では、ＲＯＭのデータａの読み出しに必要な時間が得られる。基準値upperTは、読み出し時間の上限値である。組み込みシステムの場合には、割り込みコンテキストでの実行など、実行時間に制約があるケースが多いが、基準値upperTはそのような実行時間の制約に相当する。
【００５１】
ステップＳ１５０４において定量化式が基準値以上の場合には、制約を満たせないと判断する。一方、定量化式が基準値よりも小さい場合には、ステップＳ１５０５においてＲＯＭ割り当て予定データ一覧リストに属性ａを追加する。
【００５２】
以上のような動作フローチャートによって、組み込み機器におけるデータをＲＯＭに配置することによって実際にＲＡＭのサイズを減らすことが出来るかどうか判断し、実行スピードが低減してしまうデメリットを考慮しながら、プログラムコードを生成することが出来る。
なお、本実施形態においては、ＲＯＭにデータを配置によるメリット・デメリットを評価するための定量化式F（size＿a，s＿RAM，s＿ROM）として、size＿a×s＿ROMという式を用いたが、他の式による評価も可能である。
【００５３】
（本発明の他の実施形態）
上述した実施形態の機能を実現するべく各種のデバイスを動作させるように、該各種デバイスと接続された装置あるいはシステム内のコンピュータに対し、前記実施形態の機能を実現するためのソフトウェアのプログラムコードを供給し、そのシステムあるいは装置のコンピュータ（ＣＰＵあるいはＭＰＵ）に格納されたプログラムに従って前記各種デバイスを動作させることによって実施したものも、本発明の範疇に含まれる。
【００５４】
また、この場合、前記ソフトウェアのプログラムコード自体が上述した実施形態の機能を実現することになり、そのプログラムコード自体、及びそのプログラムコードをコンピュータに供給するための手段、例えば、かかるプログラムコードを格納した記録媒体は本発明を構成する。かかるプログラムコードを記憶する記録媒体としては、例えばフレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、磁気テープ、不揮発性のメモリカード、ＲＯＭ等を用いることができる。
【００５５】
また、コンピュータが供給されたプログラムコードを実行することにより、上述の実施形態の機能が実現されるだけでなく、そのプログラムコードがコンピュータにおいて稼働しているＯＳ（オペレーティングシステム）あるいは他のアプリケーションソフト等と共同して上述の実施形態の機能が実現される場合にもかかるプログラムコードは本発明の実施形態に含まれることは言うまでもない。
【００５６】
さらに、供給されたプログラムコードがコンピュータの機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに格納された後、そのプログラムコードの指示に基づいてその機能拡張ボードや機能拡張ユニットに備わるＣＰＵ等が実際の処理の一部または全部を行い、その処理によって上述した実施形態の機能が実現される場合にも本発明に含まれることは言うまでもない。
【図面の簡単な説明】
【００５７】
【図１】本発明の第１の実施形態を示し、プログラムコード生成装置の構成の一例を示すブロック図である。
【図２】本発明の第１の実施形態を示し、処理プログラムの構成要件と、その構成要件とデータ格納領域格納されるデータとの関係とを示す図である。
【図３】本発明の第１の実施形態を示し、実行可能な設計図面の全体構成の一例を示す図である。
【図４】本発明の第１の実施形態を示し、クラスの静的な構造の一例を示す図である。
【図５】本発明の第１の実施形態を示し、状態遷移図の一例を示す図である。
【図６】本発明の第１の実施形態を示し、アクション定義の一例を示す図である。
【図７】本発明の第１の実施形態を示し、設計図面情報を解析する際の最適化可能箇所抽出部の動作の一例を説明するフローチャートである。
【図８】本発明の第１の実施形態を示し、クラスのデータ属性を、ＲＯＭへ割り当てることが可能か否かを判断する処理の一例を説明するフローチャートである。
【図９】本発明の第１の実施形態を示し、プログラムコードを生成する際のプログラムコード生成部の動作の一例を説明するフローチャートである。
【図１０】本発明の第１の実施形態を示し、クラスのデータ属性部のプログラムコードを作成する処理の一例を説明するフローチャートである。
【図１１】本発明の第１の実施形態を示し、プログラムコードの一例を示す図である。
【図１２】本発明の第１の実施形態を示し、従来の手法で作成したプログラムコードの一例を示す図である。
【図１３】本発明の第１の実施形態を示し、メモリ配置の一例を示す図である。
【図１４】本発明の第１の実施形態を示し、従来のメモリ配置の一例を示す図である。
【図１５】本発明の第２の実施形態を示し、最適化予定リスト作成部の動作の一例を説明するフローチャートである。
【符号の説明】
【００５８】
３  ＲＯＭ
４  ＲＡＭ
２０１  実行可能設計図面解析部
２０２  プラットフォーム依存解析部
２０３  設計図面情報
２０４  プラットフォーム情報
２０５  最適化可能箇所抽出部
２０６  実行環境制約解析部
２０７  最適化可能箇所
２０８  実行環境制約
２０９  最適化予定リスト作成部
２１０  最適化予定リスト
２１１  プログラムコード生成部
２１２  プロジェクトファイル生成部
２１３  プログラムコード
２１４  プロジェクトファイル
２１５  ライブラリ
２１６  コード・コンパイラ
２１７  実行可能形式
１１０１〜１１０３  プログラムコード
【図１】
2006285583.tif 000003
【図２】
2006285583.tif 000004
【図３】
2006285583.tif 000005
【図４】
2006285583.tif 000006
【図５】
2006285583.tif 000007
【図６】
2006285583.tif 000008
【図７】
2006285583.tif 000009
【図８】
2006285583.tif 000010
【図９】
2006285583.tif 000011
【図１０】
2006285583.tif 000012
【図１１】
2006285583.tif 000013
【図１２】
2006285583.tif 000014
【図１３】
2006285583.tif 000015
【図１４】
2006285583.tif 000016
【図１５】
2006285583.tif 000017