説明

コンパイラ、そのコンパイラによって作成されたプログラムモジュールの制御方法、及び、その制御方法を実現する制御装置

【課題】マイクロコンピュータのCPUが、外部のノイズ、電源電圧の不安定、他の原因でそのプログラムの実行が不能となり、いわゆる暴走などの致命的エラーを起こしても、極めて短時間でなるべくシステム全体の初期化をせずに、元の状態に復帰させることを目的とする。
【解決手段】一又は二以上のソースコードをコンパイルして作成されたマシン語を分割することによって作成される第1及び第2のプログラムモジュールの実行の際に、第1のプログラムモジュールと第1のプログラムモジュールとの実行の間にCPUをリセットする。CPUのエラーを検出したときは、RAMに保存した情報を用いて、CPUのレジスタが復元され、CPUは、エラー発生前の状態に復帰する。
これにより実行中の応用プログラムは、短時間で致命的エラーから復帰するため、あたかも致命的エラーが発生していないかのようにソフトウェア処理を継続することができる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンパイラ、そのコンパイラによって作成されたプログラムモジュールの制御方法、及び、その制御方法を実現する制御装置の動作方法に関する。より詳細には、制御装置(マイクロコンピュータ)の処理部(中央処理装置(CPU))において、いわゆる暴走などのエラーが発生した場合に、処理部を自動的に復帰させる制御装置の動作方法とその制御装置上で用いられるプログラムモジュールを作成するためのコンパイラに関する。
【背景技術】
【0002】
マイクロコンピュータのCPUにおいて、外部の電気的なノイズ、静電気、電源電圧の不安定、及び、その他の原因で致命的なエラーが発生する。これにより、そのCPUがプログラムを実行することができなくなることがある。そのような致命的なエラーの状態の例としては、いわゆるCPUの暴走などが挙げられる。マイクロコンピュータのCPUの致命的なエラーへの対策としては、ウオッチドッグとして知られる方法が一般的である。この方法は、ソフトウェアの処理の繰り返し(ループ)時間より十分に長いタイマを設け、ソフトウェア処理のループにおいて、このタイマをリセットする。CPUに致命的なエラーが発生した場合、ソフトウェア処理が正常に動作しないため、タイマはリセットされずに終了し、タイマの終了をトリガとして、マイクロコンピュータ全体にリセットが与えられる。一方、CPUが正常に動作している場合(致命的なエラーが発生していない場合)、タイマは終了する前にリセットされるので、マイクロコンピュータはリセットされない。
【0003】
しかし、この方法では、CPUの致命的なエラー状態が、その発生からタイマの終了までの長い間継続する可能性がある。したがって、CPUの致命的なエラー発生からタイマが終了するまでの時間がマイクロコンピュータの使用に悪影響を及ぼすような環境や、その時間中のマイクロコンピュータの誤動作によって使用者に危険が及ぶような環境ではウオッチドッグは必ずしも有効でない。しかしながら、従来、他に有効な手段がないため、ウオッチドッグが採用され続けている。
【0004】
さらに、ウオッチドッグを用いたCPUの致命的なエラーの対策では、CPUにおいて致命的なエラーが発生した後、そのCPUの状態を、そのようなエラーが発生する直前の状態に戻すことは困難である。その理由は、CPUの致命的なエラーが検出される迄に時間がかかっているため、CPUの致命的なエラーが検出された時点のCPUレジスタの情報などの状態が、致命的なエラーが発生した直前の状態とは異なるからである。
【0005】
従来、マイクロコンピュータは、CPUの致命的なエラーを検出すると、CPUの致命的なエラーを検出した時点のCPUレジスタの情報などを破棄して、マイクロコンピュータ全体を初期化していた。したがって、従来、CPUを致命的なエラーから復帰させるためには、そのCPUの致命的なエラーを検出するための時間に加えて、マイクロコンピュータ全体を初期化するための時間が必要となっていた。そして、マイクロコンピュータを、CPUで致命的なエラーが発生する前の状態に戻すために、そのエラーが発生する前の実行中の処理(応用プログラム(アプリケーションプログラム)の処理)を、CPUの初期化後に再現しなければならない。実行中であった処理を再現することは容易ではなく、さらに、その再現を実行するための処理時間が必要となる。したがって、マイクロコンピュータを使用している環境によって、CPUの致命的なエラーからマイクロコンピュータを復帰させることは大きな問題になる可能性がある。例えば、CPUの致命的なエラーから初期化迄の時間に機械が停止できずに事故が起こり得るし、また、金銭の勘定が失われる等の深刻な事態も起こり得る。
【0006】
一般的に、マイクロコンピュータを用いたワンチップマイコンには、初期化のための信号は1つしか用いられていない。このため、初期化はマイクロコンピュータ全体に対して行われる。よって、マイクロコンピュータの初期化は、全体を初期化するのに見合う重大なエラーの場合に行うことが想定されている。したがって、CPUの致命的なエラーからの復帰に時間がかかることや、その致命的なエラーが発生するまでの情報などが失われることは、従来、止むを得ないと考えられていた。
【0007】
さらに、別の方法において、特許文献1に記載されている様に、周期的な割込みの代わりに、リセットを周期的にCPUのみに与える方法もある。この方法を用いた場合、CPU上で実行される応用プログラムの実行開始から終了までの時間は、リセットの周期内でなければならない。なぜならば、応用プログラムの実行中にCPUがリセットされた場合、プログラムカウンタやスタックなどのCPUレジスタの情報もリセットされ、応用プログラム中の命令についてのアドレスが消去されるからである。したがって、CPUのみを周期的にリセットする場合、応用プログラムは、処理開始から終了までの時間がCPUのリセットの周期の間隔内に収まるような極めて小さなサイズとする必要が有る。また、応用プログラムの作成者は、応用プログラムの処理内容だけではなく、リセットの周期を意識して応用プログラムの作成を行わなくてはならないという問題がある。さらに、実行時に応用プログラムの処理時間が確定するような応用プログラム(例えば、画像などの大容量データを取り扱う応用プログラム)は作成することができないという問題がある。
【先行技術文献】
【特許文献】
【0008】
【特許文献1】特開平6−71024号公報
【発明の概要】
【発明が解決しようとする課題】
【0009】
本発明は、周期的にCPUがリセットされても動作するプログラムモジュールを作成するためのコンパイラ、そのプログラムモジュールを動作させるためのオペレーティングシステム(OS)、並びに、それらOS及びプログラムモジュールを動作させるためのマイクロコンピュータを提供する。これにより、マイクロコンピュータのCPUにおける致命的なエラーの発生を削減することできる。また、本発明は、マイクロコンピュータのCPUで致命的なエラーが発生した場合、マイクロコンピュータ全体の初期化又はリセットを行うことなく、CPUのみをリセットすることによって、マイクロコンピュータのCPUを致命的なエラー状態から極めて短時間に復帰させることを目的とする。さらに、本発明は、マイクロコンピュータ上で実行中の応用プログラムに影響を与えることなく、CPUをリセットすることを目的とする。そして、本発明によって、プログラムモジュールの実行時間が、CPUがリセットされる周期に基づいて調整されることから、応用プログラムの作成者は、リセットの周期を意識することなく応用プログラムの作成を行うことができる。
【課題を解決するための手段】
【0010】
本発明による制御装置は、処理部と、処理部とバスを介して接続されている主記憶装置であって、一又は二以上のソースコードをコンパイルしたマシン語を分割することによって作成される複数のプログラムモジュール、複数のプログラムモジュールそれぞれの実行順序を定義する実行順序情報、及び、制御ソフトウェアを動作時にロードする主記憶装置と、処理部をリセットする処理部リセット手段と、を備え、制御ソフトウェアは、処理部に、複数のプログラムモジュールにおける第1のプログラムモジュールを実行するステップと、処理部のレジスタの情報を主記憶装置に保存するステップと、を実行させ、制御ソフトウェアは、処理部リセット手段が処理部をリセットした後、さらに、処理部に、主記憶装置に保存されているレジスタの情報を処理部のレジスタに保存するステップと、第1のプログラムモジュールの次に実行すべきと実行順序情報に定義されている第2のプログラムモジュールを実行するステップと、を実行させることができる。
【0011】
処理部リセット手段は、処理部が複数のプログラムモジュールの1つを実行するために費やすことができる時間である実行単位時間より長い時間である所定の周期で処理部をリセットすることができる。
【0012】
本発明による制御装置において、制御ソフトウェアは、処理部に、第1のプログラムモジュールの実行が実行単位時間内に終了しない場合、処理部リセット手段による処理部のリセットを停止するステップを実行させるようにすることができる。
【0013】
本発明による制御装置において、制御ソフトウェアは、第2のプログラムモジュールが実行され、処理部リセット手段によって処理部がリセットされた後、処理部に、第2のプログラムモジュールが正常に終了したか否かを判定するステップと、第2のプログラムモジュールが正常に終了しなかった場合、主記憶装置に保存されているレジスタの情報を処理部のレジスタに保存するステップと、第2のプログラムモジュールを再度実行するステップと、を実行させるようにすることができる。
【0014】
本発明による制御装置において、主記憶装置は、さらに、複数のプログラムモジュールそれぞれを実行する際に必要となるクロック数の推定値である推定実行クロック数を定義する推定実行クロック情報を動作時にロードし、制御ソフトウェアは、処理部に、第1のプログラムモジュールの推定実行クロック数と第2のプログラムモジュールの推定実行クロック数とを加えた値である加算クロック数と、実行単位クロック数とを比較するステップと、加算クロック数が実行単位クロック数より小さい場合、第1のプログラムモジュールの終了後、処理部をリセットすることなく、第2のプログラムモジュールを実行するステップと、を実行させるようにすることができる。
【0015】
本発明による制御装置において、制御ソフトウェアが、処理部に、処理部がリセットされる時間の間隔を変更するステップを実行させるようにすることができる。
【0016】
本発明による制御装置において、マシン語は、マシン語における1又は2以上の命令グループに基づいて、分割されているようにすることができる。
【0017】
本発明による制御装置において、マシン語は、実行単位時間及び処理部のクロック周波数から計算される実行単位クロック数に基づいて、分割されているようにすることができる。
【0018】
本発明による制御装置において、マシン語は、実行単位時間及び処理部のクロック周波数から計算される実行単位クロック数とマシン語における1又は2以上の命令グループとに基づいて、分割されているようにすることができる。
【0019】
本発明による制御装置は、マイクロコンピュータであるようにすることができる。
【0020】
本発明による制御装置であるマイクロコンピュータが、ワンチップ上で実装されるようにすることができる。
【0021】
本発明による制御装置は、処理部が、中央処理装置(CPU)であるようにすることができる。
【0022】
本発明による制御装置は、主記憶装置が、RAMであるようにすることができる。
【0023】
本発明による制御装置は、制御ソフトウェアが、オペレーティングシステム(OS)であるようにすることができる。
【0024】
本発明による制御装置は、主記憶装置が、複数の時点における処理部のレジスタの情報を保存するようにすることができる。
【0025】
本発明によるコンピュータプログラムのコンパイル方法は、一又は二以上のソースコードをマシン語にコンパイルするステップと、マシン語を実行するために必要なクロック数を計算するステップと、マシン語における1又は2以上の命令グループを単位として、マシン語を分割し、さらに、必要なクロック数がマシン語の1つのグループを実行するために費やすことができる時間である実行単位時間に基づく実行単位クロック数より小さい又は等しくなるようマシン語を分割し、複数のプログラムモジュールを作成するステップと、複数のプログラムモジュールそれぞれの実行順序を定義する実行順序情報を作成するステップと、を含む。
【0026】
本発明によるコンピュータプログラムのコンパイル方法は、マシン語を実行するコンピュータが有する処理部のクロック周波数と実行単位時間とに基づいて、実行単位クロック数を計算するステップをさらに有するようにすることができる。
【0027】
本発明によるコンピュータプログラムのコンパイル方法は、複数のプログラムモジュールそれぞれを実行する際に必要となるクロック数を推定し、各推定実行クロック数を定義する推定実行クロック情報を作成するステップをさらに有するようにすることができる。
【0028】
本発明によるコンピュータプログラムのコンパイル方法は、連続して実行される2以上のプログラムモジュールの推定実行クロック数の合計が、実行単位クロック数より小さい場合、2以上のプログラムモジュールを併合するステップをさらに有するようにすることができる。
【0029】
本発明によるコンピュータプログラムのコンパイル方法は、一又は二以上のソースコードをマシン語にコンパイルするステップと、マシン語を実行するために必要なクロック数を計算するステップと、必要なクロック数がマシン語の1つのグループを実行するために費やすことができる時間である実行単位時間に基づく実行単位クロック数より小さい又は等しくなるようマシン語を分割し、複数のプログラムモジュールを作成するステップと、複数のプログラムモジュールそれぞれの実行順序を定義する実行順序情報を作成するステップと、を含むようにすることができる。
【0030】
本発明によるコンピュータプログラムのコンパイル方法は、マシン語を実行するコンピュータが有する処理部のクロック周波数と実行単位時間とに基づいて、実行単位クロック数を計算するステップをさらに含むようにすることができる。
【0031】
本発明によるコンピュータプログラムのコンパイル方法は、一又は二以上のソースコードをマシン語にコンパイルするステップと、マシン語における1又は2以上の命令グループを単位として、マシン語を分割し、複数のプログラムモジュールを作成するステップと、複数のプログラムモジュールそれぞれの実行順序を定義する実行順序情報を作成するステップと、を含むようにすることができる。
【0032】
本発明によるコンパイラは、上述のコンピュータプログラムのコンパイル方法を用いることができる。
【発明の効果】
【0033】
マイクロコンピュータのCPUで致命的なエラーが発生しているのを早期に検出し、致命的なエラーからの復帰を可能とすることによって、マイクロコンピュータを用いた応用装置が異常な動作時には危険であったりする誤動作を大幅に低減することができる。
【0034】
特に、自動車、飛行機、船舶、産業用ロボットなどの分野で用いられる機械系を制御する機器において、それら機器の誤動作は大事故に繋がる恐れがある(例えば、自動車のブレーキ制御やステアリング制御など)。本発明によるマイクロコンピュータのCPUの致命的なエラーからの復帰に必要な時間は、機械系を制御する機器における誤動作の検出及びその誤動作からの復帰に必要な時間と比較してはるかに短い。よって、マイクロコンピュータのCPUの致命的なエラーに起因するこれら機器の誤動作の検出及びその誤動作から復帰させるための処理を、機器ではなくマイクロコンピュータで行うことは有用である。
【0035】
また、上記分野において、電気的なノイズなどの致命的なエラーを生じさせる原因は他の分野の機器と比べてより多く発生する。したがって、機械系を制御する機器に本発明を用いることによって、電気的なノイズなどのための従前の多くの対策を大幅に軽減でき、さらに、従前より強固な対策が行えるため、コスト低下と信頼性の向上を併せて図ることができる。また、マイクロコンピュータのCPUにおいて致命的なエラーが継続的に発生している場合、継続的なCPUの致命的なエラーを検出し、その検出結果に基づいて、機器の誤動作を警告するための情報を入出力インタフェースを介して提供することもできる。
【0036】
更に、本発明は、マイクロコンピュータのCPUで致命的なエラーが発生した場合、マイクロコンピュータ全体をリセットするのではなく、CPUのみをリセットすることから、致命的なエラーからの復帰を極めて短い時間で行うことができる。また、本発明は、CPUで致命的なエラーが発生した時に実行されていた応用プログラムを中断した後、CPUをリセットし、そして、その致命的なエラーが発生する前の時点から応用プログラムの実行を再開することができる。
【0037】
本発明の活用が期待される分野における一例を挙げれば、エレベーターが動作中に、落雷、電源のノイズ、設計上の不備によるノイズによって、エレベーターの制御を行うマイクロコンピュータのCPUに致命的なエラーが発生し、そして、そのCPUによってエレベーターが誤動作した場合であっても、エレベーターのマイクロコンピュータに本発明のマイクロコンピュータを採用することによって、エレベーターを安定した状態の動作に極めて短い時間で復帰させることができる。
【図面の簡単な説明】
【0038】
【図1】従来のコンパイラによるプログラムモジュールの作成過程の概要を示した図である。
【図2】本発明の一実施例に係るコンパイラによるプログラムモジュールの作成過程の概要を示した図である。
【図3】本発明の一実施例に係るコンパイラの動作を示したフロー図である。
【図4】実行順序情報についてのテーブル構造を示した図である。
【図5】コンパイラを実現するためのコンピュータ端末の全体を示したブロック図である。
【図6】本発明の一実施例に係るマイクロコンピュータの全体を示したブロック図である。
【図7】第1の実施例によるマイクロコンピュータの動作を示したフロー図である。
【図8】第1の実施例によるマイクロコンピュータの動作を示したフロー図である。
【図9】CPUの制御の推移、並びに、そのCPUのレジスタ及びRAMに保存されている情報の推移を示す第1の実施例についてのタイムチャートである。
【図10】プログラムモジュールの併合前後のCPUの制御の推移を示す第2の実施例についてのタイムチャートである。
【発明を実施するための形態】
【0039】
図1は従来のコンパイラによるプログラムモジュールの作成過程の概要を示した図である。従来技術において、コンパイラ105は、ソースコード(ソースプログラム、コンピュータプログラム、原始プログラムなどとも称される)100をコンパイルすることによって、目的プログラム(オブジェクトモジュールなどとも称される)105を作成する。そして、リンカ(連係編集プログラム、リンケージエディタなどとも称される)120が目的プログラム110とライブラリ115などをリンク(連係編集とも称される)させることによって、通常1つのプログラムモジュール(実行モジュール、実行形式モジュール、実行可能モジュール、ロードモジュールなどとも称される)125を作成する。
【0040】
図2は本発明の一実施例に係るコンパイラによるプログラムモジュールの作成過程の概要を示した図である。従来技術では、1つのプログラムモジュール125が作成されているのに対し、本実施例では、リンカ220によって、複数のプログラムモジュール225乃至240が作成される。
【0041】
本実施例では、複数のプログラムモジュールを作成することによって、それらモジュールを実行するときに、プログラムモジュール1 225が完了した後、かつ、プログラムモジュール2 230を実行するまでの間の時間に、CPUをリセットするなどのプログラムモジュールの処理とは異なる処理の実行が可能となる。
【0042】
通常、プログラムモジュールは、コンパイル及びリンクなどを行うことによって作成される。しかしながら、ソースコードからプログラムモジュールの作成までの過程は、用いるコンピュータ言語などに依存して変化することがある。したがって、本明細書及び特許請求の範囲において、特に言及が無い限り、ソースコードからプログラムモジュールを作成する過程は、コンパイルによって行われるものとして説明する。
【0043】
以下、プログラムモジュールを分割することを可能にするコンパイラ及びそのコンパイラによって作成されたプログラムモジュールの制御方法、及び、その制御方法を実現するマイクロコンピュータの動作について説明する。
【0044】
コンパイラ
図3は、本発明の一実施例に係るコンパイラの動作を示したフロー図である。最初にコンパイラは、応用プログラム(アプリケーションプログラム)などのソースコードを読み取り(ステップ310)、ソースコードをコンパイルする(ステップ313)。これにより、目的プログラムが生成される。コンパイルは、例えば、ソースコードの字句解析、構文解析、及び、意味解析などを行う。
【0045】
コンパイラは、目的プログラム(又はソースコード)をマシン語(機械語、マシンコードなどとも称される)に変換する(ステップ315)。ここで、マシン語とは、CPUなどのプロセッサが直接解釈及び実行できる言語である。さらに、ステップ315において、コンパイラは、必要に応じて、マシン語とライブラリなどをリンクさせる。
【0046】
コンパイラは、実行単位時間及びCPUのクロック周波数に基づいて、実行単位クロック数を計算する(ステップ320)。具体的には、実行単位時間にCPUのクロック周波数を乗算することによって、実行単位クロック数を得ることができる。ここで、実行単位時間とは、マシン語を実行するために費やすことができる時間を意味する。また、実行単位時間は、CPUがリセットされる所定の周期(後述する)より短い時間である。例えば、実行単位時間は、マシン語を実行するための前処理及び後処理に必要な時間を所定の周期から差し引いた時間である。CPUのクロック周波数は、プログラムモジュールを実装するマイクロコンピュータにおけるCPUの周波数である必要がある。一実施例において、特定の周波数のCPUを有するマイクロコンピュータにプログラムモジュールを実装する場合、実行単位クロック数は固定の値とすることができる。この場合、固定の値である実行単位クロック数は、特定の周波数及び所定の実行単位時間に基づく値とすることができる。
【0047】
実行単位クロック数の計算例として、実行単位時間が20ms、CPUのクロック周波数が1GHzである場合、実行単位クロック数は、(0.02)*(1,000,000,000)によって、20,000,000となる。
【0048】
コンパイラは、命令グループを単位として、マシン語を分割する(ステップ325)。命令グループの例としては、1つの命令グループを、複数のソースコード、1つのソースコード、ソースコードにおける1つの条件分岐命令又は繰返し命令、又は、下位の関数などに対応させることができる。
【0049】
命令グループについて、1つのソースコードであるサンプルソースコード1を用いて説明する。
サンプルソースコード1
1 int exampleFunc1 (int argNumber) {
2 int n = 50;
3 int a = 2;
4
5 if (argNumber != 0) {
6 n = n/argNumber;
7 }
8 else
9 {
10 n = n + 1;
11 }
12
13 for (i = 0; i < n; i++) {
14 printf (n);
15 }
16
17 for (i = 0; i < a; i++) {
18 printf (n);
19 }
20
21 return 0;
22 }
【0050】
1つのソースコードが命令グループの1つとする場合、上記サンプルコードの1乃至22行目に相当するマシン語全てが命令グループの1つに相当する。
【0051】
条件分岐命令が命令グループの1つとする場合、条件分岐命令であるif文の5乃至11行目に相当するマシン語を1つの命令グループとする。また、5乃至7行目に相当するマシン語を1つの命令グループ、8乃至11行目に相当するマシン語を1つの命令グループとしてもよい。
【0052】
繰返し命令が命令グループの1つとする場合、繰返し命令であるfor文の13乃至15行目に相当するマシン語を1つの命令グループとする。また、17乃至19行目に記載されている繰返し命令は、変数aが2であることから(つまり、変数aは静的な値)、この繰返し命令は、必ず2回繰り返される。このような場合、2回分の繰返し命令を1つの命令グループとしてもよい。
【0053】
下位の関数が命令グループの1つとする場合、14行目に記載されている関数「printf」に相当するマシン語を1つの命令グループとする。
【0054】
コンパイラは、分割されたマシン語を実行するのに必要なクロック数を計算する(ステップ330)。マシン語において、各命令を実行するのに必要なクロック数は既知である。したがって、各命令に対応するクロック数から分割されたマシン語の全部又は一部を実行するのに必要なクロック数を計算することができる。
【0055】
他の実施例において、各命令を実行するのに必要なクロック数の対応テーブルを予め作成しておき、コンパイラは、対応テーブルを参照することによって、クロック数を計算することができる。
【0056】
コンパイラは、実行単位クロック数に基づいて、ステップ325で分割されたマシン語をさらに分割する(ステップ335)。ステップ325で分割されたマシン語を実行するのに必要なクロック数が実行単位クロック数より大きい場合、ステップ325で分割されたマシン語をさらに分割する。他の実施例として、ステップ335において分割されたマシン語を実行するのに必要なクロック数が実行単位クロック数より大きい場合は、マシン語を実行するのに必要なクロック数が実行単位クロック数と等しい及び/又はより小さくなるまで、ステップ330及び335を繰り返してもよい。
【0057】
他の実施例において、コンパイラは、ステップ325又はステップ335のどちらか一方のみを実行するようにしてもよい。これにより、マシン語は、命令グループ又は実行単位クロック数のどちらか一方のみに基づいて分割される。
【0058】
コンパイラは、分割したマシン語から複数のプログラムモジュールを作成する(ステップ340)。コンパイラは、各プログラムモジュールの実行順序を決定し、実行順序情報を作成する(ステップ345)。そして、コンパイラは、複数のプログラムモジュールそれぞれに相当するマシン語を実行するのに必要なクロック数を推定実行クロック数として計算し、推定実行クロック情報を作成する(ステップ350)。
【0059】
各プログラムモジュールは、それ自体の実行順序情報及び/又は推定実行クロック情報を有するようにすることができる。他の実施例において、実行順序情報及び/又は推定実行クロック情報は、各プログラムモジュールに関連付けされ、後述する図6に記載のマイクロコンピュータ600のRAM601又はROM610に専用テーブルとして保存される。
【0060】
ステップ325において、1つのソースコードが1つの命令グループとして定義された場合、実行順序は、第1のプログラムモジュールに「1」、第1のプログラムモジュールの次に実行されるモジュールである第2のモジュールに「2」が設定される。また、ステップ335において、実行単位クロック数に基づいて、第1のプログラムモジュールがさらに分割された場合、実行順序は、「1−1」、「1−2」などのように設定される。
【0061】
ステップ325において、1つの条件分岐命令が1つの命令グループとして定義された場合を以下のサンプルソースコード2を用いて説明する。例えば、1乃至3行目に相当するマシン語を含むプログラムモジュールの実行順序は「1」、4乃至6行目に相当する実行順序は「2」、7乃至10行目に相当する実行順序は「3」、11乃至12行目に相当する実行順序は「4」などとすることができる。
サンプルソースコード2
1 int exampleFunc2 (int argNumber) {
2 int n = 50;
3 int a = 2;
4 if (argNumber != 0) {
5 n = n/argNumber;
6 }
7 else
8 {
9 n = n + 1;
10 }
11 return 0;
12 }
【0062】
ステップ325において、1つの繰返し命令が1つの命令グループとして定義された場合の例を以下のサンプルソースコード3を用いて説明する。例えば、1乃至2行目に相当するマシン語を含むプログラムモジュールの実行順序は「1」、3乃至5行目に相当する実行順序は「2」、6乃至7行目に相当する実行順序は「3」とすることができる。さらに、サンプルソースコード3の3行目に「for (i = 0; i < 2; i++)」と記載されているように、iが「0」及び「1」の時に3乃至5行目の繰返し命令が実行されることから、この繰返し命令の処理は必ず2回実行される。したがって、3乃至5行目において、1回目に実行されるマシン語を含むプログラムモジュールの実行順序は「2−1」、2回目に相当する実行順序は「2−2」とすることができる。
サンプルソースコード3
1 int exampleFunc3 (int argNumber) {
2 int n = 50;
3 for (i = 0; i < 2; i++) {
4 printf (n);
5 }
6 return 0;
7 }
【0063】
さらに、繰返し命令の実行回数が動的に変化する場合の例を以下のサンプルソースコード4を用いて説明する。サンプルソースコード4の例では、2乃至4行目の繰返しは、変数iが引数argNumberの値と等しくなった時に繰返しを止めるが、引数argNumberの値は、関数exampleFunc4をコールする(実行する)時に確定する。つまり、引数argNumberの値は動的に変化する。1行目に相当するマシン語を含むプログラムモジュール(プログラムモジュール1)の実行順序は「1」、2乃至4行目に相当(プログラムモジュール2)する実行順序は「2」、5乃至6行目に相当(プログラムモジュール3)する実行順序は「3」とすることができる。そして、実行順序情報に、2乃至4行目に相当するマシン語を含むプログラムモジュールの処理内容(又は処理回数)及び実行時間は実行時に動的に変化することを示すフラグを付加することができる。例えば、図4のようなテーブル構造によって情報を保存することができ、上記プログラムモジュール1乃至3の識別子には、それぞれ、exampleFunc4-1、exampleFunc4-2、exampleFunc4-3を設定し、2乃至4行目に相当するプログラムモジュールには、実行時に動的に変化することを示す動的変化フラグをオン(値が「1」)に設定することができる。
サンプルソースコード4
1 int exampleFunc4 (int argNumber) {
2 for (i = 0; i <argNumber; i++) {
3 printf (argNumber);
4 }
5 return 0;
6 }
【0064】
他の実施例において、図4のテーブルに記載のプログラムモジュール識別子及び実行順序を組み合わせた値を実行順序として用いてもよい。これにより、この実行順序は、ユニークな値とすることができる。
【0065】
他の実施例において、ステップ350の処理の後、2以上のプログラムモジュールの推定実行クロック数の合計が、実行単位クロック数より小さい場合、2以上のプログラムモジュールを併合してもよい。また、2以上のプログラムモジュールのいずれかの処理内容(又は処理回数)及び実行時間が実行時に動的に変化する(図4に示す動的変化フラグがオンである)場合、プログラムモジュールの併合を中止することができる。
【0066】
他の実施例において、コンパイラは、後述する図6に記載のマイクロコンピュータにおいて用いられるようにすることができる。コンパイラ及びコンパイラが用いる各種パラメータなどは、マイクロコンピュータの主記憶装置(RAM)やROMに予め保存しておくことができる。
【0067】
他の実施例において、コンパイラ及びコンパイラが用いる各種パラメータなどは、図5に記載されているようなコンピュータ端末用のRAM525、ROM530、ハードディスク535、又は、リムーバブルディスク540など(以下、記憶装置550とする)に保存されていてもよい。コンピュータ端末用CPU505が、ソフトウェアとして記憶装置550に保存されているコンパイラを実行することによって、記憶装置550に保存されているソースコードをコンパイルし、複数のプログラムモジュールを作成し、記憶装置550のいずれかに保存することができる。さらに、コンピュータ端末500は、コンパイルするソースコード及び/又は複数のプログラムモジュールをリムーバブルディスク540に保存する(及び/又はディスク540から読み取る)ことができる。
【0068】
コンピュータ端末500は、コンピュータ端末用入力装置510及び表示装置515を有する。コンピュータ端末用入力装置510の例としては、キーボード、ポインティングデバイス、音声認識入力装置などがある。これにより、ユーザは、コンパイルの実行の命令やコンパイル時に用いられるパラメータ(実行単位時間、CPUのクロック周波数など)の入力を行うことができる。表示装置515の例としては、ブラウン管(CRT)ディスプレイ、液晶デイスプレイ(LCD)などがある。これにより、ユーザは、表示装置515に提示されるグラフィックユーザインタフェースを介して、コンパイラを操作することができる。
【0069】
コンピュータ端末500は、入出力インタフェース545を有し、このインタフェースを介して図6に記載の入出力ポート625に接続することができる。これにより、コンピュータ端末500上の入力装置510や表示装置515などの資源を用いて、マイクロコンピュータ600上でコンパイルを実行することができる。
【0070】
本実施例の説明では、説明を理解し易くするために、複数のプログラムモジュールのファイルを物理的に生成する(例えば、図2の225乃至240参照)実施例を用いた。しかしながら、当業者であれば理解可能であるように、区切り文字などの所定の規則を用いて、プログラムモジュールそれぞれの境界を明らかにすることによって、1つの物理ファイルを論理的に複数のプログラムモジュールとして用いることもできる。
【0071】
マイクロコンピュータ
【0072】
図6は、本発明の一実施例に係るマイクロコンピュータの全体を示したブロック図である。ここで、マイクロコンピュータ600は、中央処理装置(CPU)601、主記憶装置(RAM)605、ROM610、通信用回路615、ユニバーサルカウンタタイマ620、入出力ポート625、パワースイッチ627、論理和回路(OR回路)630、システムリセット入力635、CPUリセット入力637、クロック発生回路640、タイマカウンタ回路645、違法命令及び無効命令検出回路655、領域外アクセス検出回路660、ウオッチドッグ回路665、電源監視回路670を備える。マイクロコンピュータ600の各要素は、必要に応じて、バスと接続されている。一実施例において、マイクロコンピュータは、ワンチップ上で実装することができる。
【0073】
システムリセット入力635は、電源が投入されたときなどに、システムリセット用信号を発生させ、システムリセット用バス675を介してシステムリセット用信号を送信する。システムリセット用信号は、マイクロコンピュータ全体をリセットさせるための信号である。システムリセット用信号は、CPU601のみではなく、例えば、入出力ポート625、通信回路615、ユニバーサルカウンタタイマ620などをリセットするためにも用いられる。
【0074】
CPUリセット入力637は、CPUリセットを発生させ、CPUリセット用バス680を介してシステムリセット用信号を送信する。CPUリセットは、CPUのみをリセットさせるための信号である。
【0075】
違法命令及び無効命令検出回路655、及び、領域外アクセス検出回路660は、それぞれ、CPU601が正常に動作しているか否かを判定する。CPU601が正常に動作していないと判定された場合、違法命令及び無効命令検出回路655、又は、領域外アクセス検出回路660は、CPUリセット用バス680を介してCPU601にCPUリセット用信号を送信し、CPU101をリセットする。
【0076】
ウオッチドッグ回路665、及び、電源監視回路670は、それぞれ、CPU601が正常に動作しているか否かを判定する。CPU601が正常に動作していないと判定された場合、ウオッチドッグ回路665、又は、電源監視回路670は、システムリセット用バス675を介してCPU601や通信回路615などにシステムリセット用信号を送信し、マイクロコンピュータ600全体をリセットする。
【0077】
クロック発生回路640は、システムのクロック信号を発生させる回路である。タイマカウンタ回路645はCPUリセット信号を発生させる回路である。CPU601は、マイクロコンピュータ600のための制御及び演算を実行する回路である。
【0078】
タイマカウンタ回路645は、クロック発生回路640から供給されるクロック信号を予め設定されているカウント上限値に到達するまでカウントする。そして、タイマカウンタ回路645は、カウントした値がカウント上限値に到達したとき、CPUリセット信号を発生させ、CPU601に供給する。その後、タイマカウンタ回路645は、そのカウントした値をクリアし、再度、クロック信号をカウントする。これにより、周期的にCPUリセット信号がCPU601に供給される。したがって、その周期は、クロック発生回路のクロック周波数及びカウント上限値によって決定する。他の実施例において、CPU601は、タイマカウンタ回路645に接続されており、カウント上限値を変更することができる。カウント上限値を変更することにより、周期を変更することができる。
【0079】
他の実施例において、タイマカウンタ回路645は、内部にレジスタを有していてもよい。CPU601は、マイクロコンピュータ600の電源投入時などにカウント上限値をタイマカウンタ回路645に供給し、タイマカウンタ回路645は、カウント上限値をレジスタに保存することができる。
【実施例1】
【0080】
図7及び図8は、第1の実施例によるマイクロコンピュータの動作を示したフロー図である。CPU601は、マイクロコンピュータの動作を制御するためのオペレーティングシステム(OS)がRAM605上にロードされた後、そのOSに定義されている指示を実行する。CPU601は、始めに、上記のコンパイラで作成された複数のプログラムモジュールをRAM605上にロードする(ステップ705)。また、それら複数のプログラムモジュールに関連する実行順序情報もRAM605上にロードされる。さらに、他の実施例において、それら複数のプログラムモジュールに関連する推定実行クロック情報がロードされるようにすることもできる。
【0081】
CPU601は、実行順序情報に基づいて、最初に実行すべきプログラムモジュールを特定する(ステップ710)。最初に実行すべきプログラムモジュールは、実行順序が「1」であるモジュールを検索すること又はその他の規則などによって特定することができる。
【0082】
CPU601は、特定されたプログラムモジュールを実行する(ステップ715)。CPU601は、実行したプログラムモジュールが正常に終了したかを判定する(ステップ720)。この判定は、プログラムモジュールの実行時間が、予めRAM605などに保存されている実行単位時間内であるか否か及び/又は他の規則によって決定される。プログラムモジュールの実行が実行単位時間内に終了しない場合、CPU601にエラーが発生している可能性が高いこと意味する。
【0083】
ステップ720において、プログラムモジュールが正常に終了した場合、終了フラグがオンにセットされる(ステップ725)。終了フラグはRAM605などに保存されるようにすることができる。CPU601は、CPUのレジスタの情報をRAM605に保存する(ステップ730)。ステップ720において、プログラムモジュールが正常に終了していなかった場合、終了フラグは、オンにセットされない。
【0084】
CPU601はリセット待ちの状態となる(ステップ735)。そして、タイマカウンタ回路645が、CPUリセット信号をCPU601に供給し、CPUはリセットされる(ステップ740)。
【0085】
ステップ710乃至740は、CPU601がリセットされる周期内に完了するようにすることができる。また、ステップ710乃至740は、CPU601がリセットされる周期内に完了しない場合、CPU601がリセットされる前にCPUのレジスタの情報をRAM605に保存し、CPU601は、リセットからの復帰後、RAM605に保存されている情報をCPUのレジスタに保存する必要がある。さらに、CPU601は、ステップ710乃至740の間に、NMI(Non-Maskable Interrupt)などの割込み要求を受け付けることができる。
【0086】
CPU601は、リセットされた後、割込み要求があるか否か判定する(ステップ805)。割込み要求がある場合、CPU601は、割込み要求に関連するプログラムモジュールを実行する(ステップ810)。
【0087】
終了フラグがオンに設定されているか否かを判定する(ステップ815)。終了フラグがオンである場合、CPU601は、終了フラグをオフに設定する(ステップ820)。今回実行するプログラムモジュールの実行順序を特定するために、前に実行したプログラムモジュールの実行順序をインクリメントする(ステップ825)。実行順序情報(例えば、図4)の実行順序が「1」、「2」、「3」・・・のような数値であり、前に実行したプログラムモジュールの実行順序が「2」である場合、今回実行するプログラムモジュールの実行順序は、「3」となる。他の実施例において、実行順序の値が他の規則によって与えられている場合、その規則に従い、実行すべきプログラムモジュールを特定することができる。
【0088】
CPU601は、実行順序に関連するレジスタの情報(ステップ730又は850でRAM605保存された情報)をレジスタに保存する(ステップ830)。CPU601は、実行順序に関連するプログラムモジュールを実行する(ステップ835)。
【0089】
ステップ835において、終了フラグがオフであった場合、実行順序がインクリメントされないため、前に実行されたプログラムモジュールが再度、実行される(ステップ835)。終了フラグがオフである場合の例としては、ステップ720において、プログラムモジュールの実行時間が実行単位時間を越えていたと判断された場合、又は、違法命令及び無効命令検出回路655又は領域外アクセス検出回路660が、ステップ720が実行される前に、CPU601が正常に動作していないと判断し、CPUリセット信号をCPU601に供給した場合などである。
【0090】
CPU601は、プログラムモジュールが実行された後(ステップ810及び835)、実行したプログラムモジュールが正常に終了したかを判定する(ステップ840)。処理の内容は、図7のステップ720と同じ処理である。
【0091】
ステップ840において、プログラムモジュールが正常に終了した場合、CPU601は、終了フラグをオンにセットする(ステップ845)。CPU601は、CPUのレジスタの情報をRAM605に保存する(ステップ850)。
【0092】
他の実施例として、ステップ850において、CPU601は、次に実行すべきプログラムモジュールの実行順序を特定し、レジスタの情報と実行順序とを実行順序情報としてRAM605に保存することができる。これにより、複数のプログラムモジュールそれぞれに関連するレジスタの情報をRAM105に保存し、CPU601は、プログラムモジュールに関連するレジスタの情報をより簡単に特定することができる。
【0093】
CPU601はリセット待ちの状態となる(ステップ855)。そして、タイマカウンタ回路645が、CPUリセット信号をCPU601に供給し、CPUはリセットされる(ステップ860)。ステップ860の完了後、処理フローは、ステップ805に戻る。
【0094】
図9は、CPU601の制御の推移、並びに、そのCPUのレジスタ及びRAM610に保存されている情報の推移を示す第1の実施例についてのタイムチャートである。このタイムチャートは、時刻t1、t2、t3・・・の順に時間が進んでいることを示す。状態905、925、945は、CPU601がリセット信号を受領し、CPU601がリセットされていることを示す。状態910、920、930、940、950、960は、CPU601が、OSに関する処理を実行していることを示す。状態915は、935、955は、CPU601が、プログラムモジュールを実行していることを示す。なお、図9(及び後述する図10)に示す時間の間隔は例示の目的で示しており、実際の動作に必要な時間を示したものではない。
【0095】
時刻t1において、CPU601はリセットされ(図7のステップ740及び図8のステップ860に相当)、CPUのレジスタの情報はリセットされる(状態905)。時刻t1のレジスタの情報「R0」は、レジスタの情報がリセットされていることを示す。時刻t2において、CPU601がOSの処理を実行する(状態910)。これにより、RAM605に保存されていたレジスタの情報「R1」がレジスタにコピー又は保存される(図8のステップ830に相当)。
【0096】
時刻t3において、CPU601がプログラムモジュールの処理を実行(状態915)し、レジスタの情報が「R2」に更新される(図7のステップ715及び図8のステップ810及び835に相当)。時刻t4において、CPU601は、レジスタの情報「R2」をRAM605に保存し(図7のステップ730及び図8のステップ850に相当)、プログラムモジュールが正常に終了していた場合、終了フラグをオンにセットする(状態920、図7のステップ725及び図8のステップ845に相当)。
【0097】
時刻t5において、CPU601をリセットすることによって、CPUのレジスタの情報はリセットされ(状態925)、レジスタの情報が「R0」となる。時刻t6乃至t9において実行される処理は、時刻t2乃至t5における処理と同様である。
【0098】
時刻t10において、終了フラグがオフであると判定された場合(状態945、図8のステップ815に相当)、前回実行したプログラムモジュール(状態935)を再度実行するために、RAMに保存されているレジスタの情報「R3」ではなく、レジスタの情報「R2」をレジスタに保存する(状態950)。その後、CPU601は、レジスタの情報「R2」を用いて、前回実行したプログラムモジュールを再度実行する(状態955)。
【0099】
プログラムモジュールを再度実行した後、終了フラグが依然オフであると判定された場合、CPU601は、レジスタの情報「R2」の代わりにレジスタの情報「R1」を用いることもできる。これにより、CPU601は、RAM605に保存されている複数の時点のレジスタの情報を用いることによって、それらレジスタの情報のうちの一つに関連するプログラムモジュールを再実行することができる。したがって、マイクロコンピュータ600は、CPU601にエラーが発生していない時点の状態へ復帰することができる。
【実施例2】
【0100】
図10は、プログラムモジュールの併合前後のCPU601の制御の推移を示す第2の実施例についてのタイムチャートである。
【0101】
プログラムモジュールを実行するための実行時間が、実行単位時間より短い場合、CPU601が動作しない時間が多くなるため、プログラムの実行効率が悪くなる。そこで、本実施例によって、プログラムの実行効率を改善させることができる。
【0102】
図10のプログラムモジュール併合前のタイムチャートを参照すると、実行単位時間が時刻t3からt5及び時刻t8からt10であるとき(CPUをリセットする周期はそれぞれ、時刻t1からt6及び時刻t6からt11)に、第1のプログラムモジュールを実行するのに実際に必要な実行時間が時刻t3からt4(状態1015)、その後に実行される第2の実行モジュールの実行時間が時刻t8からt9(状態1040)であることが示されている。
【0103】
このような場合に、CPU601は、第1及び第2のプログラムモジュールに関連する推定実行クロック数の和を計算し、推定実行クロック数の和と実行単位クロック数とを比較する。推定実行クロック数の和が、実行単位クロック数より小さい場合、CPU601は、第1のプログラムモジュールを実行する前(状態1010)に、第1及び第2のプログラムモジュールを併合し、1つの実行単位時間(時刻t3からt5)の間に第1及び第2のプログラムモジュールを実行する。
【0104】
図10のプログラムモジュールの併合後のタイムチャートを参照すると、時刻t3からt5の間で、第1及び第2のプログラムモジュールが実行されていることが分かる(状態1015及び1040)。図10のプログラムモジュールの併合前のタイムチャートでは、時刻t13からt14の間で第3のプログラムモジュール(状態1060)は実行されていたが、図10のプログラムモジュールの併合後のタイムチャートでは、時刻t8からt10の間で実行される。第3のプログラムモジュールは、より早い時刻に実行されることから、プログラムの実行効率が改善される。
【0105】
他の実施例において、併合対象のプログラムモジュールのいずれかの処理内容(又は処理回数)及び実行時間が実行時に動的に変化する(図4に示す動的変化フラグがオンである)場合、プログラムモジュールの併合を中止することができる。
【実施例3】
【0106】
画像や動画などのような大容量のデータを扱うプログラムモジュールにおいて、実行時にプログラムモジュールの実行時間が変動することが考えられる。そして、その実行時間が、実行単位時間を越える可能性も有り得る。このような場合、実行単位時間を越えてプログラムモジュールの実行を継続するために、タイマカウンタ回路645は、CPU601へのCPUリセット信号の供給を停止する。例えば、CPU601は、タイマカウンタ回路645に設定されているカウント上限値を2倍又はそれ以上の値(又はその他の適切な値)に変更することによって、CPUリセット信号の供給を停止することができる。これにより、実際の実行時間が実行単位時間を越えてしまうプログラムモジュールの実行中にCPUのリセットが起こらないようにすることができる。また、本実施例を適用するプログラムモジュールは、図4に示すような動的変化フラグがオンとなっているか否かによって決定することができる。
【実施例4】
【0107】
あるプログラムモジュールの推定実行クロック数に相当する時間(以下、推定実行時間)が、CPU601をリセットする周期(CPU601がリセットされる間隔)よりはるかに短い場合、推定実行クロック数に相当する処理が実行された後、プログラムモジュールの実行に割当てられたクロック数の残り(実行単位クロック数−推定実行クロック数)に相当する時間の間、CPU601は、他のプログラムモジュールを実行することができない。このような場合に、CPU601は、プログラムモジュールを実行するときに、CPUがリセットされる間隔を推定実行時間に近い時間に変更する。これにより、プログラムモジュールの実行後、すぐにCPU601がリセットされ、次のプログラムモジュールを実行することができる。したがって、本実施例によって、プログラムモジュールの実行効率が改善される。
【0108】
CPUがリセットされる間隔を変更する例として、CPU601は、タイマカウンタ回路645に設定されているカウント上限値を変更し、タイマカウンタ回路645がCPUリセット信号を供給する間隔を変更する。また、推定実行時間が、CPU601がリセットされる間隔より長い場合、CPU601は、CPUがリセットされる間隔を推定実行時間に近い時間に変更する。これにより、プログラムモジュールの実行中にCPU601がリセットされることを防止することができる。
【0109】
本実施例の説明において、CPU601のリセットは、リセット信号を用いて実行されている。しかしながら、リセット信号の代わりに割込み信号を用いて、CPU601をリセとすることも可能である。また、本実施例において、CPU601のリセットとは、CPU601の内部ロジックを特定の状態にする(例えば、CPUレジスタの全て又は一部を全てクリアするなど)ことを意味する。したがって、本実施例において、CPUのリセット信号は、「内部ロジックを特定の状態にする」ことを意味する「CPUリセット手段」の一例として挙げたに過ぎず、CPUのリセット信号は、考え得る他の手段及び方法などと代替することができる。
【0110】
上記の実施例において示したマイクロコンピュータ600は、特許請求の範囲に記載した「制御装置」の一例である。制御装置は、マイクロコンピュータとして、ワンチップ上で実装することができるが、必ずしも、ワンチップ上で実装されている必要はない。また、制御装置は、処理部を有する装置として動作する装置(例えば、パーソナルコンピュータや、論理回路と処理部とを組み合わせた装置など)を含でもよい。
【0111】
上記の実施例において示したCPU601は、特許請求の範囲に記載した「処理部」の一例である。処理部は、処理装置又は演算処理装置として動作する装置全てを含む。
【0112】
上記の実施例において示したRAM605は、特許請求の範囲に記載した「書き換え可能な記憶装置」の一例である。書き換え可能な記憶装置は、不揮発性メモリなどの記憶装置であって、書き換えが行える記憶装置全てを含む。特に、書き換え可能な記憶装置は、主記憶装置として用いることが可能な記憶装置である。
【0113】
上記の実施例において示したオペレーティングシステム(OS)は、特許請求の範囲に記載した「制御ソフトウェア」の一例である。制御ソフトウェアは、制御装置(又はマイクロコンピュータ)の動作を制御するためソフトウェアである。
【0114】
上記の実施例において、ハードウエアで実現するよう説明されたいくつかの要素の一部又は全ては、ソフトウェアで実現することができ、そして、ソフトウェアで実現するよう説明されたいくつかの要素の一部又は全ては、ハードウエアで実現することができることは理解されるであろう。
【0115】
以上に説明した処理又は動作フローにおいて、あるステップにおいて、そのステップではまだ利用することができないはずのデータを利用しているなどの処理又は動作フロー上の矛盾が生じない限りにおいて、処理又は動作フローを自由に変更することができる。
【0116】
以上に説明してきた各実施例は、本発明を説明するための例示であり、本発明はこれらの実施例に限定されるものではない。本発明は、その要旨を逸脱しない限り、種々の形態で実施することができる。
【符号の説明】
【0117】
500 コンピュータ端末
505 コンピュータ端末用CPU
510 コンピュータ端末用入力装置
515 コンピュータ端末用表示装置
545 コンピュータ端末用入出力インタフェース
525 コンピュータ端末用RAM
530 コンピュータ端末用ROM
535 コンピュータ端末用ハードディスク
540 コンピュータ端末用リムーバブルディスク
550 記憶装置
600 マイクロコンピュータ
601 中央処理装置(CPU)
605 主記憶装置(RAM)
610 ROM
615 通信用回路
620 ユニバーサルカウンタタイマ
625 入出力ポート
630 論理和回路(OR回路)
635 システムリセット入力
637 CPUリセット入力
640 クロック発生回路
645 タイマカウンタ回路
655 違法命令及び無効命令検出回路
660 領域外アクセス検出回路
655 ウオッチドッグ回路
670 電源監視回路

【特許請求の範囲】
【請求項1】
処理部と、
前記処理部とバスを介して接続されている書き換え可能な記憶装置であって、一又は二以上のソースコードをコンパイルしたマシン語を分割することによって作成される複数のプログラムモジュール、当該複数のプログラムモジュールそれぞれの実行順序を定義する実行順序情報、及び、制御ソフトウェアを動作時にロードする書き換え可能な記憶装置と、
前記処理部をリセットする処理部リセット手段と、
を備え、
前記制御ソフトウェアは、前記処理部に、
前記複数のプログラムモジュールにおける第1のプログラムモジュールを実行するステップと、
前記処理部のレジスタの情報を前記書き換え可能な記憶装置に保存するステップと、
を実行させるためのソフトウェアであって、
前記制御ソフトウェアは、前記処理部リセット手段が前記処理部をリセットした後、さらに、前記処理部に、
前記書き換え可能な記憶装置に保存されている前記レジスタの情報を前記処理部のレジスタに保存するステップと、
前記第1のプログラムモジュールの次に実行すべきと前記実行順序情報に定義されている第2のプログラムモジュールを実行するステップと、
を実行させるためのソフトウェアであることを特徴とする制御装置。
【請求項2】
前記処理部リセット手段は、前記処理部が前記複数のプログラムモジュールの1つを実行するために費やすことができる時間である実行単位時間より長い時間である所定の周期で前記処理部をリセットすることを特徴とする請求項1に記載の制御装置。
【請求項3】
前記制御ソフトウェアは、前記処理部に、
前記第1のプログラムモジュールの実行が前記実行単位時間内に終了しない場合、前記処理部リセット手段による前記処理部のリセットを停止するステップを実行させるためのソフトウェアであることを特徴とする請求項2に記載の制御装置。
【請求項4】
前記制御ソフトウェアは、前記第2のプログラムモジュールが実行され、前記処理部リセット手段によって前記処理部がリセットされた後、前記処理部に、
前記第2のプログラムモジュールが正常に終了したか否かを判定するステップと、
前記第2のプログラムモジュールが正常に終了しなかった場合、前記書き換え可能な記憶装置に保存されている前記レジスタの情報を前記処理部のレジスタに保存するステップと、
前記第2のプログラムモジュールを再度実行するステップと、
を実行させるためのソフトウェアであることを特徴とする請求項1乃至3のいずれか一つに記載の制御装置。
【請求項5】
前記書き換え可能な記憶装置は、さらに、
前記複数のプログラムモジュールそれぞれを実行する際に必要となるクロック数の推定値である推定実行クロック数を定義する推定実行クロック情報を動作時にロードし、
前記制御ソフトウェアは、前記処理部に、
前記第1のプログラムモジュールの推定実行クロック数と前記第2のプログラムモジュールの推定実行クロック数とを加えた値である加算クロック数と、前記実行単位クロック数とを比較するステップと、
前記加算クロック数が前記実行単位クロック数より小さい場合、前記第1のプログラムモジュールの終了後、前記処理部をリセットすることなく、前記第2のプログラムモジュールを実行するステップと、
を実行させるためのソフトウェアであることを特徴とする請求項1乃至4のいずれか一つに記載の制御装置。
【請求項6】
前記制御ソフトウェアは、前記処理部に、
前記処理部がリセットされる時間の間隔を変更するステップを実行させるためのソフトウェアであることを特徴とする請求項1乃至5のいずれか一つに記載の制御装置。
【請求項7】
前記マシン語は、前記マシン語における1又は2以上の命令グループに基づいて、分割されていることを特徴とする請求項1乃至6のいずれか一つに記載の制御装置。
【請求項8】
前記マシン語は、前記実行単位時間及び前記処理部のクロック周波数から計算される実行単位クロック数に基づいて、分割されていることを特徴とする請求項1乃至6のいずれか一つに記載の制御装置。
【請求項9】
前記マシン語は、前記実行単位時間及び前記処理部のクロック周波数から計算される実行単位クロック数と前記マシン語における1又は2以上の命令グループとに基づいて、分割されていることを特徴とする請求項1乃至6のいずれか一つに記載の制御装置。
【請求項10】
前記制御装置は、マイクロコンピュータであることを特徴とする請求項1乃至9のいずれか一つに記載の制御装置。
【請求項11】
前記マイクロコンピュータは、ワンチップ上で実装されることを特徴とする請求項10に記載の制御装置。
【請求項12】
前記処理部は、中央処理装置(CPU)であることを特徴とする請求項1乃至11のいずれか一つに記載の制御装置。
【請求項13】
前記書き換え可能な記憶装置は、RAMであることを特徴とする請求項1乃至12のいずれか一つに記載の制御装置。
【請求項14】
前記制御ソフトウェアは、オペレーティングシステム(OS)であることを特徴とする請求項1乃至13のいずれか一つに記載の制御装置。
【請求項15】
前記書き換え可能な記憶装置は、複数の時点における前記処理部のレジスタの情報を保存することを特徴とする請求項1乃至14のいずれか一つに記載の制御装置。
【請求項16】
一又は二以上のソースコードをマシン語にコンパイルするステップと、
前記マシン語を実行するために必要なクロック数を計算するステップと、
前記マシン語における1又は2以上の命令グループを単位として前記マシン語を分割し、さらに、前記必要なクロック数が前記マシン語の1つのグループを実行するために費やすことができる時間である実行単位時間に基づく実行単位クロック数より小さい又は等しくなるよう前記マシン語を分割し、複数のプログラムモジュールを作成するステップと、
前記複数のプログラムモジュールそれぞれの実行順序を定義する実行順序情報を作成するステップと、
を含むことを特徴とするコンピュータプログラムのコンパイル方法。
【請求項17】
前記マシン語を実行するコンピュータが有する処理部のクロック周波数と前記実行単位時間とに基づいて、前記実行単位クロック数を計算するステップをさらに含むことを特徴とする請求項16に記載のコンパイル方法。
【請求項18】
前記複数のプログラムモジュールそれぞれを実行する際に必要となるクロック数を推定し、各推定実行クロック数を定義する推定実行クロック情報を作成するステップをさらに有することを特徴とする請求項16及び17のいずれか一つに記載のコンパイル方法。
【請求項19】
連続して実行される2以上のプログラムモジュールの推定実行クロック数の合計が、前記実行単位クロック数より小さい場合、当該2以上のプログラムモジュールを併合するステップをさらに有することを特徴とする請求項18に記載のコンパイル方法。
【請求項20】
一又は二以上のソースコードをマシン語にコンパイルするステップと、
前記マシン語を実行するために必要なクロック数を計算するステップと、
前記必要なクロック数が前記マシン語の1つのグループを実行するために費やすことができる時間である実行単位時間に基づく実行単位クロック数より小さい又は等しくなるよう前記マシン語を分割し、複数のプログラムモジュールを作成するステップと、
前記複数のプログラムモジュールそれぞれの実行順序を定義する実行順序情報を作成するステップと、
を含むことを特徴とするコンピュータプログラムのコンパイル方法。
【請求項21】
前記マシン語を実行するコンピュータが有する処理部のクロック周波数と前記実行単位時間とに基づいて、実行単位クロック数を計算するステップをさらに含むことを特徴とする請求項20に記載のコンパイル方法。
【請求項22】
一又は二以上のソースコードをマシン語にコンパイルするステップと、
前記マシン語における1又は2以上の命令グループを単位として、前記マシン語を分割し、複数のプログラムモジュールを作成するステップと、
前記複数のプログラムモジュールそれぞれの実行順序を定義する実行順序情報を作成するステップと、
を含むことを特徴とするコンピュータプログラムのコンパイル方法。
【請求項23】
請求項16乃至22のいずれか一つに記載のコンピュータプログラムのコンパイル方法を用いたコンパイラ。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate


【公開番号】特開2013−109652(P2013−109652A)
【公開日】平成25年6月6日(2013.6.6)
【国際特許分類】
【出願番号】特願2011−255276(P2011−255276)
【出願日】平成23年11月22日(2011.11.22)
【出願人】(591107481)株式会社エルイーテック (37)
【Fターム(参考)】