(57)【要約】【課題】命令コードの一部を使用することなく、タスクの暴走を迅速に検知することができるマイクロコンピュータシステムを提供する。【解決手段】ＣＰＵ２の制御部７は、ＣＰＵ２がタスクＳを実行している期間にタスク情報信号を出力し、暴走検知部４の領域判定部１３は、タスクＳのプログラムが格納されている内蔵メモリ３の上限アドレス，下限アドレスが設定されているレジスタ１１，１２のレジスタ値とＣＰＵ２が実行中のアドレスとを比較して、後者がタスクＳの実行領域を示すか否かを判定する。そして、暴走検知部４は、領域判定部１０による判定結果とタスク実行信号の出力状態とが不一致である場合に暴走を検知する。【選択図】図１
2008033890.tif 000002
【特許請求の範囲】
【請求項１】
複数のタスクを時分割並行的に実施可能であると共に、それらの内１つのタスクは、システム上の重要度が最高に設定されている最重要タスクであり、
ＣＰＵが前記最重要タスクを実行している期間に、タスク実行信号を出力する信号出力部と、
前記最重要タスクのプログラムが格納されているメモリ領域の開始アドレス，終了アドレスを書込み設定するための開始アドレスレジスタ並びに終了アドレスレジスタと、
これらのアドレスレジスタの設定値と、前記ＣＰＵが実行中のアドレスとを比較することで、前記最重要タスクのプログラム領域であるか否かを判定するプログラム領域判定部と、
このプログラム領域判定部による判定結果と前記タスク実行信号の出力状態とを参照して、双方が不一致である場合に暴走を検知する暴走検知部とを備えることを特徴とするマイクロコンピュータシステム。
【請求項２】
前記最重要タスクのデータが格納されているメモリ領域の開始アドレス，終了アドレスを書込み設定するための開始アドレスレジスタ並びに終了アドレスレジスタと、
これらのアドレスレジスタの設定値と、前記ＣＰＵが実行中のアドレスとを比較することで、前記最重要タスクのデータ領域であるか否かを判定するデータ領域判定部と、
このデータ領域判定部による判定結果と前記タスク実行信号の出力状態とを参照して、双方が不一致である場合に暴走を検知する暴走検知部とを備えることを特徴とする請求項１記載のマイクロコンピュータシステム。
【請求項３】
前記暴走検知部は、前記タスク実行信号がアクティブである場合に、前記領域判定部による判定結果が前記最重要タスクの領域外であることを示すと暴走を検知することを特徴とする請求項１又は２記載のマイクロコンピュータシステム。
【請求項４】
前記暴走検知部は、前記タスク実行信号がインアクティブである場合に、前記領域判定部による判定結果が前記最重要タスクの領域内であることを示すと暴走を検知することを特徴とする請求項１乃至３の何れかに記載のマイクロコンピュータシステム。
【請求項５】
前記開始アドレスレジスタ，前記終了アドレスレジスタの少なくとも何れか一方は、ＭＳＢ（Most Significant Bit）側より１つ以上のビットが予め固定されていることを特徴とする請求項１乃至４の何れかに記載のマイクロコンピュータシステム。
【請求項６】
前記開始アドレスレジスタ，前記終了アドレスレジスタの少なくとも何れか一方は、ＬＳＢ（Least Significant Bit）側より１つ以上のビットも予め固定されていることを特徴とする請求項５記載のマイクロコンピュータシステム。
【請求項７】
前記開始アドレスレジスタ，前記終了アドレスレジスタの少なくとも何れか一方は、全ビットが固定されていることを特徴とする請求項５または６記載のマイクロコンピュータシステム。
【請求項８】
前記暴走検知部は、暴走を検知すると前記開始アドレスレジスタ，前記終了アドレスレジスタをリセットすると共に、前記ＣＰＵに対して割り込みを発生させ、
前記ＣＰＵは、前記暴走の検知に基づく例外処理を実行することを特徴とする請求項１乃至７の何れかに記載のマイクロコンピュータシステム。
【請求項９】
前記ＣＰＵは、前記例外処理において、前記開始アドレスレジスタ，前記終了アドレスレジスタにアドレスデータを再設定することを特徴とする請求項８記載のマイクロコンピュータシステム。
【請求項１０】
前記最重要タスクは、前記ＣＰＵによる実行間隔が基本的に一定となるように設定されており、
前記ＣＰＵは、
前記最重要タスクの各実行周期毎に、当該タスクにおいて管理する監視カウンタの値を「１」ずつ変化させ、
前記最重要タスク以外のタスクにおいては、一定の処理手順毎に、各タスクが共通にアクセス可能な共有データ領域に前記監視カウンタのクリア要求フラグをセットし、
前記最重要タスクにおいて、前記共有データ領域に、前記クリア要求フラグがセットされたことを確認すると、前記監視カウンタの値を初期値にクリアすると共に、前記監視カウンタの値が予め設定された限界値を超えると暴走を検知することを特徴とする請求項１乃至９の何れかに記載のマイクロコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のタスクを時分割並行的に実施可能であると共に、それらの内１つのタスクが最重要タスクに設定されているマイクロコンピュータシステムに関する。
【背景技術】
【０００２】
複数のタスクを時分割並行的に実施可能であるマルチタスク構成のマイクロコンピュータにおいては、それら複数のタスクのうちでシステム的な処理を司るタスク、即ち、最も基層的な処理を行なうタスクの重要度が高くなる。何故なら、その最重要タスクが暴走した場合には、システム全体に多大な影響を及ぼすことになるからである。
【０００３】
一般に、上記のような暴走対策としてはウォッチドッグタイマ機能が周知であるが、ウォッチドッグタイマを用いた場合、暴走が発生してからそれが検知されるまでのタイムラグが比較的大きいため、暴走状態が放置される期間が長くなり、マイクロコンピュータシステムに対して及ぼす影響がより大きくなるおそれがある。
また、特許文献１には、命令コードの一部に判定用のデータを埋め込むようにして、ＣＰＵがフェッチした命令が現在実行すべきタスクの命令か否かを識別する技術が開示されている。
【特許文献１】特開平６−２５０８５５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献１の構成では、有限の命令コードの一部を判定用データとして使用することになり、使用できる命令コード数が制限されてしまうという問題がある。
本発明は上記事情に鑑みてなされたものであり、その目的は、命令コードの一部を使用することなく、タスクの暴走を迅速に検知することができるマイクロコンピュータシステムを提供することにある。
【課題を解決するための手段】
【０００５】
請求項１記載のマイクロコンピュータシステムによれば、信号出力部は、ＣＰＵが最重要タスクを実行している期間にタスク実行信号を出力し、プログラム領域判定部は、最重要タスクのプログラムが格納されているメモリ領域の開始アドレス，終了アドレスが設定されているレジスタ値とＣＰＵが実行中のアドレスとを比較して、最重要タスクのプログラム領域であるか否かを判定する。そして、暴走検知部は、プログラム領域判定部による判定結果とタスク実行信号の出力状態とが不一致である場合に暴走を検知する。従って、ロジック回路により迅速に暴走を検知することができる。また、暴走検知のために特許文献１のように命令コードの一部を用いないので、命令コードの使用数を制限することがない。
【０００６】
請求項２記載のマイクロコンピュータシステムによれば、データ領域判定部は、最重要タスクのデータが格納されているメモリ領域の開始アドレス，終了アドレスが設定されているレジスタ値とＣＰＵが実行中のアドレスとを比較して、最重要タスクのデータ領域であるか否かを判定する。そして、暴走検知部は、データ領域判定部による判定結果とタスク実行信号の出力状態とが不一致である場合に暴走を検知する。従って、最重要タスクのデータ領域に対して不正なアクセスが行われた場合にも、請求項１と同様にして暴走を検知することができる。
【０００７】
請求項３記載のマイクロコンピュータシステムによれば、暴走検知部は、タスク実行信号がアクティブである場合に、領域判定部による判定結果が最重要タスクの領域外であることを示すと暴走を検知する。即ち、このケースでは、最重要タスクのアドレスが何らかの理由により誤って出力されている可能性が高いので、暴走を確実に検知することができる。
【０００８】
請求項４記載のマイクロコンピュータシステムによれば、暴走検知部は、タスク実行信号がインアクティブである場合に、領域判定部による判定結果が最重要タスクの領域内であることを示すと暴走を検知する。即ち、このケースでは、本来は最重要タスク以外タスクのアドレスであるものが、何らかの理由により誤って出力されている可能性が高いので、暴走を確実に検知することができる。
【０００９】
請求項５記載のマイクロコンピュータシステムによれば、開始アドレスレジスタ，終了アドレスレジスタの少なくとも何れか一方について、ＭＳＢ側より１つ以上のビットを予め固定する。即ち、システムの仕様上、最重要タスクのプログラムやデータの配置領域をある程度の範囲に制限しても問題がない場合には、例えば、ノイズなどの影響によってアドレスの上位が変更されないように固定することで、レジスタの一部のビットが影響を受けた場合にアドレスが変動する範囲を制限でき、開始アドレスと終了アドレスとの大小関係の逆転を防止することができる。
【００１０】
請求項６記載のマイクロコンピュータシステムによれば、開始アドレスレジスタ，終了アドレスレジスタの少なくとも何れか一方ついて、ＬＳＢ側より１つ以上のビットも予め固定する。即ち、ＬＳＢ側のビットを固定しても、領域設定の自由度を大幅に制限することにはならないので、ノイズなどの影響による領域の上限−開始アドレス，下限−終了アドレスの変動をより制限することができる。
【００１１】
請求項７記載のマイクロコンピュータシステムによれば、開始アドレスレジスタ，終了アドレスレジスタの少なくとも何れか一方の全ビットを固定する。即ち、開始アドレス，終了アドレスを完全に固定することで、ノイズなどの影響によって終了アドレスが変更されることを回避できる。
【００１２】
請求項８記載のマイクロコンピュータシステムによれば、暴走検知部は、暴走を検知すると開始アドレスレジスタ，終了アドレスレジスタをリセットすると共に、ＣＰＵに対して割り込みを発生させ、前記ＣＰＵは暴走の検知に基づく例外処理を実行する。従って、ＣＰＵは、例外処理においてタスクの暴走状態を解消することで、正常な実行状態を復帰させることができる。
【００１３】
請求項９記載のマイクロコンピュータシステムによれば、ＣＰＵは、例外処理において、開始アドレスレジスタ，終了アドレスレジスタにアドレスデータを再設定する。従って、暴走が発生した場合でも、例外処理を実行することで処理が正常に実行されるように復帰させることができる。
【００１４】
請求項１０記載のマイクロコンピュータシステムによれば、ＣＰＵは、最重要タスクの各実行周期毎に、当該タスクで管理する監視カウンタの値を「１」ずつ変化させ、最重要タスク以外のタスクにおいては、一定の処理手順毎に各タスクが共通にアクセス可能な共有データ領域に監視カウンタのクリア要求フラグをセットする。そして、最重要タスクでは、共有データ領域にクリア要求フラグがセットされたことを確認すると監視カウンタの値を初期値にクリアし、監視カウンタの値が予め設定された限界値を超えた場合に暴走を検知する。
【００１５】
即ち、上記のように暴走を検知する方式は「ウォッチドッグタイマ」に類似したものであるが、本発明では、ＣＰＵにより複数のタスクが時分割並行的に実行されることを前提としているので、最重要タスクとそれ以外のタスクとの処理を組み合わせることで、ＣＰＵが最重要タスクにおいて、それ以外のタスクによる挙動が正常かどうかを監視することができる。
【００１６】
また、一般的なウォッチドッグタイマの場合、そのタイムアップ時間は、プログラムによるクリア間隔に対して長めに設定されることが多いので冗長性が高く、暴走が検知させるまでに時間がかかってしまう。これに対して、本発明の方式によれば、監視カウンタ値の変更は最重要タスクにおいて行なわれると共に、そのカウンタ値の変化もＣＰＵが最重要タスクを実行することで監視するので、その他のタスクにおいてクリア要求がセットされなかった場合に、暴走を極めて短時間で検出することができる。
【発明を実施するための最良の形態】
【００１７】
（第１実施例）
以下、本発明をワンチップマイクロコンピュータに適用した場合の第１実施例について図１乃至図５を参照して説明する。図１は、マイクロコンピュータの構成を本発明の要旨に係る部分について示す機能ブロック図である。マイコン（マイクロコンピュータシステム）１は、ＣＰＵ２，内蔵メモリ３，暴走検知部４などから構成されており、これらは、アドレスバス５，データバス６を介して互いに接続されている。
【００１８】
ＣＰＵ２は、制御部（信号出力部）７，デコード部８，演算部９，レジスタ部１０などを内蔵しており、制御部７は、Ｒ／Ｗ（リード／ライト）などの制御信号を出力してバス５及び６に対するアクセスを行い、外部とのデータ転送を制御する。内蔵メモリ３にはＣＰＵ２の制御プログラムが記憶されており、ＣＰＵ２が前記プログラムの命令や、内蔵メモリ３に記憶されているデータを読み込むとそれらはレジスタ部１０に格納され、デコード部８によりデコードされる。すると、演算部９がその読み込み結果に基づいて演算処理を実行し、演算結果のデータは、必要に応じてレジスタ部１０内のデータレジスタ１８や内蔵メモリ３に書き込まれる。
【００１９】
また、制御部７は、ＣＰＵ２がバス５及び６に対してアクセスを行っている間、そのアクセスサイクルが「命令フェッチ」であるか、それ以外の「データアクセス」等であるのかを示す命令フェッチ信号を出力するようになっている。また、ＣＰＵ２は、例えば２つのタスクを時分割並行的に処理するマルチタスクの実行に特化して構成されており、ＣＰＵ２が現在実行中であるタスクが、２つのうち何れであるのかを示すタスク情報信号（タスク実行信号）も出力するようになっている。そして、各タスクのプログラムは、内蔵メモリ３に記憶されている。
【００２０】
ここで、２つのタスクのうち一方は、マイコン１におけるシステムの基層的な部分を管理するため重要度がより高いタスク（最重要タスク，以下、タスクＳと称す）として設定されている（特許文献１の「Ｌタスク」に相当する）。即ち、他方のタスク（以下、タスクＸと称す）の暴走を監視するためのルーチンや、フェイルセーフ用のバックアップシーケンスなどを実行する。そして、タスクＳは、固定ループ動作することでソフトウエアタイマとしても機能するため、分岐命令などのコーディングは予め禁止されており、基本的にループ周回周期毎に実行が必要な処理を行う。
【００２１】
また、他方のタスクＸ（特許文献１の「Ａタスク」に相当する）は、数値演算処理などを行なうのに適したタスクであり、分岐命令の実行も許可されている。そして、タスクＸは、タスクＳのループ周回回数によって計時される時間を利用した処理も行なうようになっている。
【００２２】
暴走検知部４は、タスクＳ領域上限レジスタ１１，タスクＳ領域下限レジスタ１２，領域判定部１３，３入力ＡＮＤゲート１４及び１５などを備えて構成されている。上限レジスタ１１，下限レジスタ１２には、ＣＰＵ２が起動した場合の初期処理において、内蔵メモリ３におけるタスクＳのアドレスの上限値（終了アドレス），下限値（開始アドレス）が夫々書き込まれるようになっている。ここで、図５にはマイコン１のメモリマップの一例を示す。この場合、タスクＸの下限アドレスは１０００Ｈであり、上限アドレスは７ＦＦＦＨに設定されており、この間がタスクＸのプログラム領域に設定されている。
【００２３】
領域判定部１３は、アドレスバス３に出力されるアドレスと、上記レジスタ１２，１３に設定保持されるアドレスとを比較して、前者のアドレスがタスクＳのプログラム領域内（上限，下限の間）であるか否かを判定する。そして、タスクＳのプログラム領域内である場合は、その状態を示す領域判定信号をアクティブ（ハイ）にする。領域判定信号は、ＡＮＤゲート１４の入力端子に与えられると共に、ＮＯＴゲート１６を介してＡＮＤゲート１５の入力端子にも与えられている。
【００２４】
ＡＮＤゲート１４の他の入力端子の１つには、ＣＰＵ２の制御部７によって出力される制御信号Ｒ／Ｗ（リード／ライト）が与えられている。制御信号Ｒ／Ｗは、ＣＰＵ２がリードサイクルを実行する場合にロウレベルを、ライトサイクルを実行する場合にハイレベルを示すように出力される。そして、ＡＮＤゲート１４の残る１つの入力端子には、ＣＰＵ２の制御部７により出力されるタスク情報信号が、ＮＯＴゲート１７を介して与えられている。また、上記タスク情報信号は、ＡＮＤゲート１５の入力端子にもそのまま与えられている。
【００２５】
ＡＮＤゲート１５の残る１つの入力端子には、ＣＰＵ２の制御部７によって出力される命令フェッチ信号が与えられている。命令フェッチ信号は、ＣＰＵ２が命令リードサイクルを実行する場合にハイレベルを示すようになっている。そして、ＡＮＤゲート１４，１５の出力端子は、具体的には図示しないが、ＣＰＵ２に対して例外処理を実行させるための割り込み信号として出力されるようになっている。
【００２６】
図２は、ＣＰＵ２の内部におけるレジスタ部１０の構成をより詳細に示すものであり、図３は、ＣＰＵ２の動作の一例を示すタイミングチャートである。レジスタ部１０は、データレジスタ群１８，タイマ１９，タスク切替えレジスタ（ＰＣＴ）２０，プログラムカウンタ（ＰＣ）２１などを備えている。タイマ１９は、予め固定された初期値をＣＰＵ２の動作クロックでダウンカウントし、タイマ値が「０」になると初期値がリロードされてダウンカウント動作を繰り返すようになっている。あるいは、カウンタ値を設定することで、任意の値でダウンカウントを繰り返すようになっている。制御部７は、上記タイマ値を参照しており、その値が「１」から「０」に切替わる際にタスク切換え処理を行う。
【００２７】
タスク切替えレジスタ２０は、制御部７によって制御され、プログラムカウンタ２１との間でアドレスを待避，復帰させるように動作する。例えば、図３に示すように、タイマ値「５」（初期値ではない）の時点でＣＰＵ２がタスクＸを実行しているとすると（（ｄ）参照）、タイマ値の減少に応じてプログラムカウンタ２１のアドレス（命令フェッチアドレス）は「２」ずつ（１６ビットアクセス）増加して行く（（ａ），（ｂ）参照）。それに応じて、ＣＰＵ２の実行アドレスは、１つ前のクロックでフェッチされた命令のアドレスとなっている（（ｃ）参照）。
【００２８】
そして、タイマ１９のタイマ値が「１」になると、制御部７はタスク切替えレジスタ２０に待避指令を出力し、その時点のプログラムカウンタ２１のアドレス「Ｘ＋８」より「２」を減じた「Ｘ＋６」をレジスタ２０に待避させる。即ち、この時点の実行アドレスは「Ｘ＋６」となっているが、そのアドレスに対応する実行結果は完了していないため、次回のタスクＸは、アドレス「Ｘ＋６」から実行を再開することになる。
【００２９】
続いて、タイマ値が「０」になると、制御部７はタスク切替えレジスタ２０に復帰指令を出力し、その時点で自身が保持していたタスクＳのアドレス「Ｓ＋０」をプログラムカウンタ２１に復帰させる。この時、制御部７は、タスク情報信号をアクティブにする（（ｅ）参照）。またこの時、ＣＰＵ２は実質的にアドレス「Ｓ＋０」の命令フェッチを行うだけであり、ＮＯＰ（No OPeration）命令を実行することになる。
【００３０】
次に、本実施例の作用について説明する。ここで、暴走検知部４におけるＡＮＤゲート１４の出力端子がハイレベルになる条件は、
１：出力アドレスがタスクＳ領域内
２：ライトアクセス
３：ＣＰＵ２より与えられるタスク情報がタスクＸ
の３条件が同時に成立した場合であり、マイコン１の動作状態が正常であれば成立しない条件である。
【００３１】
また、ＡＮＤゲート１５の出力端子がハイレベルになる条件は、
１：出力アドレスがタスクＳ領域外
２：命令フェッチサイクル
３：ＣＰＵ２より与えられるタスク情報がタスクＳ
の３条件が同時に成立した場合であり、やはり、マイコン１の動作状態が正常であれば成立しない条件である。
【００３２】
即ち、ＡＮＤゲート１４，１５の何れかの出力端子がハイレベルになった場合は、ＣＰＵ２が実行中であることを示すタスクと、アドレスバス５に出力されているアドレス値とが不一致となっているので、ＣＰＵ２の動作が暴走したと判定することができる。従ってこの場合は、ＣＰＵ２に対して割込み（ＩＮＴ）を発生させて例外処理を実行させることで、必要な初期化を行い暴走状態を解消させるようにする。
【００３３】
図４は、ＣＰＵ２による処理内容を概略的に示すフローチャートである。図４（ａ）に示すように、ＣＰＵ２はリセットが解除されると、初期処理として暴走検知部４のレジスタ１１，１２にタスクＳのプログラム領域の上限，下限を夫々設定する（ステップＳ１）。それ以降は、メインルーチンにおいて、図３に示したようにタスクＳ，タスクＸを交互に実行する（ステップＳ２）。
【００３４】
一方、図４（ｂ）は、ＣＰＵ２に対して割込みが発生した場合に行われる処理を示す。ＣＰＵ２は、割込みが発生すると、先ず割込み要因レジスタ（図示せず）などを参照して割込み要因の判定を行う。そして、暴走検知部４のＡＮＤゲート１４により検知されたタスクＸによるタスクＳ領域内のアクセスか（ステップＳ１１，「ＹＥＳ」）、或いは、ＡＮＤゲート１５により検知されたタスクＳによる自身の領域外アクセスである場合は（ステップＳ１２，「ＹＥＳ」）、夫々の要因に応じた例外処理を実行する（ステップＳ１４，Ｓ１５）。また、割込み要因がこれらの何れでもない場合は（ステップＳ１２，「ＮＯ」）その他の要因に応じた例外処理を実行する（ステップＳ１３）。
【００３５】
以上のように本実施例によれば、ＣＰＵ２の制御部７は、ＣＰＵ２がタスクＳを実行している期間にタスク情報信号をアクティブにして、暴走検知部４の領域判定部１３は、タスクＳのプログラムが格納されている内蔵メモリ３の上限アドレス，下限アドレスが設定されているレジスタ１１，１２のレジスタ値とＣＰＵ２が実行中のアドレスとを比較して、後者がタスクＳの実行領域を示すか否かを判定する。そして、暴走検知部４は、領域判定部１０による判定結果とタスク実行信号の出力状態とが不一致である場合に暴走を検知するようにした。従って、ロジック回路により迅速に暴走を検知することができる。また、暴走検知のために特許文献１のように命令コードの一部を用いないので、命令コードの使用数を制限することは回避される。
そして、暴走検知部４は、タスク情報信号がアクティブである場合に、領域判定部１３による判定結果がタスクＳの実行領域外であることを示すと暴走を検知するので、タスクＳのアドレスが何らかの理由により誤って出力されている場合に、暴走を確実に検知することができる。
【００３６】
更に、暴走検知部４は、タスク情報信号がインアクティブである場合に、領域判定部１３による判定結果がタスクＳの実行領域内であることを示すと暴走を検知するので、タスクＳ以外のアドレスが何らかの理由により誤って出力されている場合にも、暴走を確実に検知することができる。加えて、暴走検知部４は、暴走を検知するとＣＰＵ２に対して割り込みを発生させ、ＣＰＵ２は暴走の検知に基づく例外処理を実行するので、例外処理においてタスクの暴走状態を解消して正常な実行状態に復帰することができる。
【００３７】
（第２実施例）
図６は、本発明をマルチＣＰＵシステムに適用した場合の第２実施例を示すものである。第２実施例のマルチＣＰＵシステム（マイクロコンピュータシステム）３１では、複数のＣＰＵ３２（０，１，・・・，ｎ）を備えており、それらによりメモリ３３に記憶されている複数のタスクプログラムを並列的に実行可能となっている。
【００３８】
この場合、例えばＣＰＵ３２（０）はマスタＣＰＵとして動作するもので、パワーオン時には最初にＣＰＵ３２（０）だけが起動される。そして、ＣＰＵ３２（０）は、システムに必要な初期処理を行った後、他のスレーブＣＰＵ３２（１，・・・，ｎ）にどのタスクを割り当てて実行させるかを決定したり、スレーブＣＰＵ３２のリセットを必要なタイミングで解除して起動を制御するようになっている。即ち、上記の意味において、ＣＰＵ３２（０）により実行されるタスクの重要度は最も高いと言える。
【００３９】
そして、暴走検知部３４は、ＣＰＵ３２（０）により実行されるプログラムについて、第１実施例の暴走検知部４と同様の処理を行うようになっている。即ち、ＣＰＵ０領域上限レジスタ３５，ＣＰＵ０領域下限レジスタ３６には、ＣＰＵ３２（０）によって自身が実行するプログラム領域の上限値，下限値が夫々セットされる。領域判定部３７は、それらのレジスタ値とアドレスバス３８に出力されているアドレス値とを比較して、後者のアドレス値がＣＰＵ３２（０）のプログラム領域外である場合に領域外判定信号をアクティブ（ハイ）にしてＡＮＤゲート３９に出力する。
【００４０】
ＡＮＤゲート３９の他方の入力端子には、信号出力部としてのＣＰＵ３２（０）がバスアクセスを行っている場合に出力されるアクセス実行信号が与えられている。従って、ＡＮＤゲート３９は、領域判定部３７が領域外判定信号をアクティブにしているにもかかわらず、ＣＰＵ３２（０）のアクセス実行信号が与えられている場合に、出力信号をハイレベルにする。すると、その出力信号はＣＰＵ３２（０）に対して割込みを発生させ、ＣＰＵ３２（０）は割り込み要因に応じた例外処理を実行して暴走状態の解消を図る。
以上のように第２実施例によれば、複数のＣＰＵ３２を備えて構成されるマルチＣＰＵシステム３１についても、本発明を同様に適用することができる。
【００４１】
（第３実施例）
図７乃至図１０は本発明の第３実施例を示すものであり、第１実施例と異なる部分のみ説明する。第１実施例では、マイコン１の暴走検知部４が、タスクＳのプログラム領域について領域判定を行うことで暴走を検知したが、第３実施例では、タスクＳのデータ領域についても同様の領域判定に基づく暴走検知を行う。
図８には、アドレスマップを示す。但し、第１実施例の図５に示すアドレスマップとは領域設定が異なっている。第３実施例では、０ｘ２Ｅ００〜０ｘ２ＦＦＦがタスクＳのデータ領域に設定されており（領域（１））、０ｘＦ０００〜０ｘＦＦＦＦがタスクＳのプログラム領域に設定されている（領域（２））。
【００４２】
図１相当図である図７において、第３実施例のマイコン４１（マイクロコンピュータシステム）は、第１実施例のマイコン１における暴走検知部４を、暴走検知部４２に置き換えたものである。暴走検知部４２において、タスクＳ領域（２）上限レジスタ１１Ａ，同下限レジスタ１２Ａ及びプログラム領域判定部１３は、実質的に第１実施例の上限レジスタ１１，下限レジスタ１２及び領域判定部１３と同じものである。また、ＡＮＤゲート１４は削除されている。
【００４３】
そして、暴走検知部４２には、タスクＳ領域（１）上限レジスタ４３，同下限レジスタ４４及びデータ領域判定部４５が追加されている。そして、ＡＮＤゲート１４に替わってＡＮＤゲート４６が配置されている。上限レジスタ４３には、データ領域の上限値（開始アドレス０ｘ２Ｅ００）が設定され、下限レジスタ４４には、データ領域の下限値（終了アドレス０ｘ２ＦＦＦ）が設定される。
【００４４】
データ領域判定部４５は、プログラム領域判定部１３と同様に、アドレスバス３に出力されるアドレスと、上記レジスタ４３，４４に設定保持されるアドレスとを比較して、前者のアドレスがタスクＳのデータ領域内（上限，下限の間）であるか否かを判定する。そして、タスクＳのデータ領域内である場合は、その状態を示す領域判定信号をアクティブ（ハイ）にする。領域判定信号は、ＡＮＤゲート４６の入力端子に与えられている。ＡＮＤゲート４６の他の入力端子の１つには、制御信号Ｒ／Ｗ（リード／ライト）が与えられており、残る１つの入力端子には、タスク情報信号がＮＯＴゲート４７を介して与えられている。
【００４５】
ここで、図９には、各アドレスレジスタ１１Ａ，１２Ａ，４３，４４の設定状態を示す。第３実施例では、各領域の上限を規定するレジスタ４３，１１Ａは、全てのビットが予め固定されている。また、データ領域の下限を規定するレジスタ４４は、ＭＳＢ側の６ビットとＬＳＢ側の４ビットが予め固定され、プログラム領域の下限を規定するレジスタ１２Ａは、ＭＳＢ側，ＬＳＢ側の各４ビットが予め固定されている。
従って、データ領域及びプログラム領域の上限は、ユーザプログラムによって設定する必要はなく、データ領域の下限は、０ｘ２Ｃ００〜０ｘ２ＦＦ０の範囲でのみユーザプログラムによる設定が可能となっている。また、プログラム領域の下限は、０ｘＦ０００〜０ｘＦＦＦ０の範囲でのみユーザプログラムによる設定が可能となっている。
【００４６】
また、ＡＮＤゲート１５，４６の出力端子は、ＯＲゲート４８の各入力端子に夫々接続されており、ＯＲゲート４８の出力端子は、レジスタ１１Ａ，１２Ａ，４３，４４のクリア端子に接続されており、ＡＮＤゲート１５，４６の何れの出力レベルがハイになると、各レジスタはクリアされるようになっている。但し、レジスタ１１Ａ，４３についてはデータ値が変化しないため、クリア端子を削除しても良い。
【００４７】
次に、第３実施例の作用について図１０も参照して説明する。暴走検知部４２においてＡＮＤゲート４６の出力端子がハイレベルになる条件は、
１：出力アドレスがタスクＳのデータ領域内
２：ライトアクセス
３：（ＣＰＵ２に替わる）ＣＰＵ２Ａ（図示せず）より与えられる
タスク情報がタスクＸ
の３条件が同時に成立した場合であり、やはり、マイコン４１の動作状態が正常であれば成立しない条件である。また、ＡＮＤゲート１５については、第１実施例と同様である。
【００４８】
そして、ＡＮＤゲート１５，４６の何れかの出力端子がハイレベルになった場合は、ＣＰＵ２Ａが実行中であることを示すタスクと、アドレスバス５に出力されているアドレス値とが不一致となっているので、ＣＰＵ２Ａの動作が暴走したと判定することができる。従ってこの場合は、ＣＰＵ２Ａに対して割込み（ＩＮＴ）を発生させて例外処理を実行させ、必要な初期化を行い暴走状態を解消させる。
【００４９】
図１０は、例外処理の内容を概略的に示すフローチャートである。マイコン４１において暴走検知部４２により暴走が検知され、ＣＰＵ２Ａが例外処理を開始する場合、先ず、ＣＰＵ２Ａのハードウエアロジックによって各レジスタが初期化される（ステップＳ２０）。但し、タスクＳのデータ領域，プログラム領域を規定するレジスタについては、実質的にレジスタ１２Ａ，４４の一部のみが初期化される。
【００５０】
それから、ＣＰＵ２Ａは、プログラムに基づく例外処理を開始し（スタート）、各レジスタの値を書き込んで再設定する（ステップＳ２１）。この場合、レジスタ１２Ａに対しては実質的に６ビットのデータだけを設定し、レジスタ４４に対しては実質的に８ビットのデータだけを設定することになる。そして、その他の初期設定などを含むエラー復帰処理を実行すると（ステップＳ２２）、通常処理に移行する。
【００５１】
以上のように第３実施例によれば、データ領域判定部４５は、最重要タスクＳのデータが格納されているメモリ領域の開始アドレス，終了アドレスが設定されているレジスタ値とＣＰＵ２Ａが実行中のアドレスとを比較して、最重要タスク３のデータ領域であるか否かを判定し、暴走検知部４２は、データ領域判定部４５による判定結果とタスク実行信号の出力状態とが不一致である場合に暴走を検知するので、最重要タスクＳのデータ領域に対して不正なアクセスが行われた場合にも、第１実施例と同様にして暴走を検知することができる。
【００５２】
そして、データ領域，プログラム領域の上限を規定するレジスタ４３，１１Ａは、全てのビットを予め固定し、データ領域，プログラム領域の下限を規定するレジスタ４４，１２Ａは、ＭＳＢ側，ＬＳＢ側の一部のビットだけを予め固定した。従って、システムの仕様上、最重要タスクＳのプログラムやデータの配置領域をある程度の範囲に制限しても問題がない場合には、ノイズなどの影響によってアドレスが変動する範囲を制限でき、開始アドレスと終了アドレスとの大小関係の逆転を防止することができる。
また、ＣＰＵ２Ａは、例外処理においてレジスタ４４，１２Ａにアドレスデータを再設定するので、暴走が発生した場合でも、処理が正常に実行されるように復帰させることができる。
【００５３】
（第４実施例）
図１１は本発明の第４実施例を示すものである。図１１（ａ）は、例えばＣＰＵ２Ａによる各タスクの実行状態を示す。タスクＳと、それ以外のタスク（Ｘ等）とは、基本的に（例外処理が発生しない状態では）一定の周期（処理間隔）ｔで交互に実行されるようになっている。そして、タスクＳは、図１１（ｂ）に示すように、自身の処理内でウォッチドックタイマ（ソフトウエアタイマ，監視カウンタ）を操作するようになっている。即ち、周期ｔで自身の処理を実行する毎にタイマ値をインクリメントする。
【００５４】
一方、タスクＸ等は、図１１（ｃ）に示すように、一定の処理手順を進めた段階で、各タスクがメモリ３において共通にアクセス可能である共有データ領域に、ウォッチドッグタイマのクリア要求フラグを「１」にセットするよう設定されている。そして、タスクＳは、共有データ領域における上記フラグの状態を監視し、当該フラグがセットされたことを確認するとウォッチドッグタイマの値をゼロクリアする。図１１（ｂ）の例では、タイマ値が「３」になった段階で、クリアされている。
【００５５】
この場合、タスクＸ等の処理に何らかの異常が発生したことで、クリア要求フラグがセットされなくなると、ウォッチドッグタイマの値は「４」，「５」と増加して行く。そして、タスクＳは、上記タイマ値が、例えば限界値である「４」を超えて「５」に達した場合は、タスクＸ等が所定の処理手順を正常に実行しなくなったと判断して暴走を検知し、例外処理を実行する。
【００５６】
即ち、本発明では、ＣＰＵ２Ａにより複数のタスクが時分割並行的に実行されることを前提としているので、最重要タスクＳとそれ以外のタスクＸ等との処理を組み合わせることで、ＣＰＵ２ＡがタスクＳによりタスクＸ等における挙動が正常かどうかを監視することができる。また、一般的なウォッチドッグタイマの場合、そのタイムアップ時間は、プログラムによるクリア間隔に対して長めに設定されることが多いので冗長性が高く、暴走が検知させるまでに時間がかかってしまう。
これに対して、上記の方式によれば、ウォッチドッグタイマ値のインクリメントはＣＰＵ２ＡがタスクＳにおいてて行うと共に、タイマ値の変化もＣＰＵ２ＡがタスクＳにおいて監視するので、その他のタスクＸ等においてクリア要求がセットされなかった場合は、暴走を極めて短時間で検出することができる。
【００５７】
本発明は上記し又は図面に記載した実施例にのみ限定されるものではなく、以下のような変形が可能である。
第１実施例において、暴走検知部４のＡＮＤゲート１４，１５は、何れか一方のみを備えても良い。
また、ＡＮＤゲート１４は、「ライトアクセス」に替えて「リードアクセス」の場合に（入力端子にＮＯＴゲートを追加）暴走検知を行なうようにしても良い。
また、第１実施例において、並列に実行するタスクの数は「３」以上であっても良い。
暴走を検知した場合は、ＣＰＵに例外処理を実行させるものに限らず、ＣＰＵ，或いはマイコン全体にハードウエア的にリセットをかけるようにしても良い。
図４（ｂ）において、ステップＳ１４，Ｓ１５における例外処理内容が同一である場合は、両者を１つにまとめれば良い。
【００５８】
第２実施例の暴走検知部３４において、第１実施例のＡＮＤゲート１４に相当する暴走検知を行っても良い。即ち、アドレスバス３８上に出力されたアドレスがＣＰＵ３２（０）のプログラム領域内であるのに対して、他のＣＰＵ３２（１，・・・，ｎ）がバスアクセスを行っていることを示す信号が出力された場合に暴走を検知する。
また、第２実施例において、ＣＰＵ３２（０）がバスアクセスを行っていることを示す信号は、例えば、複数のＣＰＵ３２によるバスアクセスの調停を行うアービタ（信号出力部）が出力するバスアクセス許可（バスグラント）信号であっても良い。
第３実施例の構成に、第１実施例のＡＮＤゲート１４を追加しても良い。
【００５９】
第４実施例において、ウォッチドッグタイマをダウンカウント動作させても良い。
データ領域，プログラム領域を規定するアドレスレジスタについては、上限側，下限側の何れか一方だけ、データビットを予め固定しても良い。またその場合、少なくともＭＳＢ，ＬＳＢ側の何れかについて、一部のビットだけを固定しても良い。
また、下限レジスタの全ビットを固定しても良い。
２つのタスクを並列的に実行する方式については、特許文献１と同様の構成を採用しても良い。
システムとして最重要タスクのプログラム領域が固定である場合は、上限，下限レジスタによって付与されるアドレス値を、予めハードウエアにより固定的に設定しても良い。
ＣＰＵのビットサイズは１６ビットに限ることなく、８ビットや３２ビット、或いは６４ビット以上であっても良い。
【図面の簡単な説明】
【００６０】
【図１】本発明の第１実施例であり、マイクロコンピュータの構成を本発明の要旨に係る部分について示す機能ブロック図
【図２】ＣＰＵの内部におけるレジスタ部の構成をより詳細に示す図
【図３】ＣＰＵの動作の一例を示すタイミングチャート
【図４】ＣＰＵの処理内容を示すフローチャートであり、（ａ）は初期処理に引き続き実行されるメインルーチン，（ｂ）は割り込み処理
【図５】マイクロコンピュータのメモリマップの一例を示す図
【図６】本発明の第２実施例であり、マルチＣＰＵシステムの構成を示す図
【図７】本発明の第３実施例を示す図１相当図
【図８】図５相当図
【図９】各アドレスレジスタの設定状態を示す図
【図１０】例外処理の内容を概略的に示すフローチャート
【図１１】本発明の第４実施例であり、ＣＰＵによる各タスクの実行状態を示すシーケンス図
【符号の説明】
【００６１】
図面中、１はマイクロコンピュータ（マイクロコンピュータシステム）、２はＣＰＵ、３は内蔵メモリ、４は暴走検知部、７は制御部（信号出力部）、１１はタスクＳ領域上限レジスタ、１２はタスクＳ領域下限レジスタ、１３は領域判定部、３１はマルチＣＰＵシステム（マイクロコンピュータシステム）、３２はＣＰＵ、３２（０）はＣＰＵ（信号出力部）、３３はメモリ、３４は暴走検知部、３５はＣＰＵ０領域上限レジスタ、３６はＣＰＵ０領域下限レジスタ、４１はマイクロコンピュータ（マイクロコンピュータシステム）、４２は暴走検知部、４３はタスクＳ領域（１）上限レジスタ、４４はタスクＳ領域（１）下限レジスタ、４５は領域判定部を示す。
【図１】
2008033890.tif 000003
【図２】
2008033890.tif 000004
【図３】
2008033890.tif 000005
【図４】
2008033890.tif 000006
【図５】
2008033890.tif 000007
【図６】
2008033890.tif 000008
【図７】
2008033890.tif 000009
【図８】
2008033890.tif 000010
【図９】
2008033890.tif 000011
【図１０】
2008033890.tif 000012
【図１１】
2008033890.tif 000013