(57)【要約】【課題】プログラムコードを生成する際に、グローバル変数の個数の増大を抑制し、プログラムの容量を削減する。【解決手段】プログラムコード生成装置１は、所定の階層に属する所定の関数からコールされる関数で参照又は更新されるグローバル変数を判定対象とし、その判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であると判定すると、その判定対象のグローバル変数を共用変数に置き換える。次回の処理まで値を保持する必要がないグローバル変数を、関数同士で干渉しない変数と判定して共用変数に置き換えることで、グローバル変数の個数の増大を抑制でき、プログラムの容量を削減できる。【選択図】図１
2014232361.tif 000002
【特許請求の範囲】
【請求項１】
プログラムコードを生成するプログラムコード生成装置（１）において、
所定の階層に属する所定の関数からコールされる関数で参照又は更新されるグローバル変数を判定対象とし、その判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であるか否かを判定する判定手段（６）と、
前記判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であると前記判定手段により判定された場合に、その判定対象のグローバル変数を、複数の関数で重複して使用する共用変数に置き換える置き換え手段（６）と、を備えたことを特徴とするプログラムコード生成装置。
【請求項２】
請求項１に記載したプログラムコード生成装置において、
前記判定手段は、前記判定対象のグローバル変数を用いる関数が前記所定の階層に属する前記所定の関数のみからコールされる関数であるか否かをも判定し、
前記置き換え手段は、前記判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であり、且つ前記判定対象のグローバル変数を用いる関数が前記所定の階層に属する前記所定の関数のみからコールされる関数であると前記判定手段により判定された場合に、その判定対象のグローバル変数を、前記共用変数に置き換えることを特徴とするプログラムコード生成装置。
【請求項３】
請求項１又は２に記載したプログラムコード生成装置において、
前記判定手段は、前記所定の階層に属する前記所定の関数を定期関数とし、前記コールされる関数を前記定期関数の次位の階層に属するメイン関数とし、そのメイン関数以下で参照又は更新されるグローバル変数を判定対象とすることを特徴とするプログラムコード生成装置。
【請求項４】
請求項１又は２に記載したプログラムコード生成装置において、
前記判定手段は、前記所定の階層に属する前記所定の関数をメイン関数とし、前記コールされる関数を前記メイン関数の次位の階層に属するサブ関数とし、そのサブ関数以下で参照又は更新されるグローバル変数を判定対象とすることを特徴とするプログラムコード生成装置。
【請求項５】
請求項１から４の何れか一項に記載したプログラムコード生成装置において、
前記判定手段は、判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であるか否かを、前回の処理後の値を参照するパスがある場合に当該値を保持する必要がある変数であると判定し、前回の処理後の値を参照するパスがない場合に当該値を保持する必要がない変数であると判定することを特徴とするプログラムコード生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムコードを生成するプログラムコード生成装置に関する。
【背景技術】
【０００２】
従来より、コンピュータシステムに搭載されるプログラムの仕様をモデル化し、そのモデル化記述である抽象化言語からプログラムコードを生成するプログラムコード生成装置が供されている。このような抽象化言語としては、データフローダイアグラム等のブロック線図、ステートチャート等の状態遷移図をはじめ、ＵＭＬ（Unified Modeling Language ）等が知られている。この種のプログラムコード生成装置を用いれば、人間の思考形態に近い抽象化言語からプログラムコードを生成するので、プログラムの短期開発を容易にすることができると共に、仕様変更等にも即座に対応することができる。又、制御を抽象化言語によるモデルで表示することで、複雑な制御図の可読性を高めることができると共に、制御のブロック化や階層化を容易にすることができる（例えば特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００３−１７３２５６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
制御をブロック化したり階層化したりする場合には、プログラムコードがブロック単位又は階層単位で関数化される。その場合、関数間でデータを授受するには、変数をグローバル変数とする必要がある。そのため、ブロック単位又は階層単位での関数化が増大すると、グローバル変数の個数も増大し、その結果、プログラムの容量が増大するという問題が発生する。
【０００５】
本発明は、上記した事情に鑑みてなされたものであり、その目的は、プログラムコードを生成する際に、グローバル変数の個数の増大を抑制することができ、プログラムの容量を削減することができるプログラムコード生成装置を提供することにある。
【課題を解決するための手段】
【０００６】
請求項１に記載した発明によれば、判定手段は、所定の階層に属する所定の関数からコールされる関数で参照又は更新されるグローバル変数を判定対象とし、その判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であるか否かを判定する。置き換え手段は、その判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であると判定手段により判定されると、その判定対象のグローバル変数を、複数の関数で重複して使用する共用変数に置き換える。即ち、次回の処理まで値を保持する必要がないグローバル変数を、関数同士で干渉しない変数と判定して共用変数に置き換えることで、グローバル変数の個数の増大を抑制することができ、プログラムの容量を削減することができる。
【図面の簡単な説明】
【０００７】
【図１】本発明の一実施形態を示す機能ブロック図
【図２】関数の構成を示す図
【図３】フローチャート
【図４】変数を参照する態様を示す図
【図５】図２相当図
【図６】図３相当図
【図７】変数を共用変数に置き換える態様を示す図
【図８】共用変数の推移を示す図
【図９】図２相当図
【図１０】図８相当図
【図１１】図２相当図
【図１２】図８相当図
【発明を実施するための形態】
【０００８】
以下、本発明を、車両制御用のプログラムコードを生成する構成に適用した一実施形態について、図面を参照して説明する。プログラムコード生成装置１は、周知のコンピュータシステムにより構成されている。プログラムコード生成装置１は、ＣＰＵ（Central Processing Unit）、ＲＯＭ（Read Only Memory）、ＲＡＭ（Random Access Memory）、Ｉ／Ｏ（Input／Output）及びこれらを接続するバスラインを用い、周辺機器としてのハードディスク装置、キーボード、モデル入力部２や各種設定入力部３や開始指令入力部４等の各種入力部、ディスプレイ等の表示部５、外部との間で通信を行うための通信装置等を備えている。尚、このようなハードウェア構成は従来より当業者に周知であるので、一部記述を省略している。
【０００９】
コード生成ツール６（判定手段、置き換え手段）は、プログラム仕様を示す制御モデル１３からプログラムコードを生成する。ここでいうプログラムコードは、ソースコードである。コード生成ツール６により生成されたプログラムコードは、コンパイラ・リンカ７によりオブジェクトコードに変換され、車両に搭載可能な電子制御装置（ＥＣＵ：Electronic Control Unit）のフラッシュＲＯＭ８に書き込まれる。コード生成ツール６は、抽出エンジン９と、コード生成処理部１０と、シミュレーション処理部１１と、生成ルール記憶部１２とを有する。尚、プログラムコード生成装置１は、高精度な演算を行うために、各種の演算を浮動小数点演算により行う。
【００１０】
抽出エンジン９は、制御モデル１３を読込んで中間ファイルを生成し、その生成した中間ファイルをコード生成処理部１０、シミュレーション処理部１１及び生成ルール記憶部１２に出力する。このとき、抽出エンジン９は、制御モデル１３から演算ブロック（加減算ブロック１４、乗除算ブロック１５、三角関数ブロック１６等）や当該演算ブロックに入力される各種パラメータの演算順序、パラメータ名等のプログラムコードの生成に必要な各種情報を抽出する。
【００１１】
生成ルール記憶部１２は、ＲＯＭやハードディスク装置の一部として構成されており、生成ルールを記憶保持している。又、生成ルール記憶部１２は、抽出エンジン９により抽出された演算順序を一時的に記憶保持している。コード生成処理部１０は、抽出エンジン９から中間ファイルを入力すると、その入力した中間ファイルに対応するプログラムコードを生成する。このとき、コード生成処理部１０は、生成ルール記憶部１２を参照し、生成ルール記憶部１２に記憶されている演算順序を含む生成ルールに基づいてプログラムコードを生成する。
【００１２】
シミュレーション処理部１１は、抽出エンジン９から中間ファイルを入力すると、シミュレーション処理を実行する。このとき、シミュレーション処理部１１は、生成ルール記憶部１２に記憶されている演算順序を含む生成ルールを用いてシミュレーション処理を行う。即ち、シミュレーション処理部１１は、コード生成処理部１０により生成される予定のプログラムコードについての検証を行う。制御モデル１３は、抽象化言語で記述されたものであり、各制御間のパラメータの動きを示すモデルである。制御モデル１３には、変数１７や定数１８等のパラメータに対して各種の演算を対応付けた加減算ブロック１４、乗除算ブロック１５、三角関数ブロック１６等が記述される。
【００１３】
このように構成されているプログラムコード生成装置１は、制御モデル１３の変数１７を次のようにして扱い、プログラムコードを生成する。プログラムコード生成装置１は、本発明に関連する機能として、所定の階層に属する所定の関数からコールされる関数で参照又は更新されるグローバル変数を判定対象とし、その判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であるか否かを判定する機能、判定対象のグローバル変数を用いる関数が所定の階層に属する所定の関数のみからコールされる関数であるか否かを判定する機能、所定の条件を満たした判定対象のグローバル変数を複数の関数で重複して使用する共用変数に置き換える機能を有する。
【００１４】
以下、プログラムコード生成装置１がプログラムコードを生成する手順について説明する。ここでは、サブ関数を含まない場合と含む場合を順次説明する。尚、後述する定期関数は、所定周期で定期的にコールされる関数である。メイン関数は、定期関数から予め規定されている順序にしたがってコールされる関数である。サブ関数は、メイン関数から予め規定されている順序にしたがってコールされる関数である。
【００１５】
（１）サブ関数を含まない場合
最初に、サブ関数を含まない場合について、図２から図４を参照して説明する。前提として、図２に示すように、定期関数Ａがメイン関数Ａ１、Ａ２を順番にコールし、メイン関数Ａ１で参照又は更新されるグローバル変数として変数１、２を用い、メイン関数Ａ２で参照又は更新されるグローバル変数として変数１を用いる。又、定期関数Ｂがメイン関数Ｂ１をコールし、関数Ｂ１で参照又は更新されるグローバル変数として変数２を用いる。又、定期関数Ｂの処理優先度は定期関数Ａの処理優先度よりも高く、定期関数Ａの処理中に定期関数Ｂが割込み処理される場合がある。
【００１６】
コード生成ツール６は、上記した変数１、２が共用変数に置き換え可能であるか否かを、図３に示す置き換え可能変数の判定処理により判定する。コード生成ツール６は、置き換え可能変数の判定処理を開始すると、判定対象のグローバル変数が所定の階層に属する所定の関数のみで参照又は更新される変数であるか否かを判定する（Ｓ１）。コード生成ツール６は、図５に示す例示では、コード生成ツール６は、所定の階層に属する所定の関数を定期関数Ａとする。コード生成ツール６は、判定対象のグローバル変数が所定の階層に属する所定の関数のみで参照又は更新される変数でないと判定すると（Ｓ１：ＮＯ）、その判定対象のグローバル変数を置き換え不可変数として判定する（Ｓ３）。図２に示す例示では、変数２は定期関数Ａのみで参照又は更新される変数でない、即ち、定期関数Ａと同一の階層に属する定期関数Ｂでも参照又は更新される変数であるので、コード生成ツール６は、変数２を置き換え不可変数として判定する（置き換え可能変数から除外する）。
【００１７】
一方、コード生成ツール６は、判定対象のグローバル変数が所定の階層に属する所定の関数のみで参照又は更新される変数であると判定すると（Ｓ１：ＹＥＳ）、その判定対象のグローバル変数を置き換え不可変数として判定せず、その判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であるか否かを判定する（Ｓ２）。図２に示す例示では、変数１は定期関数Ａのみで参照又は更新される変数である、即ち、定期関数Ａと同一の階層に属する定期関数Ｂでは参照又は更新されない変数であるので、コード生成ツール６は、変数１を置き換え不可変数として判定せず、ステップＳ２に移行する。
【００１８】
コード生成ツール６は、ステップＳ２に移行すると、判定対象のグローバル変数が更新前又は更新後の何れのタイミングで参照される変数であるか（参照されるパスがあるか否か）を判定することで、その判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であるか否かを判定する。即ち、図４に示すように、コード生成ツール６は、判定対象のグローバル変数が更新前のタイミングで参照される変数（図４では変数１ａ）であれば、その判定対象のグローバル変数が次回の処理まで値を保持する必要がある変数であると判定し（Ｓ２：ＮＯ）、この場合も、その判定対象のグローバル変数を置き換え不可変数として判定する（Ｓ３）。一方、コード生成ツール６は、判定対象のグローバル変数が更新後のタイミングで参照される変数（図４では変数１ｂ）であれば、その判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であると判定し（Ｓ２：ＹＥＳ）、その判定対象のグローバル変数を置き換え可能変数として判定する（Ｓ４）。コード生成ツール６は、グローバル変数の全てを判定対象とし、置き換え不可変数又は置き換え可能変数の何れかとして判定する。
【００１９】
（２）サブ関数を含む場合
次に、サブ関数を含む場合について、図５及び図６を参照して説明する。前提として、図５に示すように、定期関数がメイン関数Ａ、Ｂ、Ｃを順番にコールする。メイン関数Ａで参照又は更新されるグローバル変数として変数１〜３を用いると共に、メイン関数Ａがサブ関数１、２を順番にコールし、サブ関数１で参照又は更新されるグローバル変数として変数１、２を用い、サブ関数２で参照又は更新されるグローバル変数として変数３を用いる。又、メイン関数Ｂで参照又は更新されるグローバル変数として変数２を用いると共に、メイン関数Ｂが上記したサブ関数２をコールする。
【００２０】
コード生成ツール６は、上記した変数１から３が共用変数に置き換え可能であるか否かを、図６に示す置き換え可能変数の判定処理により判定する。コード生成ツール６は、置き換え可能変数の判定処理を開始すると、判定対象のグローバル変数が所定の階層に属する所定の関数のみで参照又は更新される変数であるか否かを判定する（Ｓ１１）。図５に示す例示では、コード生成ツール６は、所定の階層に属する所定の関数をメイン関数Ａとする。コード生成ツール６は、判定対象のグローバル変数が所定の階層に属する所定の関数のみで参照又は更新される変数でないと判定すると（Ｓ１１：ＮＯ）、その判定対象のグローバル変数を置き換え不可変数として判定する（Ｓ１４）。図５に示す例示では、変数２はメイン関数Ａのみで参照又は更新される変数でない、即ち、メイン関数Ａと同一の階層に属するメイン関数Ｂでも参照又は更新される変数であるので、コード生成ツール６は、変数２を置き換え不可変数として判定する（置き換え可能変数から除外する）。
【００２１】
一方、コード生成ツール６は、判定対象のグローバル変数が所定の階層に属する所定の関数のみで参照又は更新される変数であると判定すると（Ｓ１１：ＹＥＳ）、その判定対象のグローバル変数を置き換え不可変数として判定せず、その判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であるか否かを判定する（Ｓ１２）。図５に示す例示では、変数１、３はメイン関数Ａのみで参照又は更新される変数である、即ち、メイン関数Ａと同一の階層に属するメイン関数Ｂでは参照又は更新されない変数であるので、コード生成ツール６は、変数１、３を置き換え不可変数として判定せず、ステップＳ１２に移行する。
【００２２】
この場合も、コード生成ツール６は、判定対象のグローバル変数が更新前又は更新後の何れのタイミングで参照される変数であるか（参照されるパスがあるか否か）を判定することで、その判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であるか否かを判定する。コード生成ツール６は、判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であると判定すると（Ｓ１２：ＹＥＳ）、判定対象のグローバル変数を用いるサブ関数が上記した所定の階層に属する所定の関数のみからコールされる関数であるか否かを判定する（Ｓ１３）。コード生成ツール６は、判定対象のグローバル変数を用いるサブ関数が上記した所定の階層に属する所定の関数のみからコールされる関数でないと判定すると（Ｓ１３：ＮＯ）、この場合も、その判定対象のグローバル変数を置き換え不可変数として判定する（Ｓ１４）。図５に示す例示では、変数３を用いるサブ関数２はメイン関数Ａのみからコールされる関数でない、即ち、メイン関数Ａと同一の階層に属するメイン関数Ｂからもコールされる関数であるので、コード生成ツール６は、変数３を置き換え不可変数として判定する（置き換え可能変数から除外する）。
【００２３】
一方、コード生成ツール６は、判定対象のグローバル変数を用いるサブ関数が上記した所定の階層に属する所定の関数のみからコールされる関数であると判定すると（Ｓ１３：ＹＥＳ）、その判定対象のグローバル変数を置き換え可能変数として判定する（Ｓ１５）。図５に示す例示では、変数１を用いるサブ関数１はメイン関数Ａのみからコールされる関数である、即ち、メイン関数Ａと同一の階層に属するメイン関数Ｂ、Ｃからはコールされない関数であるので、コード生成ツール６は、変数１を置き換え可能変数として判定する。コード生成ツール６は、グローバル変数の全てを判定対象とし、置き換え不可変数又は置き換え可能変数の何れかとして判定する。
【００２４】
以上に説明した処理により、コード生成ツール６は、置き換え可能変数を判定可能となる。コード生成ツール６は、置き換え可能変数として判定した変数を、互いに処理の割込みの関係がない関数のみで処理すると共に、次回の処理まで値を保持する必要がないので、値を参照又は更新される前後では当該値を記憶しておくための記憶領域を開放可能となる。
【００２５】
具体的な例を説明すると、図７及び図８に示すように、コード生成ツール６は、メイン関数Ａで置き換え可能変数として変数ａ１〜ａ４を判定し、メイン関数Ａと同一のタスクで処理する（割込まない関係にある）メイン関数Ｂで置き換え可能変数として変数ｂ１〜ｂ３を判定した場合には、共用変数ｘ１〜ｘ４を用意し、メイン関数Ａの処理を実行中では置き換え可能変数として判定した変数ａ１〜ａ４をそれぞれ共用変数ｘ１〜ｘ４に置き換え、メイン関数Ｂの処理を実行中では置き換え可能変数として判定した変数ｂ１〜ｂ３をそれぞれ共用変数ｘ１〜ｘ３に置き換え、ソフトウェアに実装する。関数Ａの処理を実行中では共用変数ｘ１〜ｘ４はそれぞれ変数ａ１〜ａ４の役割を果たし、メイン関数Ｂの処理を実行中では共用変数ｘ１〜ｘ３はそれぞれ変数ｂ１〜ｂ３の役割を果たす。共用変数の個数は、変数を共用変数に置き換える対象の関数（図７の例示ではメイン関数Ａ、Ｂ）のうち最大の変数の個数を用意する（図７の例示では「４」）。又、共用変数を用いて関数の処理を実行する前後では共用変数のクリア処理（リフレッシュ処理）を必ず行う。
【００２６】
サブ関数を含まない場合の例として、図９に示すように、定期関数Ａ、Ｂ、Ｃ、メイン関数Ａ１、Ａ２、Ｂ１、Ｃ１、参照又は更新される変数１〜９（全て更新後のタイミングで参照される変数）が定義されている場合には、コード生成ツール６は、置き換え可能変数又は置き換え不可変数を以下のように判定する。コード生成ツール６は、図３に示した置き換え可能変数の判定処理により、所定の階層に属する所定の関数を定期関数Ａとすることで、変数２、４を置き換え不可変数として判定し、変数１、３、５を置き換え可能変数として判定する。又、コード生成ツール６は、所定の階層に属する所定の関数を定期関数Ｂとすることで、変数７を置き換え不可変数として判定し、変数６、８を置き換え可能変数として判定する。又、コード生成ツール６は、所定の階層に属する所定の関数を定期関数Ｃとすることで、変数９を置き換え可能変数として判定する。即ち、コード生成ツール６は、変数１、３、５、６、８、９の６個の変数を置き換え可能変数として判定し、変数２、４、７の３個の変数を置き換え不可変数として判定する。
【００２７】
コード生成ツール６は、図１０に示すように、共用変数ｘ１〜ｘ３の３個の共用変数を用意し、メイン関数Ａ１、Ａ２の処理を実行中では置き換え可能変数として判定した変数１、３、５をそれぞれ共用変数ｘ１〜ｘ３に置き換え、メイン関数Ｂ１の処理を実行中では置き換え可能変数として判定した変数６、８をそれぞれ共用変数ｘ１、ｘ２に置き換え（ｘ３は空き）、メイン関数Ｃ１の処理を実行中では置き換え可能変数として判定した変数９を共用変数ｘ１に置き換え（ｘ２、ｘ３は空き）、ソフトウェアに実装する。メイン関数Ａ１、Ａ２の処理を実行中では共用変数ｘ１〜ｘ３はそれぞれ変数１、３、５の役割を果たし、メイン関数Ｂ１の処理を実行中では共用変数ｘ１、ｘ２はそれぞれ変数６、８の役割を果たし、メイン関数Ｃ１の処理を実行中では共用変数ｘ１は変数９の役割を果たす。この場合、置き換え可能変数として判定した６個の変数を３個の共用変数で代用することができる。即ち、置き換え可能変数の判定処理を行わなければ全体で９個の変数が必要であったが、置き換え可能変数の判定処理を行い、置き換え可能変数として判定した変数を共用変数に置き換えることで、全体で６個の変数（置き換え不可変数として判定した３個の変数と３個の共用変数）を用意すれば良くなる。その分、プログラムの容量を削減することができる。
【００２８】
サブ関数を含む場合の例として、図１１に示すように、定期関数、メイン関数Ａ、Ｂ、サブ関数１〜４、参照又は更新される変数１〜７（全て更新後のタイミングで参照される変数）が定義されている場合には、コード生成ツール６は、置き換え可能変数又は置き換え不可変数を以下のように判定する。コード生成ツール６は、図６に示した置き換え可能変数の判定処理により、所定の階層に属する所定の関数をメイン関数Ａとすることで、変数１〜３を置き換え可能変数として判定する。又、コード生成ツール６は、所定の階層に属する所定の関数をメイン関数Ｂとすることで、変数４〜７を置き換え可能変数として判定する。即ち、コード生成ツール６は、変数１〜７の７個の変数（全ての変数）を置き換え可能変数として判定する。
【００２９】
コード生成ツール６は、図１２に示すように、共用変数ｘ１〜ｘ４の４個の共用変数を用意し、メイン関数Ａの処理を実行中では置き換え可能変数として判定した変数１〜３をそれぞれ共用変数ｘ１〜ｘ３に置き換え（ｘ４は空き）、メイン関数Ｂの処理を実行中では置き換え可能変数として判定した変数４〜７をそれぞれ共用変数ｘ１〜ｘ４に置き換え、ソフトウェアに実装する。メイン関数Ａの処理を実行中では共用変数ｘ１〜ｘ３はそれぞれ変数１〜３の役割を果たし、メイン関数Ｂの処理を実行中では共用変数ｘ１〜ｘ４はそれぞれ変数４〜７の役割を果たす。この場合、置き換え可能変数として判定した７個の変数を４個の共用変数で代用することができる。即ち、置き換え可能変数の判定処理を行わなければ全体で７個の変数が必要であったが、置き換え可能変数の判定処理を行い、置き換え可能変数として判定した変数を共用変数に置き換えることで、全体で４個の変数（４個の共用変数のみ）を用意すれば良くなる。その分、プログラムの容量を削減することができる。
【００３０】
以上に説明したように本実施形態によれば、プログラムコード生成装置１において、所定の階層に属する所定の関数からコールされる関数で参照又は更新されるグローバル変数を判定対象とし、その判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であると判定すると、その判定対象のグローバル変数を共用変数に置き換えるようにした。次回の処理まで値を保持する必要がないグローバル変数を、関数同士で干渉しない変数と判定して共用変数に置き換えることで、グローバル変数の個数の増大を抑制することができ、プログラムの容量を削減することができる。又、プログラムの容量を削減することで、プログラムを格納するのに必要な記憶領域の容量をも削減することができる。
【００３１】
又、判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であり、且つ判定対象のグローバル変数を用いる関数が所定の階層に属する所定の関数のみからコールされる関数であると判定すると、その判定対象のグローバル変数を共用変数に置き換えるようにした。次回の処理まで値を保持する必要がないグローバル変数を、判定対象のグローバル変数を用いる関数が所定の階層に属する所定の関数のみからコールされる関数である場合に、共用変数に置き換えることができる。
【００３２】
本発明は、上記した実施形態にのみ限定されるものではなく、以下のように変形又は拡張することができる。
車両制御用のプログラムコードを生成する場合に適用したが、他の用途のプログラムコードを生成する場合に適用しても良い。
関数の構成は実施形態で説明した以外の構成であっても良い。即ち、図２や図９では、定期関数がメイン関数をコールする２階層の構成を例示し、図５や図１１では、定期関数がメイン関数をコールし、更にメイン関数がサブ関数をコールする３階層の構成を例示したが、サブ関数が更に下位の階層に属する関数をコールする構成、即ち、階層が４以上の構成であっても良い。
【符号の説明】
【００３３】
図面中、１はプログラムコード生成装置、６はコード生成ツール（判定手段、置き換え手段）である。
【図１】
2014232361.tif 000003
【図２】
2014232361.tif 000004
【図３】
2014232361.tif 000005
【図４】
2014232361.tif 000006
【図５】
2014232361.tif 000007
【図６】
2014232361.tif 000008
【図７】
2014232361.tif 000009
【図８】
2014232361.tif 000010
【図９】
2014232361.tif 000011
【図１０】
2014232361.tif 000012
【図１１】
2014232361.tif 000013
【図１２】
2014232361.tif 000014