"処理部と、前記処理部とバスを介して接続されている書き換え可能な記憶装置であって、一又は二以上のソースコードをコンパイルしたマシン語を分割することによって作成される複数のプログラムモジュール、当該複数のプログラムモジュールそれぞれの実行順序を定義する実行順序情報、及び、制御ソフトウェアを動作時にロードする書き換え可能な記憶装置と、前記処理部をリセットする処理部リセット手段と、を備え、前記制御ソフトウェアは、前記処理部に、前記複数のプログラムモジュールにおける第1のプログラムモジュールを実行するステップと、前記処理部のレジスタの情報を前記書き換え可能な記憶装置に保存するステップと、を実行させるためのソフトウェアであって、前記制御ソフトウェアは、前記処理部リセット手段が前記処理部をリセットした後、さらに、前記処理部に、前記書き換え可能な記憶装置に保存されている前記レジスタの情報を前記処理部のレジスタに保存するステップと、前記第1のプログラムモジュールの次に実行すべきと前記実行順序情報に定義されている第2のプログラムモジュールを実行するステップと、を実行させるためのソフトウェアであることを特徴とする制御装置。前記処理部リセット手段は、前記処理部が前記複数のプログラムモジュールの1つを実行するために費やすことができる時間である実行単位時間より長い時間である所定の周期で前記処理部をリセットすることを特徴とする請求項1に記載の制御装置。前記制御ソフトウェアは、前記処理部に、前記第1のプログラムモジュールの実行が前記実行単位時間内に終了しない場合、前記処理部リセット手段による前記処理部のリセットを停止するステップを実行させるためのソフトウェアであることを特徴とする請求項2に記載の制御装置。前記制御ソフトウェアは、前記第2のプログラムモジュールが実行され、前記処理部リセット手段によって前記処理部がリセットされた後、前記処理部に、前記第2のプログラムモジュールが正常に終了したか否かを判定するステップと、前記第2のプログラムモジュールが正常に終了しなかった場合、前記書き換え可能な記憶装置に保存されている前記レジスタの情報を前記処理部のレジスタに保存するステップと、前記第2のプログラムモジュールを再度実行するステップと、を実行させるためのソフトウェアであることを特徴とする請求項1乃至3のいずれか一つに記載の制御装置。前記書き換え可能な記憶装置は、さらに、前記複数のプログラムモジュールそれぞれを実行する際に必要となるクロック数の推定値である推定実行クロック数を定義する推定実行クロック情報を動作時にロードし、前記制御ソフトウェアは、前記処理部に、前記第1のプログラムモジュールの推定実行クロック数と前記第2のプログラムモジュールの推定実行クロック数とを加えた値である加算クロック数と、前記実行単位クロック数とを比較するステップと、前記加算クロック数が前記実行単位クロック数より小さい場合、前記第1のプログラムモジュールの終了後、前記処理部をリセットすることなく、前記第2のプログラムモジュールを実行するステップと、を実行させるためのソフトウェアであることを特徴とする請求項1乃至4のいずれか一つに記載の制御装置。前記制御ソフトウェアは、前記処理部に、前記処理部がリセットされる時間の間隔を変更するステップを実行させるためのソフトウェアであることを特徴とする請求項1乃至5のいずれか一つに記載の制御装置。前記マシン語は、前記マシン語における1又は2以上の命令グループに基づいて、分割されていることを特徴とする請求項1乃至6のいずれか一つに記載の制御装置。前記マシン語は、前記実行単位時間及び前記処理部のクロック周波数から計算される実行単位クロック数に基づいて、分割されていることを特徴とする請求項1乃至6のいずれか一つに記載の制御装置。前記マシン語は、前記実行単位時間及び前記処理部のクロック周波数から計算される実行単位クロック数と前記マシン語における1又は2以上の命令グループとに基づいて、分割されていることを特徴とする請求項1乃至6のいずれか一つに記載の制御装置。前記制御装置は、マイクロコンピュータであることを特徴とする請求項1乃至9のいずれか一つに記載の制御装置。前記マイクロコンピュータは、ワンチップ上で実装されることを特徴とする請求項10に記載の制御装置。前記処理部は、中央処理装置CPUであることを特徴とする請求項1乃至11のいずれか一つに記載の制御装置。前記書き換え可能な記憶装置は、RAMであることを特徴とする請求項1乃至12のいずれか一つに記載の制御装置。前記制御ソフトウェアは、オペレーティングシステムOSであることを特徴とする請求項1乃至13のいずれか一つに記載の制御装置。前記書き換え可能な記憶装置は、複数の時点における前記処理部のレジスタの情報を保存することを特徴とする請求項1乃至14のいずれか一つに記載の制御装置。一又は二以上のソースコードをマシン語にコンパイルするステップと、前記マシン語を実行するために必要なクロック数を計算するステップと、前記マシン語における1又は2以上の命令グループを単位として前記マシン語を分割し、さらに、前記必要なクロック数が前記マシン語の1つのグループを実行するために費やすことができる時間である実行単位時間に基づく実行単位クロック数より小さい又は等しくなるよう前記マシン語を分割し、複数のプログラムモジュールを作成するステップと、前記複数のプログラムモジュールそれぞれの実行順序を定義する実行順序情報を作成するステップと、を含むことを特徴とするコンピュータプログラムのコンパイル方法。前記マシン語を実行するコンピュータが有する処理部のクロック周波数と前記実行単位時間とに基づいて、前記実行単位クロック数を計算するステップをさらに含むことを特徴とする請求項16に記載のコンパイル方法。前記複数のプログラムモジュールそれぞれを実行する際に必要となるクロック数を推定し、各推定実行クロック数を定義する推定実行クロック情報を作成するステップをさらに有することを特徴とする請求項16及び17のいずれか一つに記載のコンパイル方法。連続して実行される2以上のプログラムモジュールの推定実行クロック数の合計が、前記実行単位クロック数より小さい場合、当該2以上のプログラムモジュールを併合するステップをさらに有することを特徴とする請求項18に記載のコンパイル方法。一又は二以上のソースコードをマシン語にコンパイルするステップと、前記マシン語を実行するために必要なクロック数を計算するステップと、前記必要なクロック数が前記マシン語の1つのグループを実行するために費やすことができる時間である実行単位時間に基づく実行単位クロック数より小さい又は等しくなるよう前記マシン語を分割し、複数のプログラムモジュールを作成するステップと、前記複数のプログラムモジュールそれぞれの実行順序を定義する実行順序情報を作成するステップと、を含むことを特徴とするコンピュータプログラムのコンパイル方法。前記マシン語を実行するコンピュータが有する処理部のクロック周波数と前記実行単位時間とに基づいて、実行単位クロック数を計算するステップをさらに含むことを特徴とする請求項20に記載のコンパイル方法。一又は二以上のソースコードをマシン語にコンパイルするステップと、前記マシン語における1又は2以上の命令グループを単位として、前記マシン語を分割し、複数のプログラムモジュールを作成するステップと、前記複数のプログラムモジュールそれぞれの実行順序を定義する実行順序情報を作成するステップと、を含むことを特徴とするコンピュータプログラムのコンパイル方法。請求項16乃至22のいずれか一つに記載のコンピュータプログラムのコンパイル方法を用いたコンパイラ。本発明は、周期的にCPUがリセットされても動作するプログラムモジュールを作成するためのコンパイラ、そのプログラムモジュールを動作させるためのオペレーティングシステムOS、並びに、それらOS及びプログラムモジュールを動作させるためのマイクロコンピュータを提供する。これにより、マイクロコンピュータのCPUにおける致命的なエラーの発生を削減することできる。また、本発明は、マイクロコンピュータのCPUで致命的なエラーが発生した場合、マイクロコンピュータ全体の初期化又はリセットを行うことなく、CPUのみをリセットすることによって、マイクロコンピュータのCPUを致命的なエラー状態から極めて短時間に復帰させることを目的とする。さらに、本発明は、マイクロコンピュータ上で実行中の応用プログラムに影響を与えることなく、CPUをリセットすることを目的とする。そして、本発明によって、プログラムモジュールの実行時間が、CPUがリセットされる周期に基づいて調整されることから、応用プログラムの作成者は、リセットの周期を意識することなく応用プログラムの作成を行うことができる。本発明による制御装置は、処理部と、処理部とバスを介して接続されている主記憶装置であって、一又は二以上のソースコードをコンパイルしたマシン語を分割することによって作成される複数のプログラムモジュール、複数のプログラムモジュールそれぞれの実行順序を定義する実行順序情報、及び、制御ソフトウェアを動作時にロードする主記憶装置と、処理部をリセットする処理部リセット手段と、を備え、制御ソフトウェアは、処理部に、複数のプログラムモジュールにおける第1のプログラムモジュールを実行するステップと、処理部のレジスタの情報を主記憶装置に保存するステップと、を実行させ、制御ソフトウェアは、処理部リセット手段が処理部をリセットした後、さらに、処理部に、主記憶装置に保存されているレジスタの情報を処理部のレジスタに保存するステップと、第1のプログラムモジュールの次に実行すべきと実行順序情報に定義されている第2のプログラムモジュールを実行するステップと、を実行させることができる。処理部リセット手段は、処理部が複数のプログラムモジュールの1つを実行するために費やすことができる時間である実行単位時間より長い時間である所定の周期で処理部をリセットすることができる。本発明による制御装置において、制御ソフトウェアは、処理部に、第1のプログラムモジュールの実行が実行単位時間内に終了しない場合、処理部リセット手段による処理部のリセットを停止するステップを実行させるようにすることができる。本発明による制御装置において、制御ソフトウェアは、第2のプログラムモジュールが実行され、処理部リセット手段によって処理部がリセットされた後、処理部に、第2のプログラムモジュールが正常に終了したか否かを判定するステップと、第2のプログラムモジュールが正常に終了しなかった場合、主記憶装置に保存されているレジスタの情報を処理部のレジスタに保存するステップと、第2のプログラムモジュールを再度実行するステップと、を実行させるようにすることができる。本発明による制御装置において、主記憶装置は、さらに、複数のプログラムモジュールそれぞれを実行する際に必要となるクロック数の推定値である推定実行クロック数を定義する推定実行クロック情報を動作時にロードし、制御ソフトウェアは、処理部に、第1のプログラムモジュールの推定実行クロック数と第2のプログラムモジュールの推定実行クロック数とを加えた値である加算クロック数と、実行単位クロック数とを比較するステップと、加算クロック数が実行単位クロック数より小さい場合、第1のプログラムモジュールの終了後、処理部をリセットすることなく、第2のプログラムモジュールを実行するステップと、を実行させるようにすることができる。本発明による制御装置において、制御ソフトウェアが、処理部に、処理部がリセットされる時間の間隔を変更するステップを実行させるようにすることができる。本発明による制御装置において、マシン語は、マシン語における1又は2以上の命令グループに基づいて、分割されているようにすることができる。本発明による制御装置において、マシン語は、実行単位時間及び処理部のクロック周波数から計算される実行単位クロック数に基づいて、分割されているようにすることができる。本発明による制御装置において、マシン語は、実行単位時間及び処理部のクロック周波数から計算される実行単位クロック数とマシン語における1又は2以上の命令グループとに基づいて、分割されているようにすることができる。本発明による制御装置は、マイクロコンピュータであるようにすることができる。本発明による制御装置であるマイクロコンピュータが、ワンチップ上で実装されるようにすることができる。本発明による制御装置は、処理部が、中央処理装置CPUであるようにすることができる。本発明による制御装置は、主記憶装置が、RAMであるようにすることができる。本発明による制御装置は、制御ソフトウェアが、オペレーティングシステムOSであるようにすることができる。本発明による制御装置は、主記憶装置が、複数の時点における処理部のレジスタの情報を保存するようにすることができる。本発明によるコンピュータプログラムのコンパイル方法は、一又は二以上のソースコードをマシン語にコンパイルするステップと、マシン語を実行するために必要なクロック数を計算するステップと、マシン語における1又は2以上の命令グループを単位として、マシン語を分割し、さらに、必要なクロック数がマシン語の1つのグループを実行するために費やすことができる時間である実行単位時間に基づく実行単位クロック数より小さい又は等しくなるようマシン語を分割し、複数のプログラムモジュールを作成するステップと、複数のプログラムモジュールそれぞれの実行順序を定義する実行順序情報を作成するステップと、を含む。本発明によるコンピュータプログラムのコンパイル方法は、マシン語を実行するコンピュータが有する処理部のクロック周波数と実行単位時間とに基づいて、実行単位クロック数を計算するステップをさらに有するようにすることができる。本発明によるコンピュータプログラムのコンパイル方法は、複数のプログラムモジュールそれぞれを実行する際に必要となるクロック数を推定し、各推定実行クロック数を定義する推定実行クロック情報を作成するステップをさらに有するようにすることができる。本発明によるコンピュータプログラムのコンパイル方法は、連続して実行される2以上のプログラムモジュールの推定実行クロック数の合計が、実行単位クロック数より小さい場合、2以上のプログラムモジュールを併合するステップをさらに有するようにすることができる。本発明によるコンピュータプログラムのコンパイル方法は、一又は二以上のソースコードをマシン語にコンパイルするステップと、マシン語を実行するために必要なクロック数を計算するステップと、必要なクロック数がマシン語の1つのグループを実行するために費やすことができる時間である実行単位時間に基づく実行単位クロック数より小さい又は等しくなるようマシン語を分割し、複数のプログラムモジュールを作成するステップと、複数のプログラムモジュールそれぞれの実行順序を定義する実行順序情報を作成するステップと、を含むようにすることができる。本発明によるコンピュータプログラムのコンパイル方法は、マシン語を実行するコンピュータが有する処理部のクロック周波数と実行単位時間とに基づいて、実行単位クロック数を計算するステップをさらに含むようにすることができる。本発明によるコンピュータプログラムのコンパイル方法は、一又は二以上のソースコードをマシン語にコンパイルするステップと、マシン語における1又は2以上の命令グループを単位として、マシン語を分割し、複数のプログラムモジュールを作成するステップと、複数のプログラムモジュールそれぞれの実行順序を定義する実行順序情報を作成するステップと、を含むようにすることができる。本発明によるコンパイラは、上述のコンピュータプログラムのコンパイル方法を用いることができる。マイクロコンピュータのCPUで致命的なエラーが発生しているのを早期に検出し、致命的なエラーからの復帰を可能とすることによって、マイクロコンピュータを用いた応用装置が異常な動作時には危険であったりする誤動作を大幅に低減することができる。特に、自動車、飛行機、船舶、産業用ロボットなどの分野で用いられる機械系を制御する機器において、それら機器の誤動作は大事故に繋がる恐れがある例えば、自動車のブレーキ制御やステアリング制御など。本発明によるマイクロコンピュータのCPUの致命的なエラーからの復帰に必要な時間は、機械系を制御する機器における誤動作の検出及びその誤動作からの復帰に必要な時間と比較してはるかに短い。よって、マイクロコンピュータのCPUの致命的なエラーに起因するこれら機器の誤動作の検出及びその誤動作から復帰させるための処理を、機器ではなくマイクロコンピュータで行うことは有用である。また、上記分野において、電気的なノイズなどの致命的なエラーを生じさせる原因は他の分野の機器と比べてより多く発生する。したがって、機械系を制御する機器に本発明を用いることによって、電気的なノイズなどのための従前の多くの対策を大幅に軽減でき、さらに、従前より強固な対策が行えるため、コスト低下と信頼性の向上を併せて図ることができる。また、マイクロコンピュータのCPUにおいて致命的なエラーが継続的に発生している場合、継続的なCPUの致命的なエラーを検出し、その検出結果に基づいて、機器の誤動作を警告するための情報を入出力インタフェースを介して提供することもできる。更に、本発明は、マイクロコンピュータのCPUで致命的なエラーが発生した場合、マイクロコンピュータ全体をリセットするのではなく、CPUのみをリセットすることから、致命的なエラーからの復帰を極めて短い時間で行うことができる。また、本発明は、CPUで致命的なエラーが発生した時に実行されていた応用プログラムを中断した後、CPUをリセットし、そして、その致命的なエラーが発生する前の時点から応用プログラムの実行を再開することができる。本発明の活用が期待される分野における一例を挙げれば、エレベーターが動作中に、落雷、電源のノイズ、設計上の不備によるノイズによって、エレベーターの制御を行うマイクロコンピュータのCPUに致命的なエラーが発生し、そして、そのCPUによってエレベーターが誤動作した場合であっても、エレベーターのマイクロコンピュータに本発明のマイクロコンピュータを採用することによって、エレベーターを安定した状態の動作に極めて短い時間で復帰させることができる。図1は従来のコンパイラによるプログラムモジュールの作成過程の概要を示した図である。従来技術において、コンパイラ105は、ソースコードソースプログラム、コンピュータプログラム、原始プログラムなどとも称される100をコンパイルすることによって、目的プログラムオブジェクトモジュールなどとも称される105を作成する。そして、リンカ連係編集プログラム、リンケージエディタなどとも称される120が目的プログラム110とライブラリ115などをリンク連係編集とも称されるさせることによって、通常1つのプログラムモジュール実行モジュール、実行形式モジュール、実行可能モジュール、ロードモジュールなどとも称される125を作成する。図2は本発明の一実施例に係るコンパイラによるプログラムモジュールの作成過程の概要を示した図である。従来技術では、1つのプログラムモジュール125が作成されているのに対し、本実施例では、リンカ220によって、複数のプログラムモジュール225乃至240が作成される。本実施例では、複数のプログラムモジュールを作成することによって、それらモジュールを実行するときに、プログラムモジュール1225が完了した後、かつ、プログラムモジュール2230を実行するまでの間の時間に、CPUをリセットするなどのプログラムモジュールの処理とは異なる処理の実行が可能となる。通常、プログラムモジュールは、コンパイル及びリンクなどを行うことによって作成される。しかしながら、ソースコードからプログラムモジュールの作成までの過程は、用いるコンピュータ言語などに依存して変化することがある。したがって、本明細書及び特許請求の範囲において、特に言及が無い限り、ソースコードからプログラムモジュールを作成する過程は、コンパイルによって行われるものとして説明する。以下、プログラムモジュールを分割することを可能にするコンパイラ及びそのコンパイラによって作成されたプログラムモジュールの制御方法、及び、その制御方法を実現するマイクロコンピュータの動作について説明する。コンパイラ図3は、本発明の一実施例に係るコンパイラの動作を示したフロー図である。最初にコンパイラは、応用プログラムアプリケーションプログラムなどのソースコードを読み取りステップ310、ソースコードをコンパイルするステップ313。これにより、目的プログラムが生成される。コンパイルは、例えば、ソースコードの字句解析、構文解析、及び、意味解析などを行う。コンパイラは、目的プログラム又はソースコードをマシン語機械語、マシンコードなどとも称されるに変換するステップ315。ここで、マシン語とは、CPUなどのプロセッサが直接解釈及び実行できる言語である。さらに、ステップ315において、コンパイラは、必要に応じて、マシン語とライブラリなどをリンクさせる。コンパイラは、実行単位時間及びCPUのクロック周波数に基づいて、実行単位クロック数を計算するステップ320。具体的には、実行単位時間にCPUのクロック周波数を乗算することによって、実行単位クロック数を得ることができる。ここで、実行単位時間とは、マシン語を実行するために費やすことができる時間を意味する。また、実行単位時間は、CPUがリセットされる所定の周期後述するより短い時間である。例えば、実行単位時間は、マシン語を実行するための前処理及び後処理に必要な時間を所定の周期から差し引いた時間である。CPUのクロック周波数は、プログラムモジュールを実装するマイクロコンピュータにおけるCPUの周波数である必要がある。一実施例において、特定の周波数のCPUを有するマイクロコンピュータにプログラムモジュールを実装する場合、実行単位クロック数は固定の値とすることができる。この場合、固定の値である実行単位クロック数は、特定の周波数及び所定の実行単位時間に基づく値とすることができる。実行単位クロック数の計算例として、実行単位時間が20ms、CPUのクロック周波数が1GHzである場合、実行単位クロック数は、0.021,000,000,000によって、20,000,000となる。コンパイラは、命令グループを単位として、マシン語を分割するステップ325。命令グループの例としては、1つの命令グループを、複数のソースコード、1つのソースコード、ソースコードにおける1つの条件分岐命令又は繰返し命令、又は、下位の関数などに対応させることができる。命令グループについて、1つのソースコードであるサンプルソースコード1を用いて説明する。サンプルソースコード11intexampleFunc12intn503inta245if6nnargNumber78else910nn1111213for14printf151617for18printf192021return0221つのソースコードが命令グループの1つとする場合、上記サンプルコードの1乃至22行目に相当するマシン語全てが命令グループの1つに相当する。条件分岐命令が命令グループの1つとする場合、条件分岐命令であるif文の5乃至11行目に相当するマシン語を1つの命令グループとする。また、5乃至7行目に相当するマシン語を1つの命令グループ、8乃至11行目に相当するマシン語を1つの命令グループとしてもよい。繰返し命令が命令グループの1つとする場合、繰返し命令であるfor文の13乃至15行目に相当するマシン語を1つの命令グループとする。また、17乃至19行目に記載されている繰返し命令は、変数aが2であることからつまり、変数aは静的な値、この繰返し命令は、必ず2回繰り返される。このような場合、2回分の繰返し命令を1つの命令グループとしてもよい。下位の関数が命令グループの1つとする場合、14行目に記載されている関数printfに相当するマシン語を1つの命令グループとする。コンパイラは、分割されたマシン語を実行するのに必要なクロック数を計算するステップ330。マシン語において、各命令を実行するのに必要なクロック数は既知である。したがって、各命令に対応するクロック数から分割されたマシン語の全部又は一部を実行するのに必要なクロック数を計算することができる。他の実施例において、各命令を実行するのに必要なクロック数の対応テーブルを予め作成しておき、コンパイラは、対応テーブルを参照することによって、クロック数を計算することができる。コンパイラは、実行単位クロック数に基づいて、ステップ325で分割されたマシン語をさらに分割するステップ335。ステップ325で分割されたマシン語を実行するのに必要なクロック数が実行単位クロック数より大きい場合、ステップ325で分割されたマシン語をさらに分割する。他の実施例として、ステップ335において分割されたマシン語を実行するのに必要なクロック数が実行単位クロック数より大きい場合は、マシン語を実行するのに必要なクロック数が実行単位クロック数と等しい及び/又はより小さくなるまで、ステップ330及び335を繰り返してもよい。他の実施例において、コンパイラは、ステップ325又はステップ335のどちらか一方のみを実行するようにしてもよい。これにより、マシン語は、命令グループ又は実行単位クロック数のどちらか一方のみに基づいて分割される。コンパイラは、分割したマシン語から複数のプログラムモジュールを作成するステップ340。コンパイラは、各プログラムモジュールの実行順序を決定し、実行順序情報を作成するステップ345。そして、コンパイラは、複数のプログラムモジュールそれぞれに相当するマシン語を実行するのに必要なクロック数を推定実行クロック数として計算し、推定実行クロック情報を作成するステップ350。各プログラムモジュールは、それ自体の実行順序情報及び/又は推定実行クロック情報を有するようにすることができる。他の実施例において、実行順序情報及び/又は推定実行クロック情報は、各プログラムモジュールに関連付けされ、後述する図6に記載のマイクロコンピュータ600のRAM601又はROM610に専用テーブルとして保存される。ステップ325において、1つのソースコードが1つの命令グループとして定義された場合、実行順序は、第1のプログラムモジュールに1、第1のプログラムモジュールの次に実行されるモジュールである第2のモジュールに2が設定される。また、ステップ335において、実行単位クロック数に基づいて、第1のプログラムモジュールがさらに分割された場合、実行順序は、1-1、1-2などのように設定される。ステップ325において、1つの条件分岐命令が1つの命令グループとして定義された場合を以下のサンプルソースコード2を用いて説明する。例えば、1乃至3行目に相当するマシン語を含むプログラムモジュールの実行順序は1、4乃至6行目に相当する実行順序は2、7乃至10行目に相当する実行順序は3、11乃至12行目に相当する実行順序は4などとすることができる。サンプルソースコード21intexampleFunc22intn503inta24if5nnargNumber67else89nn11011return012ステップ325において、1つの繰返し命令が1つの命令グループとして定義された場合の例を以下のサンプルソースコード3を用いて説明する。例えば、1乃至2行目に相当するマシン語を含むプログラムモジュールの実行順序は1、3乃至5行目に相当する実行順序は2、6乃至7行目に相当する実行順序は3とすることができる。さらに、サンプルソースコード3の3行目にforと記載されているように、iが0及び1の時に3乃至5行目の繰返し命令が実行されることから、この繰返し命令の処理は必ず2回実行される。したがって、3乃至5行目において、1回目に実行されるマシン語を含むプログラムモジュールの実行順序は2-1、2回目に相当する実行順序は2-2とすることができる。サンプルソースコード31intexampleFunc32intn503for4printf56return07さらに、繰返し命令の実行回数が動的に変化する場合の例を以下のサンプルソースコード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の識別子には、それぞれ、exampleFunc41、exampleFunc42、exampleFunc43を設定し、2乃至4行目に相当するプログラムモジュールには、実行時に動的に変化することを示す動的変化フラグをオン値が1に設定することができる。サンプルソースコード41intexampleFunc42for3printf45return06他の実施例において、図4のテーブルに記載のプログラムモジュール識別子及び実行順序を組み合わせた値を実行順序として用いてもよい。これにより、この実行順序は、ユニークな値とすることができる。他の実施例において、ステップ350の処理の後、2以上のプログラムモジュールの推定実行クロック数の合計が、実行単位クロック数より小さい場合、2以上のプログラムモジュールを併合してもよい。また、2以上のプログラムモジュールのいずれかの処理内容又は処理回数及び実行時間が実行時に動的に変化する図4に示す動的変化フラグがオンである場合、プログラムモジュールの併合を中止することができる。他の実施例において、コンパイラは、後述する図6に記載のマイクロコンピュータにおいて用いられるようにすることができる。コンパイラ及びコンパイラが用いる各種パラメータなどは、マイクロコンピュータの主記憶装置RAMやROMに予め保存しておくことができる。他の実施例において、コンパイラ及びコンパイラが用いる各種パラメータなどは、図5に記載されているようなコンピュータ端末用のRAM525、ROM530、ハードディスク535、又は、リムーバブルディスク540など以下、記憶装置550とするに保存されていてもよい。コンピュータ端末用CPU505が、ソフトウェアとして記憶装置550に保存されているコンパイラを実行することによって、記憶装置550に保存されているソースコードをコンパイルし、複数のプログラムモジュールを作成し、記憶装置550のいずれかに保存することができる。さらに、コンピュータ端末500は、コンパイルするソースコード及び/又は複数のプログラムモジュールをリムーバブルディスク540に保存する及び/又はディスク540から読み取ることができる。コンピュータ端末500は、コンピュータ端末用入力装置510及び表示装置515を有する。コンピュータ端末用入力装置510の例としては、キーボード、ポインティングデバイス、音声認識入力装置などがある。これにより、ユーザは、コンパイルの実行の命令やコンパイル時に用いられるパラメータ実行単位時間、CPUのクロック周波数などの入力を行うことができる。表示装置515の例としては、ブラウン管CRTディスプレイ、液晶デイスプレイLCDなどがある。これにより、ユーザは、表示装置515に提示されるグラフィックユーザインタフェースを介して、コンパイラを操作することができる。コンピュータ端末500は、入出力インタフェース545を有し、このインタフェースを介して図6に記載の入出力ポート625に接続することができる。これにより、コンピュータ端末500上の入力装置510や表示装置515などの資源を用いて、マイクロコンピュータ600上でコンパイルを実行することができる。本実施例の説明では、説明を理解し易くするために、複数のプログラムモジュールのファイルを物理的に生成する例えば、図2の225乃至240参照実施例を用いた。しかしながら、当業者であれば理解可能であるように、区切り文字などの所定の規則を用いて、プログラムモジュールそれぞれの境界を明らかにすることによって、1つの物理ファイルを論理的に複数のプログラムモジュールとして用いることもできる。マイクロコンピュータ図6は、本発明の一実施例に係るマイクロコンピュータの全体を示したブロック図である。ここで、マイクロコンピュータ600は、中央処理装置CPU601、主記憶装置RAM605、ROM610、通信用回路615、ユニバーサルカウンタタイマ620、入出力ポート625、パワースイッチ627、論理和回路OR回路630、システムリセット入力635、CPUリセット入力637、クロック発生回路640、タイマカウンタ回路645、違法命令及び無効命令検出回路655、領域外アクセス検出回路660、ウオッチドッグ回路665、電源監視回路670を備える。マイクロコンピュータ600の各要素は、必要に応じて、バスと接続されている。一実施例において、マイクロコンピュータは、ワンチップ上で実装することができる。システムリセット入力635は、電源が投入されたときなどに、システムリセット用信号を発生させ、システムリセット用バス675を介してシステムリセット用信号を送信する。システムリセット用信号は、マイクロコンピュータ全体をリセットさせるための信号である。システムリセット用信号は、CPU601のみではなく、例えば、入出力ポート625、通信回路615、ユニバーサルカウンタタイマ620などをリセットするためにも用いられる。CPUリセット入力637は、CPUリセットを発生させ、CPUリセット用バス680を介してシステムリセット用信号を送信する。CPUリセットは、CPUのみをリセットさせるための信号である。違法命令及び無効命令検出回路655、及び、領域外アクセス検出回路660は、それぞれ、CPU601が正常に動作しているか否かを判定する。CPU601が正常に動作していないと判定された場合、違法命令及び無効命令検出回路655、又は、領域外アクセス検出回路660は、CPUリセット用バス680を介してCPU601にCPUリセット用信号を送信し、CPU101をリセットする。ウオッチドッグ回路665、及び、電源監視回路670は、それぞれ、CPU601が正常に動作しているか否かを判定する。CPU601が正常に動作していないと判定された場合、ウオッチドッグ回路665、又は、電源監視回路670は、システムリセット用バス675を介してCPU601や通信回路615などにシステムリセット用信号を送信し、マイクロコンピュータ600全体をリセットする。クロック発生回路640は、システムのクロック信号を発生させる回路である。タイマカウンタ回路645はCPUリセット信号を発生させる回路である。CPU601は、マイクロコンピュータ600のための制御及び演算を実行する回路である。タイマカウンタ回路645は、クロック発生回路640から供給されるクロック信号を予め設定されているカウント上限値に到達するまでカウントする。そして、タイマカウンタ回路645は、カウントした値がカウント上限値に到達したとき、CPUリセット信号を発生させ、CPU601に供給する。その後、タイマカウンタ回路645は、そのカウントした値をクリアし、再度、クロック信号をカウントする。これにより、周期的にCPUリセット信号がCPU601に供給される。したがって、その周期は、クロック発生回路のクロック周波数及びカウント上限値によって決定する。他の実施例において、CPU601は、タイマカウンタ回路645に接続されており、カウント上限値を変更することができる。カウント上限値を変更することにより、周期を変更することができる。他の実施例において、タイマカウンタ回路645は、内部にレジスタを有していてもよい。CPU601は、マイクロコンピュータ600の電源投入時などにカウント上限値をタイマカウンタ回路645に供給し、タイマカウンタ回路645は、カウント上限値をレジスタに保存することができる。図7及び図8は、第1の実施例によるマイクロコンピュータの動作を示したフロー図である。CPU601は、マイクロコンピュータの動作を制御するためのオペレーティングシステムOSがRAM605上にロードされた後、そのOSに定義されている指示を実行する。CPU601は、始めに、上記のコンパイラで作成された複数のプログラムモジュールをRAM605上にロードするステップ705。また、それら複数のプログラムモジュールに関連する実行順序情報もRAM605上にロードされる。さらに、他の実施例において、それら複数のプログラムモジュールに関連する推定実行クロック情報がロードされるようにすることもできる。CPU601は、実行順序情報に基づいて、最初に実行すべきプログラムモジュールを特定するステップ710。最初に実行すべきプログラムモジュールは、実行順序が1であるモジュールを検索すること又はその他の規則などによって特定することができる。CPU601は、特定されたプログラムモジュールを実行するステップ715。CPU601は、実行したプログラムモジュールが正常に終了したかを判定するステップ720。この判定は、プログラムモジュールの実行時間が、予めRAM605などに保存されている実行単位時間内であるか否か及び/又は他の規則によって決定される。プログラムモジュールの実行が実行単位時間内に終了しない場合、CPU601にエラーが発生している可能性が高いこと意味する。ステップ720において、プログラムモジュールが正常に終了した場合、終了フラグがオンにセットされるステップ725。終了フラグはRAM605などに保存されるようにすることができる。CPU601は、CPUのレジスタの情報をRAM605に保存するステップ730。ステップ720において、プログラムモジュールが正常に終了していなかった場合、終了フラグは、オンにセットされない。CPU601はリセット待ちの状態となるステップ735。そして、タイマカウンタ回路645が、CPUリセット信号をCPU601に供給し、CPUはリセットされるステップ740。ステップ710乃至740は、CPU601がリセットされる周期内に完了するようにすることができる。また、ステップ710乃至740は、CPU601がリセットされる周期内に完了しない場合、CPU601がリセットされる前にCPUのレジスタの情報をRAM605に保存し、CPU601は、リセットからの復帰後、RAM605に保存されている情報をCPUのレジスタに保存する必要がある。さらに、CPU601は、ステップ710乃至740の間に、NMINonMaskableInterruptなどの割込み要求を受け付けることができる。CPU601は、リセットされた後、割込み要求があるか否か判定するステップ805。割込み要求がある場合、CPU601は、割込み要求に関連するプログラムモジュールを実行するステップ810。終了フラグがオンに設定されているか否かを判定するステップ815。終了フラグがオンである場合、CPU601は、終了フラグをオフに設定するステップ820。今回実行するプログラムモジュールの実行順序を特定するために、前に実行したプログラムモジュールの実行順序をインクリメントするステップ825。実行順序情報例えば、図4の実行順序が1、2、3のような数値であり、前に実行したプログラムモジュールの実行順序が2である場合、今回実行するプログラムモジュールの実行順序は、3となる。他の実施例において、実行順序の値が他の規則によって与えられている場合、その規則に従い、実行すべきプログラムモジュールを特定することができる。CPU601は、実行順序に関連するレジスタの情報ステップ730又は850でRAM605保存された情報をレジスタに保存するステップ830。CPU601は、実行順序に関連するプログラムモジュールを実行するステップ835。ステップ835において、終了フラグがオフであった場合、実行順序がインクリメントされないため、前に実行されたプログラムモジュールが再度、実行されるステップ835。終了フラグがオフである場合の例としては、ステップ720において、プログラムモジュールの実行時間が実行単位時間を越えていたと判断された場合、又は、違法命令及び無効命令検出回路655又は領域外アクセス検出回路660が、ステップ720が実行される前に、CPU601が正常に動作していないと判断し、CPUリセット信号をCPU601に供給した場合などである。CPU601は、プログラムモジュールが実行された後ステップ810及び835、実行したプログラムモジュールが正常に終了したかを判定するステップ840。処理の内容は、図7のステップ720と同じ処理である。ステップ840において、プログラムモジュールが正常に終了した場合、CPU601は、終了フラグをオンにセットするステップ845。CPU601は、CPUのレジスタの情報をRAM605に保存するステップ850。他の実施例として、ステップ850において、CPU601は、次に実行すべきプログラムモジュールの実行順序を特定し、レジスタの情報と実行順序とを実行順序情報としてRAM605に保存することができる。これにより、複数のプログラムモジュールそれぞれに関連するレジスタの情報をRAM105に保存し、CPU601は、プログラムモジュールに関連するレジスタの情報をより簡単に特定することができる。CPU601はリセット待ちの状態となるステップ855。そして、タイマカウンタ回路645が、CPUリセット信号をCPU601に供給し、CPUはリセットされるステップ860。ステップ860の完了後、処理フローは、ステップ805に戻る。図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に示す時間の間隔は例示の目的で示しており、実際の動作に必要な時間を示したものではない。時刻t1において、CPU601はリセットされ図7のステップ740及び図8のステップ860に相当、CPUのレジスタの情報はリセットされる状態905。時刻t1のレジスタの情報R0は、レジスタの情報がリセットされていることを示す。時刻t2において、CPU601がOSの処理を実行する状態910。これにより、RAM605に保存されていたレジスタの情報R1がレジスタにコピー又は保存される図8のステップ830に相当。時刻t3において、CPU601がプログラムモジュールの処理を実行状態915し、レジスタの情報がR2に更新される図7のステップ715及び図8のステップ810及び835に相当。時刻t4において、CPU601は、レジスタの情報R2をRAM605に保存し図7のステップ730及び図8のステップ850に相当、プログラムモジュールが正常に終了していた場合、終了フラグをオンにセットする状態920、図7のステップ725及び図8のステップ845に相当。時刻t5において、CPU601をリセットすることによって、CPUのレジスタの情報はリセットされ状態925、レジスタの情報がR0となる。時刻t6乃至t9において実行される処理は、時刻t2乃至t5における処理と同様である。時刻t10において、終了フラグがオフであると判定された場合状態945、図8のステップ815に相当、前回実行したプログラムモジュール状態935を再度実行するために、RAMに保存されているレジスタの情報R3ではなく、レジスタの情報R2をレジスタに保存する状態950。その後、CPU601は、レジスタの情報R2を用いて、前回実行したプログラムモジュールを再度実行する状態955。プログラムモジュールを再度実行した後、終了フラグが依然オフであると判定された場合、CPU601は、レジスタの情報R2の代わりにレジスタの情報R1を用いることもできる。これにより、CPU601は、RAM605に保存されている複数の時点のレジスタの情報を用いることによって、それらレジスタの情報のうちの一つに関連するプログラムモジュールを再実行することができる。したがって、マイクロコンピュータ600は、CPU601にエラーが発生していない時点の状態へ復帰することができる。図10は、プログラムモジュールの併合前後のCPU601の制御の推移を示す第2の実施例についてのタイムチャートである。プログラムモジュールを実行するための実行時間が、実行単位時間より短い場合、CPU601が動作しない時間が多くなるため、プログラムの実行効率が悪くなる。そこで、本実施例によって、プログラムの実行効率を改善させることができる。図10のプログラムモジュール併合前のタイムチャートを参照すると、実行単位時間が時刻t3からt5及び時刻t8からt10であるときCPUをリセットする周期はそれぞれ、時刻t1からt6及び時刻t6からt11に、第1のプログラムモジュールを実行するのに実際に必要な実行時間が時刻t3からt4状態1015、その後に実行される第2の実行モジュールの実行時間が時刻t8からt9状態1040であることが示されている。このような場合に、CPU601は、第1及び第2のプログラムモジュールに関連する推定実行クロック数の和を計算し、推定実行クロック数の和と実行単位クロック数とを比較する。推定実行クロック数の和が、実行単位クロック数より小さい場合、CPU601は、第1のプログラムモジュールを実行する前状態1010に、第1及び第2のプログラムモジュールを併合し、1つの実行単位時間時刻t3からt5の間に第1及び第2のプログラムモジュールを実行する。図10のプログラムモジュールの併合後のタイムチャートを参照すると、時刻t3からt5の間で、第1及び第2のプログラムモジュールが実行されていることが分かる状態1015及び1040。図10のプログラムモジュールの併合前のタイムチャートでは、時刻t13からt14の間で第3のプログラムモジュール状態1060は実行されていたが、図10のプログラムモジュールの併合後のタイムチャートでは、時刻t8からt10の間で実行される。第3のプログラムモジュールは、より早い時刻に実行されることから、プログラムの実行効率が改善される。他の実施例において、併合対象のプログラムモジュールのいずれかの処理内容又は処理回数及び実行時間が実行時に動的に変化する図4に示す動的変化フラグがオンである場合、プログラムモジュールの併合を中止することができる。画像や動画などのような大容量のデータを扱うプログラムモジュールにおいて、実行時にプログラムモジュールの実行時間が変動することが考えられる。そして、その実行時間が、実行単位時間を越える可能性も有り得る。このような場合、実行単位時間を越えてプログラムモジュールの実行を継続するために、タイマカウンタ回路645は、CPU601へのCPUリセット信号の供給を停止する。例えば、CPU601は、タイマカウンタ回路645に設定されているカウント上限値を2倍又はそれ以上の値又はその他の適切な値に変更することによって、CPUリセット信号の供給を停止することができる。これにより、実際の実行時間が実行単位時間を越えてしまうプログラムモジュールの実行中にCPUのリセットが起こらないようにすることができる。また、本実施例を適用するプログラムモジュールは、図4に示すような動的変化フラグがオンとなっているか否かによって決定することができる。あるプログラムモジュールの推定実行クロック数に相当する時間以下、推定実行時間が、CPU601をリセットする周期CPU601がリセットされる間隔よりはるかに短い場合、推定実行クロック数に相当する処理が実行された後、プログラムモジュールの実行に割当てられたクロック数の残り実行単位クロック数-推定実行クロック数に相当する時間の間、CPU601は、他のプログラムモジュールを実行することができない。このような場合に、CPU601は、プログラムモジュールを実行するときに、CPUがリセットされる間隔を推定実行時間に近い時間に変更する。これにより、プログラムモジュールの実行後、すぐにCPU601がリセットされ、次のプログラムモジュールを実行することができる。したがって、本実施例によって、プログラムモジュールの実行効率が改善される。CPUがリセットされる間隔を変更する例として、CPU601は、タイマカウンタ回路645に設定されているカウント上限値を変更し、タイマカウンタ回路645がCPUリセット信号を供給する間隔を変更する。また、推定実行時間が、CPU601がリセットされる間隔より長い場合、CPU601は、CPUがリセットされる間隔を推定実行時間に近い時間に変更する。これにより、プログラムモジュールの実行中にCPU601がリセットされることを防止することができる。本実施例の説明において、CPU601のリセットは、リセット信号を用いて実行されている。しかしながら、リセット信号の代わりに割込み信号を用いて、CPU601をリセとすることも可能である。また、本実施例において、CPU601のリセットとは、CPU601の内部ロジックを特定の状態にする例えば、CPUレジスタの全て又は一部を全てクリアするなどことを意味する。したがって、本実施例において、CPUのリセット信号は、内部ロジックを特定の状態にすることを意味するCPUリセット手段の一例として挙げたに過ぎず、CPUのリセット信号は、考え得る他の手段及び方法などと代替することができる。上記の実施例において示したマイクロコンピュータ600は、特許請求の範囲に記載した制御装置の一例である。制御装置は、マイクロコンピュータとして、ワンチップ上で実装することができるが、必ずしも、ワンチップ上で実装されている必要はない。また、制御装置は、処理部を有する装置として動作する装置例えば、パーソナルコンピュータや、論理回路と処理部とを組み合わせた装置などを含でもよい。上記の実施例において示したCPU601は、特許請求の範囲に記載した処理部の一例である。処理部は、処理装置又は演算処理装置として動作する装置全てを含む。上記の実施例において示したRAM605は、特許請求の範囲に記載した書き換え可能な記憶装置の一例である。書き換え可能な記憶装置は、不揮発性メモリなどの記憶装置であって、書き換えが行える記憶装置全てを含む。特に、書き換え可能な記憶装置は、主記憶装置として用いることが可能な記憶装置である。上記の実施例において示したオペレーティングシステムOSは、特許請求の範囲に記載した制御ソフトウェアの一例である。制御ソフトウェアは、制御装置又はマイクロコンピュータの動作を制御するためソフトウェアである。上記の実施例において、ハードウエアで実現するよう説明されたいくつかの要素の一部又は全ては、ソフトウェアで実現することができ、そして、ソフトウェアで実現するよう説明されたいくつかの要素の一部又は全ては、ハードウエアで実現することができることは理解されるであろう。以上に説明した処理又は動作フローにおいて、あるステップにおいて、そのステップではまだ利用することができないはずのデータを利用しているなどの処理又は動作フロー上の矛盾が生じない限りにおいて、処理又は動作フローを自由に変更することができる。以上に説明してきた各実施例は、本発明を説明するための例示であり、本発明はこれらの実施例に限定されるものではない。本発明は、その要旨を逸脱しない限り、種々の形態で実施することができる。"