JP2014232361A - プログラムコード生成装置 - Google Patents
プログラムコード生成装置 Download PDFInfo
- Publication number
- JP2014232361A JP2014232361A JP2013111874A JP2013111874A JP2014232361A JP 2014232361 A JP2014232361 A JP 2014232361A JP 2013111874 A JP2013111874 A JP 2013111874A JP 2013111874 A JP2013111874 A JP 2013111874A JP 2014232361 A JP2014232361 A JP 2014232361A
- Authority
- JP
- Japan
- Prior art keywords
- variable
- function
- variables
- code generation
- program code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
【課題】プログラムコードを生成する際に、グローバル変数の個数の増大を抑制し、プログラムの容量を削減する。【解決手段】プログラムコード生成装置1は、所定の階層に属する所定の関数からコールされる関数で参照又は更新されるグローバル変数を判定対象とし、その判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であると判定すると、その判定対象のグローバル変数を共用変数に置き換える。次回の処理まで値を保持する必要がないグローバル変数を、関数同士で干渉しない変数と判定して共用変数に置き換えることで、グローバル変数の個数の増大を抑制でき、プログラムの容量を削減できる。【選択図】図1
Description
本発明は、プログラムコードを生成するプログラムコード生成装置に関する。
従来より、コンピュータシステムに搭載されるプログラムの仕様をモデル化し、そのモデル化記述である抽象化言語からプログラムコードを生成するプログラムコード生成装置が供されている。このような抽象化言語としては、データフローダイアグラム等のブロック線図、ステートチャート等の状態遷移図をはじめ、UML(Unified Modeling Language )等が知られている。この種のプログラムコード生成装置を用いれば、人間の思考形態に近い抽象化言語からプログラムコードを生成するので、プログラムの短期開発を容易にすることができると共に、仕様変更等にも即座に対応することができる。又、制御を抽象化言語によるモデルで表示することで、複雑な制御図の可読性を高めることができると共に、制御のブロック化や階層化を容易にすることができる(例えば特許文献1参照)。
制御をブロック化したり階層化したりする場合には、プログラムコードがブロック単位又は階層単位で関数化される。その場合、関数間でデータを授受するには、変数をグローバル変数とする必要がある。そのため、ブロック単位又は階層単位での関数化が増大すると、グローバル変数の個数も増大し、その結果、プログラムの容量が増大するという問題が発生する。
本発明は、上記した事情に鑑みてなされたものであり、その目的は、プログラムコードを生成する際に、グローバル変数の個数の増大を抑制することができ、プログラムの容量を削減することができるプログラムコード生成装置を提供することにある。
請求項1に記載した発明によれば、判定手段は、所定の階層に属する所定の関数からコールされる関数で参照又は更新されるグローバル変数を判定対象とし、その判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であるか否かを判定する。置き換え手段は、その判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であると判定手段により判定されると、その判定対象のグローバル変数を、複数の関数で重複して使用する共用変数に置き換える。即ち、次回の処理まで値を保持する必要がないグローバル変数を、関数同士で干渉しない変数と判定して共用変数に置き換えることで、グローバル変数の個数の増大を抑制することができ、プログラムの容量を削減することができる。
以下、本発明を、車両制御用のプログラムコードを生成する構成に適用した一実施形態について、図面を参照して説明する。プログラムコード生成装置1は、周知のコンピュータシステムにより構成されている。プログラムコード生成装置1は、CPU(Central Processing Unit)、ROM(Read Only Memory)、RAM(Random Access Memory)、I/O(Input/Output)及びこれらを接続するバスラインを用い、周辺機器としてのハードディスク装置、キーボード、モデル入力部2や各種設定入力部3や開始指令入力部4等の各種入力部、ディスプレイ等の表示部5、外部との間で通信を行うための通信装置等を備えている。尚、このようなハードウェア構成は従来より当業者に周知であるので、一部記述を省略している。
コード生成ツール6(判定手段、置き換え手段)は、プログラム仕様を示す制御モデル13からプログラムコードを生成する。ここでいうプログラムコードは、ソースコードである。コード生成ツール6により生成されたプログラムコードは、コンパイラ・リンカ7によりオブジェクトコードに変換され、車両に搭載可能な電子制御装置(ECU:Electronic Control Unit)のフラッシュROM8に書き込まれる。コード生成ツール6は、抽出エンジン9と、コード生成処理部10と、シミュレーション処理部11と、生成ルール記憶部12とを有する。尚、プログラムコード生成装置1は、高精度な演算を行うために、各種の演算を浮動小数点演算により行う。
抽出エンジン9は、制御モデル13を読込んで中間ファイルを生成し、その生成した中間ファイルをコード生成処理部10、シミュレーション処理部11及び生成ルール記憶部12に出力する。このとき、抽出エンジン9は、制御モデル13から演算ブロック(加減算ブロック14、乗除算ブロック15、三角関数ブロック16等)や当該演算ブロックに入力される各種パラメータの演算順序、パラメータ名等のプログラムコードの生成に必要な各種情報を抽出する。
生成ルール記憶部12は、ROMやハードディスク装置の一部として構成されており、生成ルールを記憶保持している。又、生成ルール記憶部12は、抽出エンジン9により抽出された演算順序を一時的に記憶保持している。コード生成処理部10は、抽出エンジン9から中間ファイルを入力すると、その入力した中間ファイルに対応するプログラムコードを生成する。このとき、コード生成処理部10は、生成ルール記憶部12を参照し、生成ルール記憶部12に記憶されている演算順序を含む生成ルールに基づいてプログラムコードを生成する。
シミュレーション処理部11は、抽出エンジン9から中間ファイルを入力すると、シミュレーション処理を実行する。このとき、シミュレーション処理部11は、生成ルール記憶部12に記憶されている演算順序を含む生成ルールを用いてシミュレーション処理を行う。即ち、シミュレーション処理部11は、コード生成処理部10により生成される予定のプログラムコードについての検証を行う。制御モデル13は、抽象化言語で記述されたものであり、各制御間のパラメータの動きを示すモデルである。制御モデル13には、変数17や定数18等のパラメータに対して各種の演算を対応付けた加減算ブロック14、乗除算ブロック15、三角関数ブロック16等が記述される。
このように構成されているプログラムコード生成装置1は、制御モデル13の変数17を次のようにして扱い、プログラムコードを生成する。プログラムコード生成装置1は、本発明に関連する機能として、所定の階層に属する所定の関数からコールされる関数で参照又は更新されるグローバル変数を判定対象とし、その判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であるか否かを判定する機能、判定対象のグローバル変数を用いる関数が所定の階層に属する所定の関数のみからコールされる関数であるか否かを判定する機能、所定の条件を満たした判定対象のグローバル変数を複数の関数で重複して使用する共用変数に置き換える機能を有する。
以下、プログラムコード生成装置1がプログラムコードを生成する手順について説明する。ここでは、サブ関数を含まない場合と含む場合を順次説明する。尚、後述する定期関数は、所定周期で定期的にコールされる関数である。メイン関数は、定期関数から予め規定されている順序にしたがってコールされる関数である。サブ関数は、メイン関数から予め規定されている順序にしたがってコールされる関数である。
(1)サブ関数を含まない場合
最初に、サブ関数を含まない場合について、図2から図4を参照して説明する。前提として、図2に示すように、定期関数Aがメイン関数A1、A2を順番にコールし、メイン関数A1で参照又は更新されるグローバル変数として変数1、2を用い、メイン関数A2で参照又は更新されるグローバル変数として変数1を用いる。又、定期関数Bがメイン関数B1をコールし、関数B1で参照又は更新されるグローバル変数として変数2を用いる。又、定期関数Bの処理優先度は定期関数Aの処理優先度よりも高く、定期関数Aの処理中に定期関数Bが割込み処理される場合がある。
最初に、サブ関数を含まない場合について、図2から図4を参照して説明する。前提として、図2に示すように、定期関数Aがメイン関数A1、A2を順番にコールし、メイン関数A1で参照又は更新されるグローバル変数として変数1、2を用い、メイン関数A2で参照又は更新されるグローバル変数として変数1を用いる。又、定期関数Bがメイン関数B1をコールし、関数B1で参照又は更新されるグローバル変数として変数2を用いる。又、定期関数Bの処理優先度は定期関数Aの処理優先度よりも高く、定期関数Aの処理中に定期関数Bが割込み処理される場合がある。
コード生成ツール6は、上記した変数1、2が共用変数に置き換え可能であるか否かを、図3に示す置き換え可能変数の判定処理により判定する。コード生成ツール6は、置き換え可能変数の判定処理を開始すると、判定対象のグローバル変数が所定の階層に属する所定の関数のみで参照又は更新される変数であるか否かを判定する(S1)。コード生成ツール6は、図5に示す例示では、コード生成ツール6は、所定の階層に属する所定の関数を定期関数Aとする。コード生成ツール6は、判定対象のグローバル変数が所定の階層に属する所定の関数のみで参照又は更新される変数でないと判定すると(S1:NO)、その判定対象のグローバル変数を置き換え不可変数として判定する(S3)。図2に示す例示では、変数2は定期関数Aのみで参照又は更新される変数でない、即ち、定期関数Aと同一の階層に属する定期関数Bでも参照又は更新される変数であるので、コード生成ツール6は、変数2を置き換え不可変数として判定する(置き換え可能変数から除外する)。
一方、コード生成ツール6は、判定対象のグローバル変数が所定の階層に属する所定の関数のみで参照又は更新される変数であると判定すると(S1:YES)、その判定対象のグローバル変数を置き換え不可変数として判定せず、その判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であるか否かを判定する(S2)。図2に示す例示では、変数1は定期関数Aのみで参照又は更新される変数である、即ち、定期関数Aと同一の階層に属する定期関数Bでは参照又は更新されない変数であるので、コード生成ツール6は、変数1を置き換え不可変数として判定せず、ステップS2に移行する。
コード生成ツール6は、ステップS2に移行すると、判定対象のグローバル変数が更新前又は更新後の何れのタイミングで参照される変数であるか(参照されるパスがあるか否か)を判定することで、その判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であるか否かを判定する。即ち、図4に示すように、コード生成ツール6は、判定対象のグローバル変数が更新前のタイミングで参照される変数(図4では変数1a)であれば、その判定対象のグローバル変数が次回の処理まで値を保持する必要がある変数であると判定し(S2:NO)、この場合も、その判定対象のグローバル変数を置き換え不可変数として判定する(S3)。一方、コード生成ツール6は、判定対象のグローバル変数が更新後のタイミングで参照される変数(図4では変数1b)であれば、その判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であると判定し(S2:YES)、その判定対象のグローバル変数を置き換え可能変数として判定する(S4)。コード生成ツール6は、グローバル変数の全てを判定対象とし、置き換え不可変数又は置き換え可能変数の何れかとして判定する。
(2)サブ関数を含む場合
次に、サブ関数を含む場合について、図5及び図6を参照して説明する。前提として、図5に示すように、定期関数がメイン関数A、B、Cを順番にコールする。メイン関数Aで参照又は更新されるグローバル変数として変数1〜3を用いると共に、メイン関数Aがサブ関数1、2を順番にコールし、サブ関数1で参照又は更新されるグローバル変数として変数1、2を用い、サブ関数2で参照又は更新されるグローバル変数として変数3を用いる。又、メイン関数Bで参照又は更新されるグローバル変数として変数2を用いると共に、メイン関数Bが上記したサブ関数2をコールする。
次に、サブ関数を含む場合について、図5及び図6を参照して説明する。前提として、図5に示すように、定期関数がメイン関数A、B、Cを順番にコールする。メイン関数Aで参照又は更新されるグローバル変数として変数1〜3を用いると共に、メイン関数Aがサブ関数1、2を順番にコールし、サブ関数1で参照又は更新されるグローバル変数として変数1、2を用い、サブ関数2で参照又は更新されるグローバル変数として変数3を用いる。又、メイン関数Bで参照又は更新されるグローバル変数として変数2を用いると共に、メイン関数Bが上記したサブ関数2をコールする。
コード生成ツール6は、上記した変数1から3が共用変数に置き換え可能であるか否かを、図6に示す置き換え可能変数の判定処理により判定する。コード生成ツール6は、置き換え可能変数の判定処理を開始すると、判定対象のグローバル変数が所定の階層に属する所定の関数のみで参照又は更新される変数であるか否かを判定する(S11)。図5に示す例示では、コード生成ツール6は、所定の階層に属する所定の関数をメイン関数Aとする。コード生成ツール6は、判定対象のグローバル変数が所定の階層に属する所定の関数のみで参照又は更新される変数でないと判定すると(S11:NO)、その判定対象のグローバル変数を置き換え不可変数として判定する(S14)。図5に示す例示では、変数2はメイン関数Aのみで参照又は更新される変数でない、即ち、メイン関数Aと同一の階層に属するメイン関数Bでも参照又は更新される変数であるので、コード生成ツール6は、変数2を置き換え不可変数として判定する(置き換え可能変数から除外する)。
一方、コード生成ツール6は、判定対象のグローバル変数が所定の階層に属する所定の関数のみで参照又は更新される変数であると判定すると(S11:YES)、その判定対象のグローバル変数を置き換え不可変数として判定せず、その判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であるか否かを判定する(S12)。図5に示す例示では、変数1、3はメイン関数Aのみで参照又は更新される変数である、即ち、メイン関数Aと同一の階層に属するメイン関数Bでは参照又は更新されない変数であるので、コード生成ツール6は、変数1、3を置き換え不可変数として判定せず、ステップS12に移行する。
この場合も、コード生成ツール6は、判定対象のグローバル変数が更新前又は更新後の何れのタイミングで参照される変数であるか(参照されるパスがあるか否か)を判定することで、その判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であるか否かを判定する。コード生成ツール6は、判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であると判定すると(S12:YES)、判定対象のグローバル変数を用いるサブ関数が上記した所定の階層に属する所定の関数のみからコールされる関数であるか否かを判定する(S13)。コード生成ツール6は、判定対象のグローバル変数を用いるサブ関数が上記した所定の階層に属する所定の関数のみからコールされる関数でないと判定すると(S13:NO)、この場合も、その判定対象のグローバル変数を置き換え不可変数として判定する(S14)。図5に示す例示では、変数3を用いるサブ関数2はメイン関数Aのみからコールされる関数でない、即ち、メイン関数Aと同一の階層に属するメイン関数Bからもコールされる関数であるので、コード生成ツール6は、変数3を置き換え不可変数として判定する(置き換え可能変数から除外する)。
一方、コード生成ツール6は、判定対象のグローバル変数を用いるサブ関数が上記した所定の階層に属する所定の関数のみからコールされる関数であると判定すると(S13:YES)、その判定対象のグローバル変数を置き換え可能変数として判定する(S15)。図5に示す例示では、変数1を用いるサブ関数1はメイン関数Aのみからコールされる関数である、即ち、メイン関数Aと同一の階層に属するメイン関数B、Cからはコールされない関数であるので、コード生成ツール6は、変数1を置き換え可能変数として判定する。コード生成ツール6は、グローバル変数の全てを判定対象とし、置き換え不可変数又は置き換え可能変数の何れかとして判定する。
以上に説明した処理により、コード生成ツール6は、置き換え可能変数を判定可能となる。コード生成ツール6は、置き換え可能変数として判定した変数を、互いに処理の割込みの関係がない関数のみで処理すると共に、次回の処理まで値を保持する必要がないので、値を参照又は更新される前後では当該値を記憶しておくための記憶領域を開放可能となる。
具体的な例を説明すると、図7及び図8に示すように、コード生成ツール6は、メイン関数Aで置き換え可能変数として変数a1〜a4を判定し、メイン関数Aと同一のタスクで処理する(割込まない関係にある)メイン関数Bで置き換え可能変数として変数b1〜b3を判定した場合には、共用変数x1〜x4を用意し、メイン関数Aの処理を実行中では置き換え可能変数として判定した変数a1〜a4をそれぞれ共用変数x1〜x4に置き換え、メイン関数Bの処理を実行中では置き換え可能変数として判定した変数b1〜b3をそれぞれ共用変数x1〜x3に置き換え、ソフトウェアに実装する。関数Aの処理を実行中では共用変数x1〜x4はそれぞれ変数a1〜a4の役割を果たし、メイン関数Bの処理を実行中では共用変数x1〜x3はそれぞれ変数b1〜b3の役割を果たす。共用変数の個数は、変数を共用変数に置き換える対象の関数(図7の例示ではメイン関数A、B)のうち最大の変数の個数を用意する(図7の例示では「4」)。又、共用変数を用いて関数の処理を実行する前後では共用変数のクリア処理(リフレッシュ処理)を必ず行う。
サブ関数を含まない場合の例として、図9に示すように、定期関数A、B、C、メイン関数A1、A2、B1、C1、参照又は更新される変数1〜9(全て更新後のタイミングで参照される変数)が定義されている場合には、コード生成ツール6は、置き換え可能変数又は置き換え不可変数を以下のように判定する。コード生成ツール6は、図3に示した置き換え可能変数の判定処理により、所定の階層に属する所定の関数を定期関数Aとすることで、変数2、4を置き換え不可変数として判定し、変数1、3、5を置き換え可能変数として判定する。又、コード生成ツール6は、所定の階層に属する所定の関数を定期関数Bとすることで、変数7を置き換え不可変数として判定し、変数6、8を置き換え可能変数として判定する。又、コード生成ツール6は、所定の階層に属する所定の関数を定期関数Cとすることで、変数9を置き換え可能変数として判定する。即ち、コード生成ツール6は、変数1、3、5、6、8、9の6個の変数を置き換え可能変数として判定し、変数2、4、7の3個の変数を置き換え不可変数として判定する。
コード生成ツール6は、図10に示すように、共用変数x1〜x3の3個の共用変数を用意し、メイン関数A1、A2の処理を実行中では置き換え可能変数として判定した変数1、3、5をそれぞれ共用変数x1〜x3に置き換え、メイン関数B1の処理を実行中では置き換え可能変数として判定した変数6、8をそれぞれ共用変数x1、x2に置き換え(x3は空き)、メイン関数C1の処理を実行中では置き換え可能変数として判定した変数9を共用変数x1に置き換え(x2、x3は空き)、ソフトウェアに実装する。メイン関数A1、A2の処理を実行中では共用変数x1〜x3はそれぞれ変数1、3、5の役割を果たし、メイン関数B1の処理を実行中では共用変数x1、x2はそれぞれ変数6、8の役割を果たし、メイン関数C1の処理を実行中では共用変数x1は変数9の役割を果たす。この場合、置き換え可能変数として判定した6個の変数を3個の共用変数で代用することができる。即ち、置き換え可能変数の判定処理を行わなければ全体で9個の変数が必要であったが、置き換え可能変数の判定処理を行い、置き換え可能変数として判定した変数を共用変数に置き換えることで、全体で6個の変数(置き換え不可変数として判定した3個の変数と3個の共用変数)を用意すれば良くなる。その分、プログラムの容量を削減することができる。
サブ関数を含む場合の例として、図11に示すように、定期関数、メイン関数A、B、サブ関数1〜4、参照又は更新される変数1〜7(全て更新後のタイミングで参照される変数)が定義されている場合には、コード生成ツール6は、置き換え可能変数又は置き換え不可変数を以下のように判定する。コード生成ツール6は、図6に示した置き換え可能変数の判定処理により、所定の階層に属する所定の関数をメイン関数Aとすることで、変数1〜3を置き換え可能変数として判定する。又、コード生成ツール6は、所定の階層に属する所定の関数をメイン関数Bとすることで、変数4〜7を置き換え可能変数として判定する。即ち、コード生成ツール6は、変数1〜7の7個の変数(全ての変数)を置き換え可能変数として判定する。
コード生成ツール6は、図12に示すように、共用変数x1〜x4の4個の共用変数を用意し、メイン関数Aの処理を実行中では置き換え可能変数として判定した変数1〜3をそれぞれ共用変数x1〜x3に置き換え(x4は空き)、メイン関数Bの処理を実行中では置き換え可能変数として判定した変数4〜7をそれぞれ共用変数x1〜x4に置き換え、ソフトウェアに実装する。メイン関数Aの処理を実行中では共用変数x1〜x3はそれぞれ変数1〜3の役割を果たし、メイン関数Bの処理を実行中では共用変数x1〜x4はそれぞれ変数4〜7の役割を果たす。この場合、置き換え可能変数として判定した7個の変数を4個の共用変数で代用することができる。即ち、置き換え可能変数の判定処理を行わなければ全体で7個の変数が必要であったが、置き換え可能変数の判定処理を行い、置き換え可能変数として判定した変数を共用変数に置き換えることで、全体で4個の変数(4個の共用変数のみ)を用意すれば良くなる。その分、プログラムの容量を削減することができる。
以上に説明したように本実施形態によれば、プログラムコード生成装置1において、所定の階層に属する所定の関数からコールされる関数で参照又は更新されるグローバル変数を判定対象とし、その判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であると判定すると、その判定対象のグローバル変数を共用変数に置き換えるようにした。次回の処理まで値を保持する必要がないグローバル変数を、関数同士で干渉しない変数と判定して共用変数に置き換えることで、グローバル変数の個数の増大を抑制することができ、プログラムの容量を削減することができる。又、プログラムの容量を削減することで、プログラムを格納するのに必要な記憶領域の容量をも削減することができる。
又、判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であり、且つ判定対象のグローバル変数を用いる関数が所定の階層に属する所定の関数のみからコールされる関数であると判定すると、その判定対象のグローバル変数を共用変数に置き換えるようにした。次回の処理まで値を保持する必要がないグローバル変数を、判定対象のグローバル変数を用いる関数が所定の階層に属する所定の関数のみからコールされる関数である場合に、共用変数に置き換えることができる。
本発明は、上記した実施形態にのみ限定されるものではなく、以下のように変形又は拡張することができる。
車両制御用のプログラムコードを生成する場合に適用したが、他の用途のプログラムコードを生成する場合に適用しても良い。
関数の構成は実施形態で説明した以外の構成であっても良い。即ち、図2や図9では、定期関数がメイン関数をコールする2階層の構成を例示し、図5や図11では、定期関数がメイン関数をコールし、更にメイン関数がサブ関数をコールする3階層の構成を例示したが、サブ関数が更に下位の階層に属する関数をコールする構成、即ち、階層が4以上の構成であっても良い。
車両制御用のプログラムコードを生成する場合に適用したが、他の用途のプログラムコードを生成する場合に適用しても良い。
関数の構成は実施形態で説明した以外の構成であっても良い。即ち、図2や図9では、定期関数がメイン関数をコールする2階層の構成を例示し、図5や図11では、定期関数がメイン関数をコールし、更にメイン関数がサブ関数をコールする3階層の構成を例示したが、サブ関数が更に下位の階層に属する関数をコールする構成、即ち、階層が4以上の構成であっても良い。
図面中、1はプログラムコード生成装置、6はコード生成ツール(判定手段、置き換え手段)である。
Claims (5)
- プログラムコードを生成するプログラムコード生成装置(1)において、
所定の階層に属する所定の関数からコールされる関数で参照又は更新されるグローバル変数を判定対象とし、その判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であるか否かを判定する判定手段(6)と、
前記判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であると前記判定手段により判定された場合に、その判定対象のグローバル変数を、複数の関数で重複して使用する共用変数に置き換える置き換え手段(6)と、を備えたことを特徴とするプログラムコード生成装置。 - 請求項1に記載したプログラムコード生成装置において、
前記判定手段は、前記判定対象のグローバル変数を用いる関数が前記所定の階層に属する前記所定の関数のみからコールされる関数であるか否かをも判定し、
前記置き換え手段は、前記判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であり、且つ前記判定対象のグローバル変数を用いる関数が前記所定の階層に属する前記所定の関数のみからコールされる関数であると前記判定手段により判定された場合に、その判定対象のグローバル変数を、前記共用変数に置き換えることを特徴とするプログラムコード生成装置。 - 請求項1又は2に記載したプログラムコード生成装置において、
前記判定手段は、前記所定の階層に属する前記所定の関数を定期関数とし、前記コールされる関数を前記定期関数の次位の階層に属するメイン関数とし、そのメイン関数以下で参照又は更新されるグローバル変数を判定対象とすることを特徴とするプログラムコード生成装置。 - 請求項1又は2に記載したプログラムコード生成装置において、
前記判定手段は、前記所定の階層に属する前記所定の関数をメイン関数とし、前記コールされる関数を前記メイン関数の次位の階層に属するサブ関数とし、そのサブ関数以下で参照又は更新されるグローバル変数を判定対象とすることを特徴とするプログラムコード生成装置。 - 請求項1から4の何れか一項に記載したプログラムコード生成装置において、
前記判定手段は、判定対象のグローバル変数が次回の処理まで値を保持する必要がない変数であるか否かを、前回の処理後の値を参照するパスがある場合に当該値を保持する必要がある変数であると判定し、前回の処理後の値を参照するパスがない場合に当該値を保持する必要がない変数であると判定することを特徴とするプログラムコード生成装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013111874A JP2014232361A (ja) | 2013-05-28 | 2013-05-28 | プログラムコード生成装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013111874A JP2014232361A (ja) | 2013-05-28 | 2013-05-28 | プログラムコード生成装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2014232361A true JP2014232361A (ja) | 2014-12-11 |
Family
ID=52125720
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2013111874A Pending JP2014232361A (ja) | 2013-05-28 | 2013-05-28 | プログラムコード生成装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2014232361A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112166409A (zh) * | 2018-06-06 | 2021-01-01 | 欧姆龙株式会社 | 控制系统、控制系统的控制方法以及控制系统的程序 |
-
2013
- 2013-05-28 JP JP2013111874A patent/JP2014232361A/ja active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112166409A (zh) * | 2018-06-06 | 2021-01-01 | 欧姆龙株式会社 | 控制系统、控制系统的控制方法以及控制系统的程序 |
CN112166409B (zh) * | 2018-06-06 | 2023-11-14 | 欧姆龙株式会社 | 控制系统、控制系统的控制方法以及记录介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10635555B2 (en) | Verifying a graph-based coherency verification tool | |
CN110506256B (zh) | 用于生成源代码的方法 | |
US9128783B1 (en) | Scheduling and executing model components in response to un-modeled events detected during an execution of the model | |
CN112131164A (zh) | 应用于加速板卡的数据调度方法、装置及加速板卡和介质 | |
CN109558159A (zh) | 游戏中用户界面的更新方法和装置 | |
JP2021064049A (ja) | 計算機システム及び数理モデルの生成支援方法 | |
JP6137175B2 (ja) | 階層型確率モデル生成システム、階層型確率モデル生成方法、およびプログラム | |
JP5910499B2 (ja) | 拡張性評価装置、拡張性評価方法および拡張性評価プログラム | |
JP6879625B2 (ja) | プログラマブルコントローラ、管理装置および制御システム | |
CN114663753A (zh) | 一种生产任务在线监控方法及系统 | |
WO2021114757A1 (zh) | 计算图的优化方法、装置、计算机设备和存储介质 | |
JP2011253253A (ja) | コンピュータ試験方法、コンピュータ試験装置およびコンピュータ試験プログラム | |
JP6173644B1 (ja) | 情報処理装置、情報処理方法及び情報処理プログラム | |
JP2014232361A (ja) | プログラムコード生成装置 | |
JP2014056381A (ja) | 車両の電子制御装置 | |
US20150082278A1 (en) | Clone detection method and clone function commonalizing method | |
CN108205596B (zh) | 实现核电厂严重事故分析计算程序仿真功能的方法 | |
WO2016167797A1 (en) | Morphed instruction according to configuration update | |
US20170212755A1 (en) | System and method for computing a criticality metric of a unit of source code | |
JP2007080049A (ja) | 組み込み用プログラム生成方法、組み込み用プログラム開発システム、及び情報テーブル部 | |
JP2013105349A (ja) | 動的リンクライブラリの更新、実行方法 | |
CN102063308A (zh) | 一种用于地震勘探资料处理流程控制的方法 | |
CN112131297A (zh) | 数据处理方法、装置、设备及存储介质 | |
JP4264110B2 (ja) | 模擬実行装置、方法およびプログラム | |
EP3663992A1 (en) | Learning-finished model integration method, device, program, ic chip, and system |