JPH0869381A - コンパイル方式 - Google Patents
コンパイル方式Info
- Publication number
- JPH0869381A JPH0869381A JP6205781A JP20578194A JPH0869381A JP H0869381 A JPH0869381 A JP H0869381A JP 6205781 A JP6205781 A JP 6205781A JP 20578194 A JP20578194 A JP 20578194A JP H0869381 A JPH0869381 A JP H0869381A
- Authority
- JP
- Japan
- Prior art keywords
- initial value
- variable
- program
- rom
- array
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
(57)【要約】
【目的】大量の同一データのROM領域を圧縮し、使用
データ量ならびにメモリのコストを低減することのでき
るコンパイル方式を提供する。 【構成】本発明は、字句解析手段101、構文解析手段
102、初期値解析手段103およびコード生成手段1
04を含むコンパイラ部13と、連結手段105、配置
手段106、未解決コード処理手段107および出力手
段108を含むリンカ部により形成される制御部と、原
始プログラム109、オブジェクトプログラム110、
初期値展開処理手順を含むスタート・アップ・プログラ
ム111およ実行可能プログラム112が格納される補
助記憶部12とを備えて構成され、初期値解析手段10
3においては、初期値なし変数、初期値あり変数、およ
びメンバが一定の初期値を持つ構造体配列の変数が認識
されて、それぞれセグメント(1)、セグメント(2)
およびセグメント(3)に配置される。
データ量ならびにメモリのコストを低減することのでき
るコンパイル方式を提供する。 【構成】本発明は、字句解析手段101、構文解析手段
102、初期値解析手段103およびコード生成手段1
04を含むコンパイラ部13と、連結手段105、配置
手段106、未解決コード処理手段107および出力手
段108を含むリンカ部により形成される制御部と、原
始プログラム109、オブジェクトプログラム110、
初期値展開処理手順を含むスタート・アップ・プログラ
ム111およ実行可能プログラム112が格納される補
助記憶部12とを備えて構成され、初期値解析手段10
3においては、初期値なし変数、初期値あり変数、およ
びメンバが一定の初期値を持つ構造体配列の変数が認識
されて、それぞれセグメント(1)、セグメント(2)
およびセグメント(3)に配置される。
Description
【0001】
【産業上の利用分野】本発明はコンパイル方式に関し、
特にROM化機能を有するコンパイル方式に関する。
特にROM化機能を有するコンパイル方式に関する。
【0002】
【従来の技術】一般に、コンパイル方式は、プログラム
記述用言語の翻訳プログラムとしてソフトウェア開発の
分野において広く使われており、Cコンパイラの出現に
よって、マイクロプロセッサにおけるソフトウェア開発
分野にも広まっている。また、最近においては、1チッ
プ・マイコンなどを使用した組込み制御システムにおい
ても使われ始めている。
記述用言語の翻訳プログラムとしてソフトウェア開発の
分野において広く使われており、Cコンパイラの出現に
よって、マイクロプロセッサにおけるソフトウェア開発
分野にも広まっている。また、最近においては、1チッ
プ・マイコンなどを使用した組込み制御システムにおい
ても使われ始めている。
【0003】この組込みシステムにおいては、ハード・
ディスクまたはフロッピィ・ディスクのような補助記憶
装置を持つものが殆どないために、C言語などで書かれ
ているプログラムはROMに格納され、電源投入時には
既にプログラムが存在している状態において使用されて
いる。このことにより、組込み制御システムにおいて
は、初期値を持った変数の扱いが通常と異なってくる。
例えば、“int n=10;”と宣言すれば、nには
プログラムを実行する前から10という値が入ってお
り、この値は変更可能である。プログラムまたはデータ
が補助記憶装置に格納されており、それをRAM上にロ
ードしてからプログラムを実行するのであれば問題はな
い。この場合には、RAM上にロードした時にnという
変数には10の値が書込まれ、RAMであるからこの値
は変更可能である。しかしながら、組込み制御システム
においては、RAM上に配置されるべき書換え可能の変
数は、電源が投入された時点において内容は不定であ
り、内容の確定しているROMにおいては、値の変更は
不可能である。従って、初期値あり変数の初期値は、R
OM上に配置しておき、それをRAM上にコピーしてか
ら使うことになり、一つの変数に対してRAMとROM
のそれぞれ領域が使用される。また、プログラム自体
は、始めからRAMに変数領域があるものとして動作す
ることが求められる。この初期値あり変数に対する処理
を、コンパイラにより自動的に行うようにしたものがR
OM化機能である。また、組込み制御システムにおいて
は、安価なCPUと必要最低限のメモリを使用するのが
一般的であり、コンパイラとしては小さくて高速の実行
可能のコードの出力が要求される。
ディスクまたはフロッピィ・ディスクのような補助記憶
装置を持つものが殆どないために、C言語などで書かれ
ているプログラムはROMに格納され、電源投入時には
既にプログラムが存在している状態において使用されて
いる。このことにより、組込み制御システムにおいて
は、初期値を持った変数の扱いが通常と異なってくる。
例えば、“int n=10;”と宣言すれば、nには
プログラムを実行する前から10という値が入ってお
り、この値は変更可能である。プログラムまたはデータ
が補助記憶装置に格納されており、それをRAM上にロ
ードしてからプログラムを実行するのであれば問題はな
い。この場合には、RAM上にロードした時にnという
変数には10の値が書込まれ、RAMであるからこの値
は変更可能である。しかしながら、組込み制御システム
においては、RAM上に配置されるべき書換え可能の変
数は、電源が投入された時点において内容は不定であ
り、内容の確定しているROMにおいては、値の変更は
不可能である。従って、初期値あり変数の初期値は、R
OM上に配置しておき、それをRAM上にコピーしてか
ら使うことになり、一つの変数に対してRAMとROM
のそれぞれ領域が使用される。また、プログラム自体
は、始めからRAMに変数領域があるものとして動作す
ることが求められる。この初期値あり変数に対する処理
を、コンパイラにより自動的に行うようにしたものがR
OM化機能である。また、組込み制御システムにおいて
は、安価なCPUと必要最低限のメモリを使用するのが
一般的であり、コンパイラとしては小さくて高速の実行
可能のコードの出力が要求される。
【0004】図7は、RAMに配置される変数の初期値
を、ROM配置のコードとしてオブジェクトプログラム
を生成する従来のコンパイル方式に含まれる初期値解析
手段の一例の処理手順を示すフローチャートであり、図
8には、当該ROMに配置される初期値のセグメントデ
ータ形式の一例の構成が示されており、図9には、当該
ROMに配置された初期値を、RAMに領域確保された
変数の番地に展開するスタート・アップ・プログラムに
含まれる初期値展開処理手順の一例を示すフローチャー
トが示されている。なお、当該従来例のシステム構成
は、概念的には図1に示されるとうりである。
を、ROM配置のコードとしてオブジェクトプログラム
を生成する従来のコンパイル方式に含まれる初期値解析
手段の一例の処理手順を示すフローチャートであり、図
8には、当該ROMに配置される初期値のセグメントデ
ータ形式の一例の構成が示されており、図9には、当該
ROMに配置された初期値を、RAMに領域確保された
変数の番地に展開するスタート・アップ・プログラムに
含まれる初期値展開処理手順の一例を示すフローチャー
トが示されている。なお、当該従来例のシステム構成
は、概念的には図1に示されるとうりである。
【0005】図7において、まず、初期値有無判定処理
ステップ701において、原始プログラム内に記述され
ている変数に対して初期値ありか否かが判定されて、初
期値ありと判定される場合には、セグメント(2)生成
処理ステップ702において、当該変数のRAM内にお
ける領域確保が行われるとともに、当該初期値はROM
の配置とする初期化ありセグメント(2)に配置され
る。また、前記初期値有無判定処理ステップ701にお
いて、初期値なしと判定される場合には、セグメント
(1)生成処理ステップ703において、当該変数のR
AM内における領域確保のみとする初期化なしセグメン
ト(1)に配置される。図8には、実行可能プログラム
81における従来のROM配置に配置される初期値のゼ
クメントデータ形式の構成が示されている。図8におい
て、ROMに対する初期値配置は、RAMに確保されて
いる変数領域に対応して配置されているが、このことは
構造体配列の場合も同様であり、図8の初期化あり用の
セグメント(2)801に示されるように、各メンバの
構造体配列の初期値802は、それぞれの配列の番地に
対応して配置されている。
ステップ701において、原始プログラム内に記述され
ている変数に対して初期値ありか否かが判定されて、初
期値ありと判定される場合には、セグメント(2)生成
処理ステップ702において、当該変数のRAM内にお
ける領域確保が行われるとともに、当該初期値はROM
の配置とする初期化ありセグメント(2)に配置され
る。また、前記初期値有無判定処理ステップ701にお
いて、初期値なしと判定される場合には、セグメント
(1)生成処理ステップ703において、当該変数のR
AM内における領域確保のみとする初期化なしセグメン
ト(1)に配置される。図8には、実行可能プログラム
81における従来のROM配置に配置される初期値のゼ
クメントデータ形式の構成が示されている。図8におい
て、ROMに対する初期値配置は、RAMに確保されて
いる変数領域に対応して配置されているが、このことは
構造体配列の場合も同様であり、図8の初期化あり用の
セグメント(2)801に示されるように、各メンバの
構造体配列の初期値802は、それぞれの配列の番地に
対応して配置されている。
【0006】次に、図9を参照して、所定の補助記憶部
内に格納されているスタート・アップ・プログラムに含
まれる初期値解析処理手順について説明する。図9にお
いて、まず、初期化なし変数のRAM領域0展開処理ス
テップ901において、図9のRAM92に領域確保さ
れている、セグメント(1)生成処理ステップ703
(図7参照)によって配置された初期化なし変数の領域
に0が展開される。次いで、図9の初期化あり変数のR
AM領域初期値展開処理ステップ902においては、図
9のROM91から、セグメント(1)生成処理ステッ
プ702(図7参照)によって配置された初期化あり変
数の初期値が読み出され、図9のRAM92の初期化あ
り変数の領域に書き込まれる。これにより、RAMに対
する初期値配置が実行される。初期化なし変数のRAM
領域0展開処理ステップ901における初期化なし変数
に対する展開は、原始プログラム上においては初期値な
しであるが、実行時においては0が設定されることを表
わしており、初期値0の変数に対して、原始プログラム
上において初期化を指定しなければ、ROMに対する初
期値0配置を回避することができる。
内に格納されているスタート・アップ・プログラムに含
まれる初期値解析処理手順について説明する。図9にお
いて、まず、初期化なし変数のRAM領域0展開処理ス
テップ901において、図9のRAM92に領域確保さ
れている、セグメント(1)生成処理ステップ703
(図7参照)によって配置された初期化なし変数の領域
に0が展開される。次いで、図9の初期化あり変数のR
AM領域初期値展開処理ステップ902においては、図
9のROM91から、セグメント(1)生成処理ステッ
プ702(図7参照)によって配置された初期化あり変
数の初期値が読み出され、図9のRAM92の初期化あ
り変数の領域に書き込まれる。これにより、RAMに対
する初期値配置が実行される。初期化なし変数のRAM
領域0展開処理ステップ901における初期化なし変数
に対する展開は、原始プログラム上においては初期値な
しであるが、実行時においては0が設定されることを表
わしており、初期値0の変数に対して、原始プログラム
上において初期化を指定しなければ、ROMに対する初
期値0配置を回避することができる。
【0007】図10は、従来のROM化機能により生成
されたROMの初期値配置から、プログラムの実行によ
り、RAMに設定される初期値配置の簡単な具体例を示
す模式図である。図10において、原始プログラムA1
には、初期化なし変数として変数aa A05、初期化
あり変数として変数bb A06と変数cc A08が
定義されている。変数cc A08は、構造体宣言文s
truct A07によって宣言されているc−tbl
型の構造配列例である。指定された原始プログラムA1
はコンパイラ部A01に入力され、コンパイラ部A01
からはオブジェクトプログラムA2を出力される。この
オブジェクトプログラムA2は、スタート・アップ・プ
ログラムA3とともにリンカ部A02に入力され、リン
カ部A02からは実行可能プログラムA4が出力され
る。この時のコンパイラ部A01における初期値解析手
段の変数の処理手順の内容について、図7を参照して説
明する。
されたROMの初期値配置から、プログラムの実行によ
り、RAMに設定される初期値配置の簡単な具体例を示
す模式図である。図10において、原始プログラムA1
には、初期化なし変数として変数aa A05、初期化
あり変数として変数bb A06と変数cc A08が
定義されている。変数cc A08は、構造体宣言文s
truct A07によって宣言されているc−tbl
型の構造配列例である。指定された原始プログラムA1
はコンパイラ部A01に入力され、コンパイラ部A01
からはオブジェクトプログラムA2を出力される。この
オブジェクトプログラムA2は、スタート・アップ・プ
ログラムA3とともにリンカ部A02に入力され、リン
カ部A02からは実行可能プログラムA4が出力され
る。この時のコンパイラ部A01における初期値解析手
段の変数の処理手順の内容について、図7を参照して説
明する。
【0008】図7の初期値解析手段のフローチャートに
おいて、初期値有無判定処理ステップ701の変数の初
期値ありか否かの判定により、図10の変数aa A0
5が初期値なしの場合には、図7のセグメント(1)生
成処理ステップ703において、当該変数aa A05
が、RAMの領域確保のみとする初期値なし用のセグメ
ント(1)に配置される。また、初期値有無判定処理ス
テップ701の変数の初期値ありか否かの判定により、
図10の変数bb A06ならびに変数ccA08が初
期値ありの場合には、図7のセグメント(2)生成処理
ステップ702において、当該変数bb A06および
cc A08は、RAMの領域確保とROMへの初期値
配置とする初期化あり用のセグメント(2)に配置され
る。図10のオブジェクトプログラムA2に対して、変
数bb A06の初期値と変数cc A08の初期値
は、ROMに配置するデータとして出力され、リンカ部
A02によって実行可能プログラムA4が出力された後
に、ROM書き込み装置A03によってROM A5に
書き込まれる。変数bb A06の初期値はROM領域
A09に書き込まれ、変数ccA 08の初期値はRO
M領域A10に書き込まれる。このROM A5に書き
込まれた初期値は、プログラム実行A04と同時にスタ
ート・アップ・プログラムA3によって、RAM A6
に展開される。この時に展開される初期値の処理ステッ
プの内容を図9を参照して説明する。
おいて、初期値有無判定処理ステップ701の変数の初
期値ありか否かの判定により、図10の変数aa A0
5が初期値なしの場合には、図7のセグメント(1)生
成処理ステップ703において、当該変数aa A05
が、RAMの領域確保のみとする初期値なし用のセグメ
ント(1)に配置される。また、初期値有無判定処理ス
テップ701の変数の初期値ありか否かの判定により、
図10の変数bb A06ならびに変数ccA08が初
期値ありの場合には、図7のセグメント(2)生成処理
ステップ702において、当該変数bb A06および
cc A08は、RAMの領域確保とROMへの初期値
配置とする初期化あり用のセグメント(2)に配置され
る。図10のオブジェクトプログラムA2に対して、変
数bb A06の初期値と変数cc A08の初期値
は、ROMに配置するデータとして出力され、リンカ部
A02によって実行可能プログラムA4が出力された後
に、ROM書き込み装置A03によってROM A5に
書き込まれる。変数bb A06の初期値はROM領域
A09に書き込まれ、変数ccA 08の初期値はRO
M領域A10に書き込まれる。このROM A5に書き
込まれた初期値は、プログラム実行A04と同時にスタ
ート・アップ・プログラムA3によって、RAM A6
に展開される。この時に展開される初期値の処理ステッ
プの内容を図9を参照して説明する。
【0009】図9のスタート・アップ・プログラムの初
期値展開手段のフローチャートにおいて、初期化なし変
数のRAM領域0展開処理ステップ901において、図
10に示される変数aa A05のRAM(RAM9
2)領域A11に0が展開される。次に、図9の初期化
あり変数のRAM領域初期値展開処理ステップ902に
おいて、図10のROM(ROM91)領域A09に配
置されている初期値は、変数bb A06のRAM(R
AM92)領域A12に展開され、ROM(ROM9
1)領域A10に配置されている初期値は、変数cc
A08のRAM(RAM92)領域A13に展開され
る。そして、初期値の展開処理が終了する。
期値展開手段のフローチャートにおいて、初期化なし変
数のRAM領域0展開処理ステップ901において、図
10に示される変数aa A05のRAM(RAM9
2)領域A11に0が展開される。次に、図9の初期化
あり変数のRAM領域初期値展開処理ステップ902に
おいて、図10のROM(ROM91)領域A09に配
置されている初期値は、変数bb A06のRAM(R
AM92)領域A12に展開され、ROM(ROM9
1)領域A10に配置されている初期値は、変数cc
A08のRAM(RAM92)領域A13に展開され
る。そして、初期値の展開処理が終了する。
【0010】このように、初期化なし変数である変数a
a A05の初期値0は、ROM91に配置されること
がなく、プログラム実行A04と同時にスタート・アッ
プ・プログラムA3によって、RAM(RAM92)領
域A11に0を展開することにより、ROM A5の使
用領域を抑えることができる。例えば、初期化あり変数
である変数bb A06の初期値0の記述を省略すれ
ば、ROM(ROM91)領域A09は使用することな
く、プログラム実行A04と同時にスタート・アップ・
プログラムA3によって、RAM(RAM92)領域A
12に0が展開される。しかし、変数cc A08のよ
うに構造体配列の場合には、あるメンバの初期値指定を
省略することができないため、ROM(ROM91)領
域A10に見られるように、全て初期値0のメンバもR
OM A5に置かれることになり、ROM A5に同一
の値を持つデータが多く存在することになる。変数cc
A08の初期値配置に使用されるROM(ROM9
1)領域は、2メンバ×100要素の200領域であ
り、そのうち100領域は同一データである。
a A05の初期値0は、ROM91に配置されること
がなく、プログラム実行A04と同時にスタート・アッ
プ・プログラムA3によって、RAM(RAM92)領
域A11に0を展開することにより、ROM A5の使
用領域を抑えることができる。例えば、初期化あり変数
である変数bb A06の初期値0の記述を省略すれ
ば、ROM(ROM91)領域A09は使用することな
く、プログラム実行A04と同時にスタート・アップ・
プログラムA3によって、RAM(RAM92)領域A
12に0が展開される。しかし、変数cc A08のよ
うに構造体配列の場合には、あるメンバの初期値指定を
省略することができないため、ROM(ROM91)領
域A10に見られるように、全て初期値0のメンバもR
OM A5に置かれることになり、ROM A5に同一
の値を持つデータが多く存在することになる。変数cc
A08の初期値配置に使用されるROM(ROM9
1)領域は、2メンバ×100要素の200領域であ
り、そのうち100領域は同一データである。
【0011】なお、コンパイル方式のROM化機能に関
する参考文献としては、『インタフェース '93−6
CQ出版』の「特集 Cによる組み込みソフト開発とO
OP」に記載されている「組み込み制御システムのため
のCプログラミング・テクニック」(P80〜P12
5)と、『トランジスタ技術SPECIAL No.2
4CQ出版』の「特集 Cによる組み込み機器用プログ
ラミング」に記載されている「第5章 C言語の実力を
考えてみる」(P38〜P44)、「第10章MS−C
をROM化する方法」(P122〜P138)を参照し
ている。
する参考文献としては、『インタフェース '93−6
CQ出版』の「特集 Cによる組み込みソフト開発とO
OP」に記載されている「組み込み制御システムのため
のCプログラミング・テクニック」(P80〜P12
5)と、『トランジスタ技術SPECIAL No.2
4CQ出版』の「特集 Cによる組み込み機器用プログ
ラミング」に記載されている「第5章 C言語の実力を
考えてみる」(P38〜P44)、「第10章MS−C
をROM化する方法」(P122〜P138)を参照し
ている。
【0012】
【発明が解決しようとする課題】上述した従来のコンパ
イル方式においては、そのROM化機能は、構造体配列
の初期化において、あるメンバの初期値が全要素に亘り
同一値である場合には、大量の同一データがROMに配
置されることになり、使用するデータ量の増加する状態
となり、これに対応して、メモリの物理的コスト高が上
昇するという欠点がある。
イル方式においては、そのROM化機能は、構造体配列
の初期化において、あるメンバの初期値が全要素に亘り
同一値である場合には、大量の同一データがROMに配
置されることになり、使用するデータ量の増加する状態
となり、これに対応して、メモリの物理的コスト高が上
昇するという欠点がある。
【0013】本発明の目的は上記の欠点を解決し、大量
の同一データがROM内に配置されることを抑制し、各
データを配置するROM領域を縮小することにより、使
用するデータ量の増加を排除し、メモリの物理的コスト
を低減することができるコンパイル方式を供することに
ある。
の同一データがROM内に配置されることを抑制し、各
データを配置するROM領域を縮小することにより、使
用するデータ量の増加を排除し、メモリの物理的コスト
を低減することができるコンパイル方式を供することに
ある。
【0014】
【課題を解決するための手段】本発明のコンパイル方式
は、原始プログラム、オブジェクトプログラム、スター
ト・アップ・プログラムおよび実行可能プログラムを格
納する補助記憶部と、当該補助記憶部より読み出される
原始プログラムから、オブジェクトプログラムを生成し
て前記補助記憶部に格納するするコンパイラ部と、前記
補助記憶部より読み出されるオブジェクトプログラムと
スタート・アップ・プログラムとを入力して、前記実行
可能プログラムを生成して前記補助記憶部に格納するリ
ンカ部とを備えて構成され、所定のRAMおよびROM
を有するプロセッサに対し、前記実行可能プログラムを
供給するコンパイル方式において、前記コンパイラ部
が、前記補助記憶部より読み出される前記原始プログラ
ムを入力して、当該原始プログラムを字句に分解する字
句解析手段と、前記字句解析手段において字句解析され
た結果を受けて所定の構文を構築し、当該構文を認識す
る構文解析手段と、前記構文解析手段により構文解析さ
れた結果を受けて変数の定義文を抽出し、当該定義文よ
り、初期値なし変数、初期値あり変数、およびメンバが
一定の初期値を持つ構造体配列の変数をそれぞれ認識
し、これらの各変数に対応して、それぞれ初期値なし変
数の属性を持つセグメント、初期値あり変数の属性を持
つセグメント、およびメンバの一定の初期値を持つ構造
体配列の変数の属性を持つセグメントに配置する初期値
解析手段と、前記初期値解析手段により配置される変数
のセグメントをコード化し、前記オブジェクトプログラ
ムを生成して前記補助記憶部に格納するするコード生成
手段とを備えて構成されることを特徴としている。
は、原始プログラム、オブジェクトプログラム、スター
ト・アップ・プログラムおよび実行可能プログラムを格
納する補助記憶部と、当該補助記憶部より読み出される
原始プログラムから、オブジェクトプログラムを生成し
て前記補助記憶部に格納するするコンパイラ部と、前記
補助記憶部より読み出されるオブジェクトプログラムと
スタート・アップ・プログラムとを入力して、前記実行
可能プログラムを生成して前記補助記憶部に格納するリ
ンカ部とを備えて構成され、所定のRAMおよびROM
を有するプロセッサに対し、前記実行可能プログラムを
供給するコンパイル方式において、前記コンパイラ部
が、前記補助記憶部より読み出される前記原始プログラ
ムを入力して、当該原始プログラムを字句に分解する字
句解析手段と、前記字句解析手段において字句解析され
た結果を受けて所定の構文を構築し、当該構文を認識す
る構文解析手段と、前記構文解析手段により構文解析さ
れた結果を受けて変数の定義文を抽出し、当該定義文よ
り、初期値なし変数、初期値あり変数、およびメンバが
一定の初期値を持つ構造体配列の変数をそれぞれ認識
し、これらの各変数に対応して、それぞれ初期値なし変
数の属性を持つセグメント、初期値あり変数の属性を持
つセグメント、およびメンバの一定の初期値を持つ構造
体配列の変数の属性を持つセグメントに配置する初期値
解析手段と、前記初期値解析手段により配置される変数
のセグメントをコード化し、前記オブジェクトプログラ
ムを生成して前記補助記憶部に格納するするコード生成
手段とを備えて構成されることを特徴としている。
【0015】なお、前記補助記憶部により読み出され
て、前記リンカ部に入力されるスタート・アップ・プロ
グラムとしては、前記ROMに配置予定の初期値を、前
記RAMに配置予定の変数の番地に設定するように機能
する初期値設定処理手順を少なくとも有するスタート・
アップ処理手順が含まれるスタート・アップ・プログラ
ムを対象として動作するようにしてもよい。
て、前記リンカ部に入力されるスタート・アップ・プロ
グラムとしては、前記ROMに配置予定の初期値を、前
記RAMに配置予定の変数の番地に設定するように機能
する初期値設定処理手順を少なくとも有するスタート・
アップ処理手順が含まれるスタート・アップ・プログラ
ムを対象として動作するようにしてもよい。
【0016】また、前記スタート・アップ・プログラム
内のスタート・アップ処理手順に含まれる前記初期値設
定処理手順としては、前記初期値なし変数の配置を予定
する前記RAM領域に対して0を設定する処理手順と、
前記ROMから、当該ROM内に予め格納されている初
期化あり変数の初期値を読み出し、当該初期化あり変数
の初期値を前記RAM領域に書き込む処理手順と、前記
ROMから、当該ROM内に予め格納されているメンバ
が一定の初期値を持つ構造体配列の初期値を読み出し、
当該メンバが一定の初期値を持つ構造体配列の初期値を
前記RAM領域に書き込む処理手順とを有する初期値設
定処理手順が含まれるスタート・アップ・プログラムを
対象としてもよい。
内のスタート・アップ処理手順に含まれる前記初期値設
定処理手順としては、前記初期値なし変数の配置を予定
する前記RAM領域に対して0を設定する処理手順と、
前記ROMから、当該ROM内に予め格納されている初
期化あり変数の初期値を読み出し、当該初期化あり変数
の初期値を前記RAM領域に書き込む処理手順と、前記
ROMから、当該ROM内に予め格納されているメンバ
が一定の初期値を持つ構造体配列の初期値を読み出し、
当該メンバが一定の初期値を持つ構造体配列の初期値を
前記RAM領域に書き込む処理手順とを有する初期値設
定処理手順が含まれるスタート・アップ・プログラムを
対象としてもよい。
【0017】
【実施例】以下に本発明を、図面を参照して説明する。
【0018】図1は本発明の第1および第2の実施例に
共通するシステム構成を示すブロック図である。図1に
示されるように、本実施例は、字句解析手段101、構
文解析手段102、初期値解析手段103およびコード
生成手段104を含むコンパイラ部13と、連結手段1
05、配置手段106、未解決コード処理手段107お
よび出力手段108を含むリンカ部14により形成され
る制御部11と、原始プログラム109、オブジェクト
プログラム110、初期値展開処理手順を含むスタート
・アップ・プログラム111およ実行可能プログラム1
12が格納される補助記憶部12とを備えて構成され
る。
共通するシステム構成を示すブロック図である。図1に
示されるように、本実施例は、字句解析手段101、構
文解析手段102、初期値解析手段103およびコード
生成手段104を含むコンパイラ部13と、連結手段1
05、配置手段106、未解決コード処理手段107お
よび出力手段108を含むリンカ部14により形成され
る制御部11と、原始プログラム109、オブジェクト
プログラム110、初期値展開処理手順を含むスタート
・アップ・プログラム111およ実行可能プログラム1
12が格納される補助記憶部12とを備えて構成され
る。
【0019】図1において、コンパイラ部13に含まれ
る字句解析手段101においては、補助記憶部109よ
り読出された原始プログラム109が字句に分解されて
字句解析が行われる。構文解析手段102においては、
字句解析手段101において字句解析された結果を受け
て、構文が構築されて当該構文が認識される。そして、
初期値解析手段103においては、構文解析手段102
において構文解析された結果を受けて変数の定義文が抽
出され、初期値なし変数、初期値あり変数、およびメン
バが一定の初期値を持つ構造体配列の変数が認識され
て、それぞれ初期値なし変数の属性を持つセグメント
(1)、初期値あり変数の属性を持つセグメント
(2)、およびメンバの一定の初期値を持つ構造体配列
の変数の属性を持つセグメント(3)に配置される。コ
ード生成手段104においては、初期値解析手段103
によって配置された前記変数のセグメントがコード化さ
れて、オブジェクトプログラム110が生成されて出力
され、補助記憶部12に入力されて格納される。
る字句解析手段101においては、補助記憶部109よ
り読出された原始プログラム109が字句に分解されて
字句解析が行われる。構文解析手段102においては、
字句解析手段101において字句解析された結果を受け
て、構文が構築されて当該構文が認識される。そして、
初期値解析手段103においては、構文解析手段102
において構文解析された結果を受けて変数の定義文が抽
出され、初期値なし変数、初期値あり変数、およびメン
バが一定の初期値を持つ構造体配列の変数が認識され
て、それぞれ初期値なし変数の属性を持つセグメント
(1)、初期値あり変数の属性を持つセグメント
(2)、およびメンバの一定の初期値を持つ構造体配列
の変数の属性を持つセグメント(3)に配置される。コ
ード生成手段104においては、初期値解析手段103
によって配置された前記変数のセグメントがコード化さ
れて、オブジェクトプログラム110が生成されて出力
され、補助記憶部12に入力されて格納される。
【0020】リンカ部14に含まれる連結手段105に
おいては、補助記憶部12より読出される複数のオブジ
ェクトプログラム110および初期値展開処理手順を含
むスタート・アップ・プログラム111の入力を受け
て、これらのの二つのプログラムが連結されて出力され
る。配置手段106においては、連結手段105におい
て連結された各プログラム内にあるセグメントの配置が
行われる。そして、未解決コード処理手段107におい
ては、ジャンプアドレスなどの未解決コードが全て解決
され、原始プログラムに対応する実行可能プログラムが
生成されて、出力手段108を介して出力され補助記憶
部12に格納される。
おいては、補助記憶部12より読出される複数のオブジ
ェクトプログラム110および初期値展開処理手順を含
むスタート・アップ・プログラム111の入力を受け
て、これらのの二つのプログラムが連結されて出力され
る。配置手段106においては、連結手段105におい
て連結された各プログラム内にあるセグメントの配置が
行われる。そして、未解決コード処理手段107におい
ては、ジャンプアドレスなどの未解決コードが全て解決
され、原始プログラムに対応する実行可能プログラムが
生成されて、出力手段108を介して出力され補助記憶
部12に格納される。
【0021】次に、本発明の第1および第2の各実施例
について、それぞれ図2および図3を参照して、本発明
の特徴とする初期解析手段103における処理手順の内
容につき説明する。
について、それぞれ図2および図3を参照して、本発明
の特徴とする初期解析手段103における処理手順の内
容につき説明する。
【0022】図2は、前記第1の実施例における初期解
析手段103の処理手順を示すフローチャートである。
図2において、まず、初期値有無判定処理ステップ20
1おいては、原始プログラム109内に記述されている
変数の定義文に対して、初期値ありか否かの判定が行わ
れる。この判定処理において初期値ありの場合には、構
造体配列判定処理ステップ202において、定義された
変数が構造体配列か否かの判定が行われる。この判定処
理において構造体配列である場合には、構造体配列の開
始番地メンバ初期値退避処理ステップ203およびメン
バ数退避処理ステップ204において、最初の番地の各
メンバの初期値と構造体のメンバ数が退避される。次
に、構造体配列のメンバ初期値退避処理ステップ205
において、次の番地の各メンバの初期値が退避され、メ
ンバの初期値比較処理ステップ206においては、構造
体配列の開始番地メンバ初期値退避処理ステップ203
において退避済みの各メンバの初期値と、構造体配列の
メンバ初期値退避処理ステップ205において退避済み
の各メンバの初期値とを比較して、一致しているか否か
を判定される。全初期値が一致しているときには、全要
素処理済み判定処理ステップ208に移行する。また一
致していないメンバの初期値が存在するときは、一定値
を有していないメンバ数退避処理ステップ207におい
て、一致していないメンバを一定値の初期値を有してい
ないメンバとし、既に一定値を有していないメンバ数を
退避させ、全要素処理済み判定処理208に移行する。
全要素処理済み判定処理ステップ208において、構造
体配列の最後の要素までまだ処理してなければ、構造体
配列のメンバ初期値退避処理205に戻る。最後の要素
が処理済みである場合には、繰り返し処理を抜け、メン
バが一定の初期値を持つ構造体判定処理ステップ209
において、一定値を有していないメンバ数退避処理ステ
ップ207において得られた一定値を有していないメン
バ数が0であるか否かを判定することにより、一定の初
期値を持ったメンバが存在するか否かを判定される。ま
た、一定値を有していないメンバ数が0でない場合、す
なわち同一の初期値を持ったメンバが存在するときに
は、セグメント(3)生成処理ステップ210が行われ
る。セグメント(3)生成処理ステップ210において
は、構造体配列は、RAMの領域確保とROMへの初期
値配置とする一定の初期値を持つ構造体配列のセグメン
ト(3)に配置される。この時のROMへの配置につい
ては、後に図4に示されているセグメント(3)のセグ
メントデータ形式において説明する。
析手段103の処理手順を示すフローチャートである。
図2において、まず、初期値有無判定処理ステップ20
1おいては、原始プログラム109内に記述されている
変数の定義文に対して、初期値ありか否かの判定が行わ
れる。この判定処理において初期値ありの場合には、構
造体配列判定処理ステップ202において、定義された
変数が構造体配列か否かの判定が行われる。この判定処
理において構造体配列である場合には、構造体配列の開
始番地メンバ初期値退避処理ステップ203およびメン
バ数退避処理ステップ204において、最初の番地の各
メンバの初期値と構造体のメンバ数が退避される。次
に、構造体配列のメンバ初期値退避処理ステップ205
において、次の番地の各メンバの初期値が退避され、メ
ンバの初期値比較処理ステップ206においては、構造
体配列の開始番地メンバ初期値退避処理ステップ203
において退避済みの各メンバの初期値と、構造体配列の
メンバ初期値退避処理ステップ205において退避済み
の各メンバの初期値とを比較して、一致しているか否か
を判定される。全初期値が一致しているときには、全要
素処理済み判定処理ステップ208に移行する。また一
致していないメンバの初期値が存在するときは、一定値
を有していないメンバ数退避処理ステップ207におい
て、一致していないメンバを一定値の初期値を有してい
ないメンバとし、既に一定値を有していないメンバ数を
退避させ、全要素処理済み判定処理208に移行する。
全要素処理済み判定処理ステップ208において、構造
体配列の最後の要素までまだ処理してなければ、構造体
配列のメンバ初期値退避処理205に戻る。最後の要素
が処理済みである場合には、繰り返し処理を抜け、メン
バが一定の初期値を持つ構造体判定処理ステップ209
において、一定値を有していないメンバ数退避処理ステ
ップ207において得られた一定値を有していないメン
バ数が0であるか否かを判定することにより、一定の初
期値を持ったメンバが存在するか否かを判定される。ま
た、一定値を有していないメンバ数が0でない場合、す
なわち同一の初期値を持ったメンバが存在するときに
は、セグメント(3)生成処理ステップ210が行われ
る。セグメント(3)生成処理ステップ210において
は、構造体配列は、RAMの領域確保とROMへの初期
値配置とする一定の初期値を持つ構造体配列のセグメン
ト(3)に配置される。この時のROMへの配置につい
ては、後に図4に示されているセグメント(3)のセグ
メントデータ形式において説明する。
【0023】図2のメンバが一定の初期値を持つ構造体
判定処理ステップ209において、判定結果が0である
場合には、即ち、同一の初期値を持ったメンバが存在し
ないときには、セグメント(2)生成処理211が行わ
れる。セグメント(2)生成処理211においては、構
造体配列は、RAMの領域確保とROMへの初期値配置
とする初期化ありのセグメント(2)に配置される。こ
の時のROMへの配置は、図8に示される従来のセグメ
ントデータ形式におけるセグメント(2)801と同じ
である。図2に示される構造体配列判定処理ステップ2
02における判定が構造体配列でない場合には、セグメ
ント(2)生成処理ステップ211が行われる。初期値
有無判定処理ステップ201における判定が初期値なし
の場合には、セグメント(1)生成処理ステップ212
において、その変数が、RAMの領域確保のみとする初
期化なしのセグメント(1)に配置される。
判定処理ステップ209において、判定結果が0である
場合には、即ち、同一の初期値を持ったメンバが存在し
ないときには、セグメント(2)生成処理211が行わ
れる。セグメント(2)生成処理211においては、構
造体配列は、RAMの領域確保とROMへの初期値配置
とする初期化ありのセグメント(2)に配置される。こ
の時のROMへの配置は、図8に示される従来のセグメ
ントデータ形式におけるセグメント(2)801と同じ
である。図2に示される構造体配列判定処理ステップ2
02における判定が構造体配列でない場合には、セグメ
ント(2)生成処理ステップ211が行われる。初期値
有無判定処理ステップ201における判定が初期値なし
の場合には、セグメント(1)生成処理ステップ212
において、その変数が、RAMの領域確保のみとする初
期化なしのセグメント(1)に配置される。
【0024】図3は、前記第2の実施例における初期解
析手段103の処理手順を示すフローチャートである。
図3において、まず、初期値有無判定処理ステップ30
1おいては、原始プログラム109内に記述されている
変数の定義文に対して、初期値ありか否かの判定が行わ
れる。この判定処理において初期値ありの場合には、構
造体配列判定処理ステップ302において、定義された
変数が構造体配列か否かの判定が行われる。この判定処
理において構造体配列である場合には、構造体配列の開
始番地メンバ初期値退避処理ステップ303およびメン
バ数退避処理ステップ304において、最初の番地の各
メンバの初期値と構造体のメンバ数が退避される。次
に、全要素処理済み判定処理ステップ305において
は、構造体配列のメンバ初期値退避処理ステップ30
6、メンバの初期値比較処理ステップ307、一定値を
有していないメンバ数退避処理ステップ308を含む繰
返し処理判定の対象となる処理済み構造体配列の番地が
最終番地であるか否かが判定されて、最終番地となるま
で、構造体配列のメンバ初期値退避処理ステップ306
において、次の番地の各メンバの初期値が退避され、メ
ンバの初期値比較処理ステップ307において、構造体
配列の開始ば番地メンバ初期値退避処理ステップ303
において退避済みの各メンバの初期値と構造体配列のメ
ンバ初期値退避処理ステップ306において退避済みの
各メンバの初期値を比較し、一致しているか否かが判定
される。全初期値が一致している時には、全要素処理済
み判定処理305に戻る。また一致していないメンバの
初期値が存在する場合には、一定値を有していないメン
バ数退避処理ステップ308において、一致していない
メンバを一定の初期値を有していないメンバとし、既に
一定値を有していないメンバ数を退避させ、全要素処理
済み判定処理ステップ305に戻る。
析手段103の処理手順を示すフローチャートである。
図3において、まず、初期値有無判定処理ステップ30
1おいては、原始プログラム109内に記述されている
変数の定義文に対して、初期値ありか否かの判定が行わ
れる。この判定処理において初期値ありの場合には、構
造体配列判定処理ステップ302において、定義された
変数が構造体配列か否かの判定が行われる。この判定処
理において構造体配列である場合には、構造体配列の開
始番地メンバ初期値退避処理ステップ303およびメン
バ数退避処理ステップ304において、最初の番地の各
メンバの初期値と構造体のメンバ数が退避される。次
に、全要素処理済み判定処理ステップ305において
は、構造体配列のメンバ初期値退避処理ステップ30
6、メンバの初期値比較処理ステップ307、一定値を
有していないメンバ数退避処理ステップ308を含む繰
返し処理判定の対象となる処理済み構造体配列の番地が
最終番地であるか否かが判定されて、最終番地となるま
で、構造体配列のメンバ初期値退避処理ステップ306
において、次の番地の各メンバの初期値が退避され、メ
ンバの初期値比較処理ステップ307において、構造体
配列の開始ば番地メンバ初期値退避処理ステップ303
において退避済みの各メンバの初期値と構造体配列のメ
ンバ初期値退避処理ステップ306において退避済みの
各メンバの初期値を比較し、一致しているか否かが判定
される。全初期値が一致している時には、全要素処理済
み判定処理305に戻る。また一致していないメンバの
初期値が存在する場合には、一定値を有していないメン
バ数退避処理ステップ308において、一致していない
メンバを一定の初期値を有していないメンバとし、既に
一定値を有していないメンバ数を退避させ、全要素処理
済み判定処理ステップ305に戻る。
【0025】全要素処理済み判定処理305において最
終番地と判定された場合には、繰り返し処理を抜けて、
メンバが一定の初期値を持つ構造体判定処理ステップ3
09において、メンバ数退避処理ステップ304におい
て退避させたメンバ数と、一定値を有していないメンバ
数退避処理ステップ308において得られた一定値を有
していないメンバ数とを比較することにより、一定の初
期値を持ったメンバが存在するか否かが判定される。そ
して、一致していない場合、即ち、同一の初期値を持っ
たメンバが存在する場合において、その比較結果が異な
った結果である場合には、セグメント3生成処理310
において、構造体配列は、RAMの領域確保とROMへ
の初期値配置とする一定の初期値を持つ構造体配列のセ
グメント3に配置される。この時のROMへの配置につ
いては、後に図4に示しているセグメント(3)のセグ
メントデータ形式において説明する。また、メンバが一
定の初期値を持つ構造体判定処理ステップ309におけ
る比較結果が同じである場合、すなわち同一の初期値を
持ったメンバが存在しないときには、セグメント(2)
生成処理ステップ311において、その構造体配列は。
RAMの領域確保とROMへの初期値配置とする初期化
ありのセグメント(2)に配置される。この時のROM
への配置は、図8のセグメント(2)801に示す従来
のセグメントデータ形式の場合と同じである。図3の構
造体配列判定処理ステップ302における判定が構造体
配列でない場合には、セグメント(2)生成処理ステッ
プ311が行われ、また、初期値有無判定処理ステップ
301における判定が初期値なしの場合には、セグメン
ト(1)生成処理312において、その変数は、RAM
の領域確保のみとする初期化なしのセグメント(1)に
配置される。
終番地と判定された場合には、繰り返し処理を抜けて、
メンバが一定の初期値を持つ構造体判定処理ステップ3
09において、メンバ数退避処理ステップ304におい
て退避させたメンバ数と、一定値を有していないメンバ
数退避処理ステップ308において得られた一定値を有
していないメンバ数とを比較することにより、一定の初
期値を持ったメンバが存在するか否かが判定される。そ
して、一致していない場合、即ち、同一の初期値を持っ
たメンバが存在する場合において、その比較結果が異な
った結果である場合には、セグメント3生成処理310
において、構造体配列は、RAMの領域確保とROMへ
の初期値配置とする一定の初期値を持つ構造体配列のセ
グメント3に配置される。この時のROMへの配置につ
いては、後に図4に示しているセグメント(3)のセグ
メントデータ形式において説明する。また、メンバが一
定の初期値を持つ構造体判定処理ステップ309におけ
る比較結果が同じである場合、すなわち同一の初期値を
持ったメンバが存在しないときには、セグメント(2)
生成処理ステップ311において、その構造体配列は。
RAMの領域確保とROMへの初期値配置とする初期化
ありのセグメント(2)に配置される。この時のROM
への配置は、図8のセグメント(2)801に示す従来
のセグメントデータ形式の場合と同じである。図3の構
造体配列判定処理ステップ302における判定が構造体
配列でない場合には、セグメント(2)生成処理ステッ
プ311が行われ、また、初期値有無判定処理ステップ
301における判定が初期値なしの場合には、セグメン
ト(1)生成処理312において、その変数は、RAM
の領域確保のみとする初期化なしのセグメント(1)に
配置される。
【0026】図4には、メンバが一定の初期値を持つ構
造体配列のセグメントデータ形式が示される。図4にお
いて、構造体配列の初期値405に対しては、メンバ数
402、配列要素数403、および配列[0]にのみ初
期値格納するメンバ404を含む3つの情報が付加され
る。メンバ数402は、構造体配列の型となる構造体宣
言文structによって宣言された型のメンバ数であ
る。配列要素数403は、構造体配列の配列要素数であ
る。配列[0]にのみ初期値格納するメンバ404は、
構造体配列のあるメンバの初期値が全ての要素において
同一値である条件を満たしているメンバの位置を指す。
これらの情報は、条件を満たすメンバが複数存在した場
合においても可能とするため、ビット情報として扱われ
る。例えば、第1のメンバのみが条件を満たしている場
合には、ビット0のみ1とし、他のビットは0とする。
第1のメンバと第3のメンバが条件を満たしている場合
には、ビット0とビット2を1とし、他のビットは0と
する。構造体配列の初期値405においては、構造体配
列の各メンバの初期値が、要素単位毎に配置されている
が、配列[0]にのみ初期値格納するメンバ404で条
件を満たし、対象となったメンバは、初期値が配列0番
地にのみ配置され、以降の配列にはその初期値は配置さ
れない。これにより、ROMへの大量の同一データ配置
が抑制され、スタート・アップ・プログラムの初期値展
開処理において、これらの3つの付加情報から全ての初
期値データがRAMに復元される。
造体配列のセグメントデータ形式が示される。図4にお
いて、構造体配列の初期値405に対しては、メンバ数
402、配列要素数403、および配列[0]にのみ初
期値格納するメンバ404を含む3つの情報が付加され
る。メンバ数402は、構造体配列の型となる構造体宣
言文structによって宣言された型のメンバ数であ
る。配列要素数403は、構造体配列の配列要素数であ
る。配列[0]にのみ初期値格納するメンバ404は、
構造体配列のあるメンバの初期値が全ての要素において
同一値である条件を満たしているメンバの位置を指す。
これらの情報は、条件を満たすメンバが複数存在した場
合においても可能とするため、ビット情報として扱われ
る。例えば、第1のメンバのみが条件を満たしている場
合には、ビット0のみ1とし、他のビットは0とする。
第1のメンバと第3のメンバが条件を満たしている場合
には、ビット0とビット2を1とし、他のビットは0と
する。構造体配列の初期値405においては、構造体配
列の各メンバの初期値が、要素単位毎に配置されている
が、配列[0]にのみ初期値格納するメンバ404で条
件を満たし、対象となったメンバは、初期値が配列0番
地にのみ配置され、以降の配列にはその初期値は配置さ
れない。これにより、ROMへの大量の同一データ配置
が抑制され、スタート・アップ・プログラムの初期値展
開処理において、これらの3つの付加情報から全ての初
期値データがRAMに復元される。
【0027】図5にスタート・アップ・プログラムの初
期値展開処理のフローチャートを示す。図5において、
まず、初期化なし変数のRAM領域0展開処理ステップ
501において、RAM52にある図2のセグメント
(1)生成処理212によって配置された初期化なし変
数の領域に0が展開かれ、図5の初期化あり変数のRA
M領域初期値展開処理ステップ502おいて、ROM5
1から、図2のセグメント(2)生成処理211によっ
て配置された図5の初期化あり変数の初期値515が読
み出され、RAM52の初期化あり変数の領域に書き込
まれる。次に、付加情報の読み込み処理ステップ503
において、メンバ数516、配列要素数517、および
配列[0]にのみ初期値格納するメンバ518の3つの
付加情報が読み込まれ、配列[0]判定処理504ステ
ップにおいては、次に読み込む構造体配列の初期値51
9のデータが、構造体配列の0番地の初期値か否かが判
定される。この判定の結果、0番地の初期値である場合
には、配列[0]のメンバからの初期値読み込み処理ス
テップ505において、その構造体配列の0番地にある
1つのメンバの初期値519が読み込まれる。次に、配
列[0]にのみ初期値格納するメンバ判定処理ステップ
506において、配列[0]のメンバからの初期値読み
込み処理ステップ505において読み込まれた初期値の
メンバが、配列[0]にのみ初期値格納するメンバ51
8に存在するか否かが判定され、存在する場合には、配
列[0]にのみ初期値格納するメンバの初期値保存処理
ステップ507において、読み込まれたメンバの初期値
を配列[0]にのみ初期値格納するメンバの初期値保存
変数514に退避させ、次の初期値のRAM出力処理ス
テップ508が行われる。また、存在しない場合には、
初期値のRAM出力処理ステップ508において、読み
込まれたメンバの初期値がRAM52の構造体配列の領
域に書き込まれる。次に、1要素全メンバ終了判定処理
ステップ509において、構造体配列1要素の全メンバ
の初期値展開が終了したか否かが判定され、終了でない
場合には、配列[0]判定処理ステップ504に戻り、
次のメンバの初期値展開に移る。そして、1要素の全メ
ンバの初期値展開が終了するまで繰り返して行われる。
そして、1要素全メンバ終了判定処理ステップ509に
おいて終了の場合には、さらに全要素終了判定処理ステ
ップ510において、構造体配列の全要素の初期値展開
が終了したか否かが判定されて、終了でない場合には、
配列[0]判定処理ステップ504に戻り、次の番地の
初期値展開に移り、構造体配列の全要素の初期値展開が
終了するまで処理が繰り返される。また終了である場合
には、スタート・アップ・プログラムの初期値展開処理
における初期値データのRAMへの展開処理を終了す
る。配列[0]判定処理ステップ504における判定の
結果が0番地の初期値でない場合には、配列[0]にの
み初期値格納するメンバ判定処理ステップ511におい
て、次に読み込まれる初期値のメンバが、配列[0]に
のみ初期値格納するメンバ518に存在するか否かが判
定され、存在する場合には、配列[0]にのみ初期値格
納するメンバの初期値取得処理512において、配列
[0]にのみ初期値格納するメンバの初期値保存変数5
14から対応するメンバの初期値が読み込まれ、初期値
のRAM出力処理ステップ508に戻る。配列[0]に
のみ初期値格納するメンバ判定処理ステップ511にお
いて、次に読み込まれる初期値のメンバが存在しない場
合には、配列のメンバからの初期値読み込み処理ステッ
プ513において、構造体配列の次の1メンバの初期値
519が読み込まれ、初期値のRAM出力処理ステップ
508に戻る。これによって、RAMへの初期値配置が
行われる。
期値展開処理のフローチャートを示す。図5において、
まず、初期化なし変数のRAM領域0展開処理ステップ
501において、RAM52にある図2のセグメント
(1)生成処理212によって配置された初期化なし変
数の領域に0が展開かれ、図5の初期化あり変数のRA
M領域初期値展開処理ステップ502おいて、ROM5
1から、図2のセグメント(2)生成処理211によっ
て配置された図5の初期化あり変数の初期値515が読
み出され、RAM52の初期化あり変数の領域に書き込
まれる。次に、付加情報の読み込み処理ステップ503
において、メンバ数516、配列要素数517、および
配列[0]にのみ初期値格納するメンバ518の3つの
付加情報が読み込まれ、配列[0]判定処理504ステ
ップにおいては、次に読み込む構造体配列の初期値51
9のデータが、構造体配列の0番地の初期値か否かが判
定される。この判定の結果、0番地の初期値である場合
には、配列[0]のメンバからの初期値読み込み処理ス
テップ505において、その構造体配列の0番地にある
1つのメンバの初期値519が読み込まれる。次に、配
列[0]にのみ初期値格納するメンバ判定処理ステップ
506において、配列[0]のメンバからの初期値読み
込み処理ステップ505において読み込まれた初期値の
メンバが、配列[0]にのみ初期値格納するメンバ51
8に存在するか否かが判定され、存在する場合には、配
列[0]にのみ初期値格納するメンバの初期値保存処理
ステップ507において、読み込まれたメンバの初期値
を配列[0]にのみ初期値格納するメンバの初期値保存
変数514に退避させ、次の初期値のRAM出力処理ス
テップ508が行われる。また、存在しない場合には、
初期値のRAM出力処理ステップ508において、読み
込まれたメンバの初期値がRAM52の構造体配列の領
域に書き込まれる。次に、1要素全メンバ終了判定処理
ステップ509において、構造体配列1要素の全メンバ
の初期値展開が終了したか否かが判定され、終了でない
場合には、配列[0]判定処理ステップ504に戻り、
次のメンバの初期値展開に移る。そして、1要素の全メ
ンバの初期値展開が終了するまで繰り返して行われる。
そして、1要素全メンバ終了判定処理ステップ509に
おいて終了の場合には、さらに全要素終了判定処理ステ
ップ510において、構造体配列の全要素の初期値展開
が終了したか否かが判定されて、終了でない場合には、
配列[0]判定処理ステップ504に戻り、次の番地の
初期値展開に移り、構造体配列の全要素の初期値展開が
終了するまで処理が繰り返される。また終了である場合
には、スタート・アップ・プログラムの初期値展開処理
における初期値データのRAMへの展開処理を終了す
る。配列[0]判定処理ステップ504における判定の
結果が0番地の初期値でない場合には、配列[0]にの
み初期値格納するメンバ判定処理ステップ511におい
て、次に読み込まれる初期値のメンバが、配列[0]に
のみ初期値格納するメンバ518に存在するか否かが判
定され、存在する場合には、配列[0]にのみ初期値格
納するメンバの初期値取得処理512において、配列
[0]にのみ初期値格納するメンバの初期値保存変数5
14から対応するメンバの初期値が読み込まれ、初期値
のRAM出力処理ステップ508に戻る。配列[0]に
のみ初期値格納するメンバ判定処理ステップ511にお
いて、次に読み込まれる初期値のメンバが存在しない場
合には、配列のメンバからの初期値読み込み処理ステッ
プ513において、構造体配列の次の1メンバの初期値
519が読み込まれ、初期値のRAM出力処理ステップ
508に戻る。これによって、RAMへの初期値配置が
行われる。
【0028】図6は、本発明のROM化機能により生成
されたROMの初期値配置から、プログラムの実行によ
り、RAMに設定される初期値配置の簡単な具体例を示
す模式図である。
されたROMの初期値配置から、プログラムの実行によ
り、RAMに設定される初期値配置の簡単な具体例を示
す模式図である。
【0029】図6において、原始プログラム61に、初
期化なし変数として変数aa 605が定義され、初期
化あり変数として変数bb 606と変数cc 608
が定義されている。変数cc 608は、構造体宣言文
struct607によって宣言されているc−tbl
型の構造体配列である。指定された原始プログラム61
はコンパイラ部601に入力され、オブジェクトプログ
ラム62が出力される。この作成されたオブジェクトプ
ログラム62とスタート・アップ・プログラム63はリ
ンカ部602に入力されて、実行可能プログラム64が
出力される。この時のコンパイラ部601における初期
値解析手段の変数の処理ステップを、図2を参照して説
明する。
期化なし変数として変数aa 605が定義され、初期
化あり変数として変数bb 606と変数cc 608
が定義されている。変数cc 608は、構造体宣言文
struct607によって宣言されているc−tbl
型の構造体配列である。指定された原始プログラム61
はコンパイラ部601に入力され、オブジェクトプログ
ラム62が出力される。この作成されたオブジェクトプ
ログラム62とスタート・アップ・プログラム63はリ
ンカ部602に入力されて、実行可能プログラム64が
出力される。この時のコンパイラ部601における初期
値解析手段の変数の処理ステップを、図2を参照して説
明する。
【0030】図2において、初期値有無判定処理ステッ
プ201において変数の初期値ありか否かが判定され
て、図6の変数aa 605は初期値なしで、図2のセ
グメント(1)生成処理ステップ212に進み、その変
数のRAMの領域確保のみとする初期化なしのセグメン
ト(1)に配置される。初期値有無判定処理ステップ2
01においては変数の初期値ありか否かが判定されて、
図6の変数bb 606が初期値ありの場合には、図2
の構造体配列判定処理ステップ202へ進み、構造体配
列か否かの判定処理において、図6の変数bb 606
は構造体配列ではないので、図2のセグメント(2)生
成処理211に進み、その変数のRAMの領域確保とR
OMへの初期値配置とする初期化ありのセグメント
(2)に配置される。初期値有無判定処理ステップ20
1における変数の初期値ありか否かが判定されて、図6
の変数cc 608は初期値ありで、図2の構造体配列
判定処理ステップ202に進み、構造体配列か否かの判
定処理において、図6の変数cc608は構造体配列で
あるから、構造体配列の開始番地メンバ初期値退避処理
ステップ203に進む。構造体配列の開始番地メンバ初
期値退避処理ステップ203において、cc[0]のメ
ンバc−valの初期値1と、cc[0]のメンバc−
flgの初期値0を退避させ、メンバ数退避処理ステッ
プ204において、構造体のメンバ数2を退避させる。
次に、構造体配列のメンバ初期値退避処理ステップ20
5において、次の番地のcc[1]のメンバc−val
の初期値2とcc[1]のメンバc−flgの初期値0
を退避させ、メンバの初期値比較処理ステップ206に
おいて、構造体配列の開始番地メンバ初期値退避処理ス
テップ203で退避済みの各メンバの初期値と、構造体
配列のメンバ初期値退避処理ステップ205で退避済み
の各メンバの初期値とを比較して、一致しているか否か
が判定される。この判定の結果において、cc[0]の
メンバc−valの初期値1で、cc[1]のメンバc
−valの初期値2であり、両者の初期値は一致してい
ないため、一定値を有していないメンバ数退避処理ステ
ップ207において、一定値を有していないメンバ数と
して1を退避させ、全要素処理済み判定処理ステップ2
08が実行される。全要素処理済み判定処理ステップ2
08においては、まだ最終番地の要素まで処理が行われ
ていないので、構造体配列のメンバ初期値退避処理ステ
ップ205に戻る。そして、図6に示される変数cc6
08の要素は100個存在するので、100番地の処理
終了済みの判定結果となるまで処理は繰返して行われ
る。この繰返し処理の終了後において、メンバが一定の
初期値を持つ構造体判定処理ステップ209において、
一定値を有していないメンバ数退避処理ステップ207
において得られた一定値を有していないメンバ数が0か
否かが判定される。この判定処理においては、一定値を
有していないメンバ数は1であるから、セグメント
(3)生成処理ステップ210が行われる。なお、セグ
メント(3)生成処理210においては、構造体配列
は、RAMの領域確保とROMへの初期値配置とする一
定の初期値を持つ構造体配列のセグメント(3)に配置
される。
プ201において変数の初期値ありか否かが判定され
て、図6の変数aa 605は初期値なしで、図2のセ
グメント(1)生成処理ステップ212に進み、その変
数のRAMの領域確保のみとする初期化なしのセグメン
ト(1)に配置される。初期値有無判定処理ステップ2
01においては変数の初期値ありか否かが判定されて、
図6の変数bb 606が初期値ありの場合には、図2
の構造体配列判定処理ステップ202へ進み、構造体配
列か否かの判定処理において、図6の変数bb 606
は構造体配列ではないので、図2のセグメント(2)生
成処理211に進み、その変数のRAMの領域確保とR
OMへの初期値配置とする初期化ありのセグメント
(2)に配置される。初期値有無判定処理ステップ20
1における変数の初期値ありか否かが判定されて、図6
の変数cc 608は初期値ありで、図2の構造体配列
判定処理ステップ202に進み、構造体配列か否かの判
定処理において、図6の変数cc608は構造体配列で
あるから、構造体配列の開始番地メンバ初期値退避処理
ステップ203に進む。構造体配列の開始番地メンバ初
期値退避処理ステップ203において、cc[0]のメ
ンバc−valの初期値1と、cc[0]のメンバc−
flgの初期値0を退避させ、メンバ数退避処理ステッ
プ204において、構造体のメンバ数2を退避させる。
次に、構造体配列のメンバ初期値退避処理ステップ20
5において、次の番地のcc[1]のメンバc−val
の初期値2とcc[1]のメンバc−flgの初期値0
を退避させ、メンバの初期値比較処理ステップ206に
おいて、構造体配列の開始番地メンバ初期値退避処理ス
テップ203で退避済みの各メンバの初期値と、構造体
配列のメンバ初期値退避処理ステップ205で退避済み
の各メンバの初期値とを比較して、一致しているか否か
が判定される。この判定の結果において、cc[0]の
メンバc−valの初期値1で、cc[1]のメンバc
−valの初期値2であり、両者の初期値は一致してい
ないため、一定値を有していないメンバ数退避処理ステ
ップ207において、一定値を有していないメンバ数と
して1を退避させ、全要素処理済み判定処理ステップ2
08が実行される。全要素処理済み判定処理ステップ2
08においては、まだ最終番地の要素まで処理が行われ
ていないので、構造体配列のメンバ初期値退避処理ステ
ップ205に戻る。そして、図6に示される変数cc6
08の要素は100個存在するので、100番地の処理
終了済みの判定結果となるまで処理は繰返して行われ
る。この繰返し処理の終了後において、メンバが一定の
初期値を持つ構造体判定処理ステップ209において、
一定値を有していないメンバ数退避処理ステップ207
において得られた一定値を有していないメンバ数が0か
否かが判定される。この判定処理においては、一定値を
有していないメンバ数は1であるから、セグメント
(3)生成処理ステップ210が行われる。なお、セグ
メント(3)生成処理210においては、構造体配列
は、RAMの領域確保とROMへの初期値配置とする一
定の初期値を持つ構造体配列のセグメント(3)に配置
される。
【0031】以上で、初期値解析手段に関する説明を終
了し、図6のオブジェクトプログラム62に対して、変
数bb606の初期値と変数cc608の初期値はRO
Mに配置するデータとして出力され、リンカ部602に
よってオブジェクトプログラム62とスータト・アップ
・プログラム63とが連結されて、実行可能プログラム
64が出力される。実行可能プログラム64は、ROM
書き込み装置603によってROM41に書き込まれ
る。即ち、変数bb606の初期値はROM領域609
に、変数cc608の付加情報であるメンバ数2はRO
M領域610に、配列要素数100はROM領域611
に、配列[0]にのみ初期値格納するメンバを表わすビ
ット1に1をたてた値はROM領域612に、そして変
数cc608の初期値がROM領域613に、それぞれ
書き込まれる。なお、この時に、cc[1]以降のメン
バc−flgの初期値は、ROM領域613には書き込
まれない。
了し、図6のオブジェクトプログラム62に対して、変
数bb606の初期値と変数cc608の初期値はRO
Mに配置するデータとして出力され、リンカ部602に
よってオブジェクトプログラム62とスータト・アップ
・プログラム63とが連結されて、実行可能プログラム
64が出力される。実行可能プログラム64は、ROM
書き込み装置603によってROM41に書き込まれ
る。即ち、変数bb606の初期値はROM領域609
に、変数cc608の付加情報であるメンバ数2はRO
M領域610に、配列要素数100はROM領域611
に、配列[0]にのみ初期値格納するメンバを表わすビ
ット1に1をたてた値はROM領域612に、そして変
数cc608の初期値がROM領域613に、それぞれ
書き込まれる。なお、この時に、cc[1]以降のメン
バc−flgの初期値は、ROM領域613には書き込
まれない。
【0032】このROM65に書き込まれた初期値は、
プログラム実行604と同時に、スタート・アップ・プ
ログラム63によってRAM66に展開される。この時
に展開される初期値の処理ステップについて、図5を参
照して説明する。
プログラム実行604と同時に、スタート・アップ・プ
ログラム63によってRAM66に展開される。この時
に展開される初期値の処理ステップについて、図5を参
照して説明する。
【0033】初期化なし変数のRAM領域0展開処理ス
テップ501において、図6の変数aa605のRAM
領域614に0が展開される。次に、図5の初期化あり
変数のRAM領域初期値展開処理ステップ502におい
ては、図6のROM領域609に配置されている初期値
が、変数bb606のRAM領域615に展開される。
そして、図5の付加情報の読み込み処理ステップ503
以降においては、一定の初期値を持つ構造体配列の初期
値展開が行われる。付加情報の読み込み処理ステップ5
03において、図6の変数cc608のメンバ数がRO
M領域610から読み込まれ、配列要素数はROM領域
611から読み込まれる。そして、配列[0]にのみ初
期値格納するメンバはROM領域612から読み込ま
れ、図5の配列[0]判定処理ステップ504におい
て、図6のROM領域613に設定されている次に読み
込む構造体配列の初期値のデータが、構造体配列の0番
地の初期値か否かが判定される。この判定の結果により
0番地の初期値であるため、図5の配列[0]のメンバ
からの初期値読み込み処理ステップ505により、図6
のROM領域613から、cc[0]のc−valの初
期値が読み込まれる。次に、図5の配列[0]にのみ初
期値格納するメンバ判定処理ステップ506において、
配列[0]のメンバからの初期値読み込み処理ステップ
505において読み込まれた初期値のメンバが、図6の
ROM領域612に設定されている配列[0]にのみ初
期値格納するメンバに存在するか否かが判定される。ビ
ット0の値は0であるから、メンバc−valは、配列
[0]にのみ初期値格納するメンバでないものと判定さ
れ、初期値のRAM出力処理ステップ508において、
読み込まれたcc[0]のメンバc−valの初期値
は、図6のRAM66のRAM領域616のcc[0]
のメンバc−valに書き込まれる。次に、図5の1要
素全メンバ終了判定処理ステップ509において、構造
体配列1要素の全メンバの初期値展開が終了したか否か
を判定される。未だ全て終了してはいないので、配列
[0]判定処理ステップ504に戻り、次のメンバであ
るcc[0]のメンバc−flgの初期値展開に移る。
そして、配列[0]判定処理ステップ504において、
図6のROM領域613に設定されている次に読み込む
構造体配列の初期値のデータが、構造体配列の0番地の
初期値であるか否かが判定される。この判定の結果によ
り0番地の初期値であるから、図5の配列[0]のメン
バからの初期値読み込み処理ステップ505により、図
6のROM領域613から、cc[0]のメンバc−f
lgの初期値を読み込む。次に、図5の配列[0]にの
み初期値格納するメンバ判定処理ステップ506におい
て、配列[0]のメンバからの初期値読み込み処理ステ
ップ505で読み込まれた初期値のメンバが、図6のR
OM領域612に設定されている配列[0]にのみ初期
値格納するメンバ内に存在するか否か判定される。この
場合、ビット1の値が1であるから、メンバc−flg
は、配列[0]にのみ初期値格納するメンバであるもの
と判定されて、図5の配列[0]にのみ初期値格納する
メンバの初期値保存処理ステップ507において、読み
込まれたメンバc−flgの初期値0を、配列[0]に
のみ初期値格納するメンバの初期値保存変数514に退
避させる。次に、初期値のRAM出力処理ステップ50
8において、読み込まれたcc[0]のメンバc−fl
gの初期値が、図6のRAM領域616のcc[0]の
c−flgに書き込まれる。次に、図5の1要素全メン
バ終了判定処理ステップ509において、構造体配列1
要素の全メンバの初期値展開が終了したか否かが判定さ
れる。全て終了しているので、配列[0]判定処理ステ
ップ504に戻り、次の番地の要素の初期値展開に移
る。配列[0]判定処理ステップ504において、図6
のROM領域613に設定されている次に読み込む構造
体配列の初期値のデータが、構造体配列の0番地の初期
値か否かが判定される。この判定の結果、0番地の初期
値ではないので、図5の配列[0]にのみ初期値格納す
るメンバ判定処理ステップ511において、次に読み込
む初期値のメンバが、図6のROM領域612に設定さ
れている配列[0]にのみ初期値格納するメンバに存在
するか否かが判定される。この場合ビット0の値は0で
あるから、メンバc−valは、配列[0]にのみ初期
値格納するメンバではないと判定されて、図5の配列の
メンバからの初期値読み込み処理ステップ513におい
て、図6のROM領域613から、cc[1]のメンバ
c−valの初期値が読み込まれる。次に、図5の初期
値のRAM出力処理ステップ508に戻り、読み込まれ
た初期値が、図6のRAM66のRAM領域616のc
c[1]のメンバc−valに書き込まれて、図5の1
要素全メンバ終了判定処理ステップ509および配列
[0]判定処理ステップ504を経て、再度、配列
[0]にのみ初期値格納するメンバ判定処理ステップ5
11に戻る。配列[0]にのみ初期値格納するメンバ判
定処理ステップ511において、次に読み込む初期値の
メンバが、図6のROM領域612に設定されている配
列[0]にのみ初期値格納するメンバ内に存在するか否
かが判定される。ビット1の値は0であるから、メンバ
c−flgは、配列[0]にのみ初期値格納するメンバ
であるものと判定され、図5の配列[0]にのみ初期値
格納するメンバの初期値取得処理ステップ512におい
て、配列[0]にのみ初期値格納するメンバの初期値保
存変数514から初期値0が読み込まれる。次に、初期
値のRAM出力処理ステップ508に戻り、読み込まれ
た初期値が、図6のRAM66のcc[1]のメンバc
−flgに書き込まれる。そして、図5の1要素全メン
バ終了判定処理ステップ509および全要素終了判定処
理ステップ510へと進む。以上の処理手順が、全要素
終了まで繰返して行われて全ての処理が終了となる。
テップ501において、図6の変数aa605のRAM
領域614に0が展開される。次に、図5の初期化あり
変数のRAM領域初期値展開処理ステップ502におい
ては、図6のROM領域609に配置されている初期値
が、変数bb606のRAM領域615に展開される。
そして、図5の付加情報の読み込み処理ステップ503
以降においては、一定の初期値を持つ構造体配列の初期
値展開が行われる。付加情報の読み込み処理ステップ5
03において、図6の変数cc608のメンバ数がRO
M領域610から読み込まれ、配列要素数はROM領域
611から読み込まれる。そして、配列[0]にのみ初
期値格納するメンバはROM領域612から読み込ま
れ、図5の配列[0]判定処理ステップ504におい
て、図6のROM領域613に設定されている次に読み
込む構造体配列の初期値のデータが、構造体配列の0番
地の初期値か否かが判定される。この判定の結果により
0番地の初期値であるため、図5の配列[0]のメンバ
からの初期値読み込み処理ステップ505により、図6
のROM領域613から、cc[0]のc−valの初
期値が読み込まれる。次に、図5の配列[0]にのみ初
期値格納するメンバ判定処理ステップ506において、
配列[0]のメンバからの初期値読み込み処理ステップ
505において読み込まれた初期値のメンバが、図6の
ROM領域612に設定されている配列[0]にのみ初
期値格納するメンバに存在するか否かが判定される。ビ
ット0の値は0であるから、メンバc−valは、配列
[0]にのみ初期値格納するメンバでないものと判定さ
れ、初期値のRAM出力処理ステップ508において、
読み込まれたcc[0]のメンバc−valの初期値
は、図6のRAM66のRAM領域616のcc[0]
のメンバc−valに書き込まれる。次に、図5の1要
素全メンバ終了判定処理ステップ509において、構造
体配列1要素の全メンバの初期値展開が終了したか否か
を判定される。未だ全て終了してはいないので、配列
[0]判定処理ステップ504に戻り、次のメンバであ
るcc[0]のメンバc−flgの初期値展開に移る。
そして、配列[0]判定処理ステップ504において、
図6のROM領域613に設定されている次に読み込む
構造体配列の初期値のデータが、構造体配列の0番地の
初期値であるか否かが判定される。この判定の結果によ
り0番地の初期値であるから、図5の配列[0]のメン
バからの初期値読み込み処理ステップ505により、図
6のROM領域613から、cc[0]のメンバc−f
lgの初期値を読み込む。次に、図5の配列[0]にの
み初期値格納するメンバ判定処理ステップ506におい
て、配列[0]のメンバからの初期値読み込み処理ステ
ップ505で読み込まれた初期値のメンバが、図6のR
OM領域612に設定されている配列[0]にのみ初期
値格納するメンバ内に存在するか否か判定される。この
場合、ビット1の値が1であるから、メンバc−flg
は、配列[0]にのみ初期値格納するメンバであるもの
と判定されて、図5の配列[0]にのみ初期値格納する
メンバの初期値保存処理ステップ507において、読み
込まれたメンバc−flgの初期値0を、配列[0]に
のみ初期値格納するメンバの初期値保存変数514に退
避させる。次に、初期値のRAM出力処理ステップ50
8において、読み込まれたcc[0]のメンバc−fl
gの初期値が、図6のRAM領域616のcc[0]の
c−flgに書き込まれる。次に、図5の1要素全メン
バ終了判定処理ステップ509において、構造体配列1
要素の全メンバの初期値展開が終了したか否かが判定さ
れる。全て終了しているので、配列[0]判定処理ステ
ップ504に戻り、次の番地の要素の初期値展開に移
る。配列[0]判定処理ステップ504において、図6
のROM領域613に設定されている次に読み込む構造
体配列の初期値のデータが、構造体配列の0番地の初期
値か否かが判定される。この判定の結果、0番地の初期
値ではないので、図5の配列[0]にのみ初期値格納す
るメンバ判定処理ステップ511において、次に読み込
む初期値のメンバが、図6のROM領域612に設定さ
れている配列[0]にのみ初期値格納するメンバに存在
するか否かが判定される。この場合ビット0の値は0で
あるから、メンバc−valは、配列[0]にのみ初期
値格納するメンバではないと判定されて、図5の配列の
メンバからの初期値読み込み処理ステップ513におい
て、図6のROM領域613から、cc[1]のメンバ
c−valの初期値が読み込まれる。次に、図5の初期
値のRAM出力処理ステップ508に戻り、読み込まれ
た初期値が、図6のRAM66のRAM領域616のc
c[1]のメンバc−valに書き込まれて、図5の1
要素全メンバ終了判定処理ステップ509および配列
[0]判定処理ステップ504を経て、再度、配列
[0]にのみ初期値格納するメンバ判定処理ステップ5
11に戻る。配列[0]にのみ初期値格納するメンバ判
定処理ステップ511において、次に読み込む初期値の
メンバが、図6のROM領域612に設定されている配
列[0]にのみ初期値格納するメンバ内に存在するか否
かが判定される。ビット1の値は0であるから、メンバ
c−flgは、配列[0]にのみ初期値格納するメンバ
であるものと判定され、図5の配列[0]にのみ初期値
格納するメンバの初期値取得処理ステップ512におい
て、配列[0]にのみ初期値格納するメンバの初期値保
存変数514から初期値0が読み込まれる。次に、初期
値のRAM出力処理ステップ508に戻り、読み込まれ
た初期値が、図6のRAM66のcc[1]のメンバc
−flgに書き込まれる。そして、図5の1要素全メン
バ終了判定処理ステップ509および全要素終了判定処
理ステップ510へと進む。以上の処理手順が、全要素
終了まで繰返して行われて全ての処理が終了となる。
【0034】このように、初期化なし変数である図6の
変数aa605の初期値0を、従来技術の場合と同様に
ROMに配置することなく、プログラム実行604と同
時にスタート・アップ・プログラム63によって、RA
M領域614に当該0を展開することにより、ROM6
5の使用領域を抑制することができる。さらに、本発明
においては、変数cc608のように全て同一初期値を
持つメンバの構造体配列に対して、従来技術ではできな
かった大量の同一データのROM配置を抑制することが
できる。変数cc608の初期値配置に使用するROM
領域は、従来技術のROM化機能では200領域である
のに対して、本発明のROM化機能においては104領
域である。これにより、データを配置するROM領域を
大幅に縮小することができるため、使用するデータ量の
増加、メモリの物理的コスト低減等の効果を得ることが
できる。
変数aa605の初期値0を、従来技術の場合と同様に
ROMに配置することなく、プログラム実行604と同
時にスタート・アップ・プログラム63によって、RA
M領域614に当該0を展開することにより、ROM6
5の使用領域を抑制することができる。さらに、本発明
においては、変数cc608のように全て同一初期値を
持つメンバの構造体配列に対して、従来技術ではできな
かった大量の同一データのROM配置を抑制することが
できる。変数cc608の初期値配置に使用するROM
領域は、従来技術のROM化機能では200領域である
のに対して、本発明のROM化機能においては104領
域である。これにより、データを配置するROM領域を
大幅に縮小することができるため、使用するデータ量の
増加、メモリの物理的コスト低減等の効果を得ることが
できる。
【0035】
【発明の効果】以上説明したように、本発明は、構造配
列の初期化において、或るメンバの初期値が全要素に亘
り同一値である場合に、大量の同一データがROMに配
置されることを抑制するROM化機能を有することによ
り、当該データが配置されるROM領域を縮小すること
が可能となり、これにより、使用するデータ量を増大さ
せることができるとともに、メモリの物理的コストを低
減することができるという効果がある。
列の初期化において、或るメンバの初期値が全要素に亘
り同一値である場合に、大量の同一データがROMに配
置されることを抑制するROM化機能を有することによ
り、当該データが配置されるROM領域を縮小すること
が可能となり、これにより、使用するデータ量を増大さ
せることができるとともに、メモリの物理的コストを低
減することができるという効果がある。
【図1】本発明の一実施例のシステム構成図である。
【図2】前記実施例における初期値解析手段の第1の実
施例のフローチャートを示す図である。
施例のフローチャートを示す図である。
【図3】前記実施例における初期値解析手段の第2の実
施例のフローチャートを示す図である。
施例のフローチャートを示す図である。
【図4】本発明におけるセグメント形式例を示す図であ
る。
る。
【図5】本発明におけるスタート・アップ・プログラム
の初期値展開処理のフローチャートを示す図である。
の初期値展開処理のフローチャートを示す図である。
【図6】本発明におけるROMの初期値配置からRAM
に展開される初期値の配置例を示す図である。
に展開される初期値の配置例を示す図である。
【図7】従来例における初期値解析手段のフローチャー
トを示す図である。
トを示す図である。
【図8】従来例におけるセグメント形式例を示す図であ
る。
る。
【図9】数来例におけるスタート・アップ・プログラム
の初期値展開処理のフローチャートを示す図である。
の初期値展開処理のフローチャートを示す図である。
【図10】従来例におけるROMの初期値配置からRA
Mに展開される初期値の配置例を示す図である。
Mに展開される初期値の配置例を示す図である。
11 制御部 12 補助記憶部 13、601、A01 コンパイラ部 14、602、A02 リンカ部 41、64、81、112、A4 実行可能プログラ
ム 51、66、92、A6 RAM 52、65、91、A5 ROM 61、109、A1 原始プログラム 62、110、A2 オブジェクトプログラム 63、111、A3 スタート・アップ・プログラム 101 字句解析手段 102 構文解析手段 103 初期値解析手段 104 コード生成手段 105 連結手段 106 配置手段 107 未解決コード処理手段 108 出力手段 201、301、701 初期値有無判定処理 202、302 構造体配列判定処理 203、303 構造体配列の開始番地メンバ初期値
退避処理 204、304 メンバ数退避処理 205、306 構造体配列のメンバ初期値退避処理 206、307 メンバの初期値比較処理 207、308 一定値を有していないメンバ数退避
処理 208、305 全要素処理済み判定処理 209、309 メンバが一定の初期値を持つ構造体
判定処理 210、310 セグメント(3)生成処理 211、311、702 セグメント(2)生成処理 212、312、703 セグメント(1)生成処理 401 セグメント(3) 402、516 メンバ数 403、517 配列要素数 404、518 配列[0]にのみ初期値格納するメ
ンバ 405、519、802 構造体配列の初期値 501、901 初期化なし変数のRAM領域0展開
処理 502、902 初期化あり変数のRAM領域初期値
展開処理 503 付加情報の読み込み処理 504 配列[0]判定処理 505 配列[0]のメンバからの初期値読み込み処
理 506、511 配列[0]にのみ初期値格納するメ
ンバ判定処理 507 配列[0]にのみ初期値格納するメンバの初
期値保存処理 508 初期値のRAM出力処理 509 1要素全メンバ終了判定処理 510 全要素終了判定処理 512 配列[0]にのみ初期値格納するメンバの初
期値取得処理 513 配列のメンバからの初期値読み込み処理 514 配列[0]にのみ初期値格納するメンバの初
期値保存変数 515 初期化あり変数の初期値 603、A03 ROM書き込み装置 604、A04 プログラム実行 605、A05 変数aa 606、A06 変数bb 607、A07 構造体宣言文struct 608、A08 変数cc 609、610、611、612、613、A09、A
10 ROM領域 614、615、616、A11、A12、A13
RAM領域 801 セグメント(2)
ム 51、66、92、A6 RAM 52、65、91、A5 ROM 61、109、A1 原始プログラム 62、110、A2 オブジェクトプログラム 63、111、A3 スタート・アップ・プログラム 101 字句解析手段 102 構文解析手段 103 初期値解析手段 104 コード生成手段 105 連結手段 106 配置手段 107 未解決コード処理手段 108 出力手段 201、301、701 初期値有無判定処理 202、302 構造体配列判定処理 203、303 構造体配列の開始番地メンバ初期値
退避処理 204、304 メンバ数退避処理 205、306 構造体配列のメンバ初期値退避処理 206、307 メンバの初期値比較処理 207、308 一定値を有していないメンバ数退避
処理 208、305 全要素処理済み判定処理 209、309 メンバが一定の初期値を持つ構造体
判定処理 210、310 セグメント(3)生成処理 211、311、702 セグメント(2)生成処理 212、312、703 セグメント(1)生成処理 401 セグメント(3) 402、516 メンバ数 403、517 配列要素数 404、518 配列[0]にのみ初期値格納するメ
ンバ 405、519、802 構造体配列の初期値 501、901 初期化なし変数のRAM領域0展開
処理 502、902 初期化あり変数のRAM領域初期値
展開処理 503 付加情報の読み込み処理 504 配列[0]判定処理 505 配列[0]のメンバからの初期値読み込み処
理 506、511 配列[0]にのみ初期値格納するメ
ンバ判定処理 507 配列[0]にのみ初期値格納するメンバの初
期値保存処理 508 初期値のRAM出力処理 509 1要素全メンバ終了判定処理 510 全要素終了判定処理 512 配列[0]にのみ初期値格納するメンバの初
期値取得処理 513 配列のメンバからの初期値読み込み処理 514 配列[0]にのみ初期値格納するメンバの初
期値保存変数 515 初期化あり変数の初期値 603、A03 ROM書き込み装置 604、A04 プログラム実行 605、A05 変数aa 606、A06 変数bb 607、A07 構造体宣言文struct 608、A08 変数cc 609、610、611、612、613、A09、A
10 ROM領域 614、615、616、A11、A12、A13
RAM領域 801 セグメント(2)
Claims (3)
- 【請求項1】 原始プログラム、オブジェクトプログラ
ム、スタート・アップ・プログラムおよび実行可能プロ
グラムを格納する補助記憶部と、当該補助記憶部より読
み出される原始プログラムから、オブジェクトプログラ
ムを生成して前記補助記憶部に格納するするコンパイラ
部と、前記補助記憶部より読み出されるオブジェクトプ
ログラムとスタート・アップ・プログラムとを入力し
て、前記実行可能プログラムを生成して前記補助記憶部
に格納するリンカ部とを備えて構成され、所定のRAM
およびROMを有するプロセッサに対し、前記実行可能
プログラムを供給するコンパイル方式において、 前記コンパイラ部が、前記補助記憶部より読み出される
前記原始プログラムを入力して、当該原始プログラムを
字句に分解する字句解析手段と、 前記字句解析手段において字句解析された結果を受けて
所定の構文を構築し、当該構文を認識する構文解析手段
と、 前記構文解析手段により構文解析された結果を受けて変
数の定義文を抽出し、当該定義文より、初期値なし変
数、初期値あり変数、およびメンバが一定の初期値を持
つ構造体配列の変数をそれぞれ認識し、これらの各変数
に対応して、それぞれ初期値なし変数の属性を持つセグ
メント、初期値あり変数の属性を持つセグメント、およ
びメンバの一定の初期値を持つ構造体配列の変数の属性
を持つセグメントに配置する初期値解析手段と、 前記初期値解析手段により配置される変数のセグメント
をコード化し、前記オブジェクトプログラムを生成して
前記補助記憶部に格納するするコード生成手段と、 を備えて構成されることを特徴とするコンパイル方式。 - 【請求項2】 前記補助記憶部により読み出されて、前
記リンカ部に入力されるスタート・アップ・プログラム
として、 前記ROMに配置予定の初期値を、前記RAMに配置予
定の変数の番地に設定するように機能する初期値設定処
理手順を少なくとも有するスタート・アップ処理手順が
含まれるスタート・アップ・プログラムを対象として動
作することを特徴とする請求項1記載のコンパイル方
式。 - 【請求項3】 前記スタート・アップ・プログラム内の
スタート・アップ処理手順に含まれる前記初期値設定処
理手順として、 前記初期値なし変数の配置を予定する前記RAM領域に
対して0を設定する処理手順と、 前記ROMから、当該ROM内に予め格納されている初
期化あり変数の初期値を読み出し、当該初期化あり変数
の初期値を前記RAM領域に書き込む処理手順と、 前記ROMから、当該ROM内に予め格納されているメ
ンバが一定の初期値を持つ構造体配列の初期値を読み出
し、当該メンバが一定の初期値を持つ構造体配列の初期
値を前記RAM領域に書き込む処理手順とを有する初期
値設定処理手順が含まれるスタート・アップ・プログラ
ムを対象として動作することを特徴とする請求項1およ
び2記載のコンパイル方式。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP6205781A JPH0869381A (ja) | 1994-08-30 | 1994-08-30 | コンパイル方式 |
CA002157130A CA2157130C (en) | 1994-08-30 | 1995-08-29 | Compiling device and compiling method |
EP95113556A EP0701203A1 (en) | 1994-08-30 | 1995-08-29 | Compiling device and compiling method |
US08/521,449 US5740446A (en) | 1994-08-30 | 1995-08-30 | Compiling device and compiling method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP6205781A JPH0869381A (ja) | 1994-08-30 | 1994-08-30 | コンパイル方式 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH0869381A true JPH0869381A (ja) | 1996-03-12 |
Family
ID=16512571
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP6205781A Pending JPH0869381A (ja) | 1994-08-30 | 1994-08-30 | コンパイル方式 |
Country Status (4)
Country | Link |
---|---|
US (1) | US5740446A (ja) |
EP (1) | EP0701203A1 (ja) |
JP (1) | JPH0869381A (ja) |
CA (1) | CA2157130C (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2007026484A1 (ja) * | 2005-07-27 | 2007-03-08 | Matsushita Electric Industrial Co., Ltd. | 実行バイナリイメージの作成及び実行を行う装置、方法、プログラム、該プログラムを記録したコンピュータ読み取り可能な記録媒体 |
GB2442723A (en) * | 2006-08-31 | 2008-04-16 | Teg Environmental Plc | Partitioned composting cage |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FI103155B1 (fi) * | 1995-10-11 | 1999-04-30 | Nokia Telecommunications Oy | Menetelmä tietokoneohjattujen palvelujen tuottamiseksi |
JP3305949B2 (ja) * | 1996-02-08 | 2002-07-24 | 富士通株式会社 | プログラム解析装置 |
US6104810A (en) * | 1997-05-15 | 2000-08-15 | International Business Machines Corporation | Pseudorandom number generator with backup and restoration capability |
JP2002055829A (ja) * | 2000-08-07 | 2002-02-20 | Matsushita Electric Ind Co Ltd | 中間オブジェクト連結方法、及び、中間オブジェクト連結装置、及び、リンカ装置、及び、コンパイラドライバ装置、並びに、中間オブジェクトを連結するプログラムを記録した記憶媒体 |
US8893096B1 (en) * | 2009-11-30 | 2014-11-18 | Google Inc. | File migration in distributed systems |
US9189215B1 (en) * | 2014-08-26 | 2015-11-17 | National Instruments Corporation | Convergence analysis of program variables |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH01196631A (ja) * | 1988-01-30 | 1989-08-08 | Nec Corp | 初期値圧縮展開方式 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5481713A (en) * | 1993-05-06 | 1996-01-02 | Apple Computer, Inc. | Method and apparatus for patching code residing on a read only memory device |
US5546586A (en) * | 1993-05-06 | 1996-08-13 | Apple Computer, Inc. | Method and apparatus for vectorizing the contents of a read only memory device without modifying underlying source code |
-
1994
- 1994-08-30 JP JP6205781A patent/JPH0869381A/ja active Pending
-
1995
- 1995-08-29 EP EP95113556A patent/EP0701203A1/en not_active Withdrawn
- 1995-08-29 CA CA002157130A patent/CA2157130C/en not_active Expired - Fee Related
- 1995-08-30 US US08/521,449 patent/US5740446A/en not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH01196631A (ja) * | 1988-01-30 | 1989-08-08 | Nec Corp | 初期値圧縮展開方式 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2007026484A1 (ja) * | 2005-07-27 | 2007-03-08 | Matsushita Electric Industrial Co., Ltd. | 実行バイナリイメージの作成及び実行を行う装置、方法、プログラム、該プログラムを記録したコンピュータ読み取り可能な記録媒体 |
JP4944033B2 (ja) * | 2005-07-27 | 2012-05-30 | パナソニック株式会社 | 情報処理システム、情報処理方法、実行バイナリイメージ作成装置、実行バイナリイメージ作成方法、実行バイナリイメージ作成プログラム、実行バイナリイメージ作成プログラムを記録したコンピュータ読み取り可能な記録媒体、実行バイナリイメージ実行装置、実行バイナリイメージ実行方法、実行バイナリイメージ実行プログラム及び実行バイナリイメージ実行プログラムを記録したコンピュータ読み取り可能な記録媒体 |
US8281289B2 (en) | 2005-07-27 | 2012-10-02 | Panasonic Corporation | Device, method, and program for generating and executing execution binary image, and computer-readable recording medium containing the execution binary image execution program |
GB2442723A (en) * | 2006-08-31 | 2008-04-16 | Teg Environmental Plc | Partitioned composting cage |
GB2442723B (en) * | 2006-08-31 | 2011-04-06 | Teg Environmental Plc | Partitioned composting cage |
Also Published As
Publication number | Publication date |
---|---|
US5740446A (en) | 1998-04-14 |
CA2157130A1 (en) | 1996-03-01 |
CA2157130C (en) | 1999-06-01 |
EP0701203A1 (en) | 1996-03-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6023583A (en) | Optimized variable allocation method, optimized variable allocation system and computer-readable memory containing an optimized variable allocation program | |
US6292939B1 (en) | Method of reducing unnecessary barrier instructions | |
EP0949566B1 (en) | Method and system for performing static initialization | |
US5812854A (en) | Mechanism for integrating user-defined instructions with compiler-generated instructions and for optimizing the integrated instruction stream | |
JP2000347874A (ja) | レジスタ割当器を用いた呼出規則プロローグ・エピローグコード構築方法及び装置 | |
JP2000242501A (ja) | 情報処理装置、情報処理方法及びプログラム書込み装置 | |
JPH07105012A (ja) | 言語処理プログラムのコンパイル処理方式 | |
JP2000347872A (ja) | 例外を正規制御フローとして処理する方法及び装置 | |
CN114816417B (zh) | 一种交叉编译方法、装置、计算设备及存储介质 | |
US6175935B1 (en) | Software debugging method and recording medium to which debugging program has been recorded | |
US6968543B2 (en) | Information processing apparatus | |
JPH11119981A (ja) | プログラム生成装置 | |
JPH0869381A (ja) | コンパイル方式 | |
US7080370B1 (en) | Method and apparatus for compiling source programs using one or more libraries | |
EP0790555B1 (en) | Compile apparatus and method | |
US6973645B2 (en) | Compiler, operation processing system and operation processing method | |
JP2004192604A (ja) | 組込みソフトウェア開発装置及び組込みソフトウェア開発方法 | |
JP3915208B2 (ja) | コンパイル装置 | |
JPH08255086A (ja) | オブジェクトコード生成方式 | |
JPH11149380A (ja) | コンパイラとプログラム最適化方法およびその処理プログラムを記録した記録媒体 | |
JP3018783B2 (ja) | コンパイル方式 | |
JP2004145589A (ja) | 大域変数の最適化を抑止可能なコンパイラ | |
JP3921288B2 (ja) | 言語処理装置およびインライン展開プログラムを記憶したコンピュータ読取可能な記憶媒体 | |
JP2002157128A (ja) | コンパイラのスタック領域割り付け方法及びコンパイラ | |
JP2001142719A (ja) | コンパイラ装置及びコンパイラプログラムを記録した記録媒体 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 19990202 |