(57)【特許請求の範囲】
【請求項１】
マイコンにより実行される複数のタスクと、
複数種類の各イベントの発生を検知し、その検知したイベントに対応するタスクの起床を要求する手順を、前記マイコンに実行させるための起床要求プログラムと、
前記タスクの起床要求に対し、予め設定された優先度に基づいて、その起床要求に対応するタスクを起床する手順を、前記マイコンに実行させるためのリアルタイムオペレーティングシステムと、
を有したプログラムが、前記マイコンにより正常に実行されているか否かを監視するための異常監視用プログラムであって、
前記複数のタスクのうちの一部又は全部について、タスクの起床要求から、その起床要求に対応するタスクの実行が開始されるまでの遅延時間を計測すると共に、その計測値が規定の起床タイムアウト値以上になったならば異常と判断する遅延時間監視手順と、
前記遅延時間監視手順により異常と判断された場合に、前記マイコンをリセットするための処理を行うリセット用手順とを、
前記マイコンに実行させ、
更に、アイドルタスクよりも優先度が低い監視用タスクと、
前記監視用タスクの起床を要求し、その監視用タスクが実行されたならば異常と判断して前記マイコンをリセットするための処理を行う手順を、前記マイコンに実行させるためのプログラムと、
を有していることを特徴とする異常監視用プログラム。
【請求項２】
請求項１に記載の異常監視用プログラムにおいて、
前記遅延時間監視手順の対象のタスクのうち、一部又は全部は、起床要求されてから実行が終了するまでの間に起床要求されることが可能な多重起床要求可能タスクであり、
前記マイコンに前記遅延時間監視手順を実行させるプログラムは、
前記対象の多重起床要求可能タスクについて、起床要求されたが実行されていない残り回数を計数する計数手順を、前記マイコンに実行させるためのプログラムを有すると共に、
前記計数手順により計数される残り回数が１以上の多重起床要求可能タスクについては、初回の起床要求から最初に実行されるまでは前記遅延時間を計測し、その後、前記残り回数が０となるまでは、実行開始から次の実行開始までの時間を前記遅延時間の代わりに計測する手順を、前記マイコンに実行させるように構成されていること、
を特徴とする異常監視用プログラム。
【請求項３】
マイコンにより実行される複数のタスクと、
複数種類の各イベントの発生を検知し、その検知したイベントに対応するタスクの起床を要求する手順を、前記マイコンに実行させるための起床要求プログラムと、
前記タスクの起床要求に対し、予め設定された優先度に基づいて、その起床要求に対応するタスクを起床する手順を、前記マイコンに実行させるためのリアルタイムオペレーティングシステムと、
を有したプログラムが、前記マイコンにより正常に実行されているか否かを監視するための異常監視用プログラムであって、
前記複数のタスクのうちの一部又は全部について、タスクの起床要求から、その起床要求に対応するタスクの実行が開始されるまでの遅延時間を計測すると共に、その計測値が規定の起床タイムアウト値以上になったならば異常と判断する遅延時間監視手順と、
前記遅延時間監視手順により異常と判断された場合に、前記マイコンをリセットするための処理を行うリセット用手順とを、
前記マイコンに実行させ、
更に、前記遅延時間監視手順の対象のタスクのうち、一部又は全部は、起床要求されてから実行が終了するまでの間に起床要求されることが可能な多重起床要求可能タスクであり、
前記マイコンに前記遅延時間監視手順を実行させるプログラムは、
前記対象の多重起床要求可能タスクについて、起床要求されたが実行されていない残り回数を計数する計数手順を、前記マイコンに実行させるためのプログラムを有すると共に、
前記計数手順により計数される残り回数が１以上の多重起床要求可能タスクについては、初回の起床要求から最初に実行されるまでは前記遅延時間を計測し、その後、前記残り回数が０となるまでは、実行開始から次の実行開始までの時間を前記遅延時間の代わりに計測する手順を、前記マイコンに実行させるように構成されていること、
を特徴とする異常監視用プログラム。
【請求項４】
請求項２又は請求項３に記載の異常監視用プログラムにおいて、
前記計数手順により計数される残り回数が多重起床の上限回数未満である多重起床要求可能タスクについて起床要求された際に、その起床要求が前記リアルタイムオペレーティングシステムによって受け付けられなかったならば、異常と判断して前記マイコンをリセットするための処理を行う手順を、前記マイコンに実行させるプログラムを更に有していること、
を特徴とする異常監視用プログラム。
【請求項５】
請求項２又は請求項３に記載の異常監視用プログラムにおいて、
前記計数手順により計数される残り回数が０である多重起床要求可能タスクについて起床要求された際に、その起床要求が前記リアルタイムオペレーティングシステムによって受け付けられなかったならば、異常と判断して前記マイコンをリセットするための処理を行う手順を、前記マイコンに実行させるプログラムを更に有していること、
を特徴とする異常監視用プログラム。
【請求項６】
請求項１ないし請求項５の何れか１項に記載の異常監視用プログラムにおいて、
前記遅延時間監視手順により異常と判断された場合に、割り込みを禁止状態にした上で前記マイコンによるプログラムの実行状態を無限ループ状態にするための手順を、前記マイコンに実行させるための無限ループ導入用プログラムを有していること、
を特徴とする異常監視用プログラム。
【請求項７】
請求項１ないし請求項５の何れか１項に記載の異常監視用プログラムにおいて、
前記マイコンは、当該マイコンの外部又は内部に設けられたウォッチドッグタイマが当該マイコンにより所定時間以内にリセットされないと該ウォッチドッグタイマによりリセットされるようになっていると共に、前記所定時間よりも短い一定時間毎に特定のプログラムを実行することにより、前記ウォッチドッグタイマをリセットするための処理を行うようになっており、
前記マイコンに前記リセット用手順を実行させるプログラムは、前記マイコンをリセットするための処理として、前記ウォッチドッグタイマをリセットするための処理が行われないようにする処理を、前記マイコンに実行させるように構成されていること、
を特徴とする異常監視用プログラム。
【請求項８】
請求項７に記載の異常監視用プログラムにおいて、
前記マイコンに前記遅延時間監視手順を実行させるプログラムのうち、起床要求されたタスクの前記遅延時間の計測値を更新していくための部分と、前記遅延時間の計測値が前記起床タイムアウト値以上になったか否かを判定するための部分との、両方又は一方は、前記特定のプログラム内に設けられていること、
を特徴とする異常監視用プログラム。
【請求項９】
請求項１ないし請求項８の何れか１項に記載の異常監視用プログラムにおいて、
前記起床タイムアウト値は、タスクの優先度毎に異なる値に設定されていること、
を特徴とする異常監視用プログラム。
【請求項１０】
請求項１ないし請求項９の何れか１項に記載の異常監視用プログラムにおいて、
前記遅延時間監視手順の対象のタスクは、時間と非同期に発生するイベントに対応した時間非同期タスクであること、
を特徴とする異常監視用プログラム。
【請求項１１】
請求項１ないし請求項１０の何れか１項に記載の異常監視用プログラムにおいて、
アイドルタスクを除く最低優先度のタスクとして、一定時間毎に起床要求される時間同期タスクが設けられており、その時間同期タスクが、前記遅延時間監視手順の対象のタスクとなっていること、
を特徴とする異常監視用プログラム。
【請求項１２】
請求項１ないし請求項１０の何れか１項に記載の異常監視用プログラムにおいて、
アイドルタスクを除く最低優先度のタスクとして、時間と非同期に発生するイベントに対応した時間非同期タスクがあり、
その最低優先度の時間非同期タスクの実行時間を計測すると共に、その計測値が規定の実行時間タイムアウト値以上になったならば異常と判断する実行時間監視手順を、前記マイコンに実行させるプログラムと、
前記実行時間監視手順により異常と判断された場合に、前記マイコンをリセットするための処理を行う手順を、前記マイコンに実行させるプログラムと、
を更に有していることを特徴とする異常監視用プログラム。
【請求項１３】
請求項１ないし請求項１２の何れか１項に記載の異常監視用プログラムにおいて、
前記タスクのうち、一定時間毎に起床要求される時間同期タスクの１つ以上について、そのタスクの実行間隔を計測すると共に、その計測値が規定の実行間隔タイムアウト値以上になったならば異常と判断する実行間隔監視手順を、前記マイコンに実行させるプログラムと、
前記実行間隔監視手順により異常と判断された場合に、前記マイコンをリセットするための処理を行う手順を、前記マイコンに実行させるプログラムと、
を更に有していることを特徴とする異常監視用プログラム。
【請求項１４】
請求項１ないし請求項１３の何れか１項に記載の異常監視用プログラムにおいて、
前記マイコンは、当該マイコンの外部又は内部に設けられたウォッチドッグタイマが当該マイコンにより所定時間以内にリセットされないと該ウォッチドッグタイマによりリセットされるようになっていると共に、前記所定時間よりも短い一定時間毎に特定のプログラムを実行することにより、前記ウォッチドッグタイマをリセットするための処理を行うようになっており、
前記特定のプログラムを前記一定時間毎に起床させるためのタイマを起動する処理を、前記マイコンに行わせるためのプログラムが、前記タスクのうち、前記マイコンが起動した際に最初に起床されるイニシャルタスク内に設けられていること、
を特徴とする異常監視用プログラム。
【請求項１５】
請求項１ないし請求項１４の何れか１項に記載の異常監視用プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項１６】
請求項１ないし請求項１４の何れか１項に記載の異常監視用プログラムを実行するマイコンを備えた電子装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、リアルタイムオペレーティングシステム（ＲＴＯＳ）を用いたプログラムの実行異常を監視する技術に関する。
【背景技術】
【０００２】
従来より、例えば車両に搭載される電子制御装置では、電波ノイズなどの外乱によるＲＡＭデータ破壊などに起因するプログラム暴走が発生した際に、それを検出して、マイコン（マイクロコンピュータ）を一旦リセットする処置を実施している。
【０００３】
そのうち、一定時間毎に実行されるべき処理が正しく実行されなくなる異常の検出及び処置方法として、ウォッチドックタイマによるマイコンリセットの方法がよく知られている。
【０００４】
これは、マイコンからの信号によって所定時間以内毎にリセットされないとマイコンへリセット信号を出力するウォッチドッグタイマを設けると共に、マイコン側では、上記所定時間よりも短い一定時間毎に実行される特定のルーチンにより、ウォッチドッグタイマをリセットするための上記信号（所謂ウォッチドッグタイマクリア信号であり、以下、ＷＤＣ信号という）を出力する、という方法である。そして、この方法によれば、上記特定のルーチンが何らかの原因で正常に実行されなくなり、マイコンからＷＤＣ信号が出力されない状態が所定時間以上続くと、プログラムの暴走と判断されて、マイコンがウォッチドッグタイマによりリセットされることとなる。
【０００５】
しかし、リアルタイムオペレーティングシステム（以下、ＲＴＯＳと記す）を用いたプログラムでは、あるタスク内でプログラム暴走が発生し、そのタスクが実行停止状態（例えば無限ループ）になったとしても、それより優先度の高いタスクは、それに割り込む形で正常に実行される場合があるため、単に特定の時間周期タスクによってＷＤＣ信号を出力するように構成するだけでは不十分である。尚、時間同期タスクとは、一定時間毎に起床要求されて実行されるタスクのことである。
【０００６】
そこで、ＲＴＯＳを用いたプログラムの実行異常を監視する方法として、従来より、ある特定の高い優先度の時間同期タスクＡによってＷＤＣ信号を出力する処理を行うと共に、その時間同期タスクＡにより、優先度が一番低い特定の時間同期タスクＢが正常に実行されているか否かを監視して、そのタスクＢが実行されない状態が一定時間以上続いたならばＷＤＣ信号の出力を停止して、ウォッチドッグタイマによるマイコンのリセットが行われるようにする、という方法がある。
【０００７】
こうすることで、優先度がタスクＡと同じかそれよりも高いタスク内でプログラム暴走が発生した場合には、タスクＡ自体が実行されなくなってＷＤＣ信号が出力されなくなり、また、優先度がタスクＡよりも低いタスク内でプログラム暴走が発生した場合には、タスクＢが実行されなくなってタスクＡによりＷＤＣ信号の出力が停止されることになる。よって、どのタスクでプログラム暴走が発生しても、マイコンのリセットが実施されることとなる。尚、こうした技術は、例えば特許文献１に記載されている。
【特許文献１】特開平７−１１４４９０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、上記従来技術では、ＲＴＯＳは予め設定されたタスクの優先順位に従ってタスクのスケジューリングを正しく行い、あるタスク内で無限ループに陥った場合はそのタスクの優先度以下のタスクは実行されない、ということを前提にしているため、もしＲＴＯＳ自体が異常となって、上記タスクＡ，Ｂは実行されるがそれ以外のタスクは実行されない、といった状態に陥った場合には、それを検出することができない。
【０００９】
本発明は、こうした問題に鑑みなされたものであり、ＲＴＯＳに異常が生じて、タスクの起床が要求されてもそのタスクが実行されない、という異常を検出できるようにすることを目的としている。
【課題を解決するための手段】
【００１０】
上記目的を達成するためになされた本発明は、マイコンにより実行される複数のタスクと、複数種類の各イベントの発生を検知し、その検知したイベントに対応するタスクの起床を要求する手順を、マイコンに実行させるための起床要求プログラムと、その起床要求プログラムによるタスクの起床要求に対し、予め設定された優先度に基づいて、その起床要求に対応するタスクを起床する手順を、マイコンに実行させるためのＲＴＯＳとを有したプログラムが、マイコンにより正常に実行されているか否かを監視するための異常監視用プログラムである。
【００１１】
そして、本発明（請求項１，３）の異常監視用プログラムは、複数のタスクのうちの一部又は全部について、タスクの起床要求から、その起床要求に対応するタスクの実行が開始されるまでの遅延時間を計測すると共に、その計測値が規定の起床タイムアウト値以上になったならば異常と判断する遅延時間監視手順と、その遅延時間監視手順により異常と判断された場合に、マイコンをリセットするための処理を行うリセット用手順とを、そのマイコンに実行させる、という基本的な特徴を有している。
【００１２】
つまり、本発明の異常監視用プログラムでは、起床要求プログラムによりＲＴＯＳに対してタスクの起床が要求されてから、そのタスクの実行が開始（起床）されるまでの遅延時間（以下、起床遅延時間ともいう）を計測し、その計測値が起床タイムアウト値以上になったならば、即ち、起床要求から起床タイムアウト時間以上経過しても該当タスクが実行されなければ、異常と判断してマイコンをリセットするための処理が行われるように構成されている。
【００１３】
尚、本明細書においては、便宜上、「ＲＴＯＳやタスクが・・・する」といったプログラムを主体とした表現も適宜用いるが、その表現は、そのプログラムをマイコンが実行することで実現される機能手段の動作内容（簡単に言えば、そのプログラムの機能の内容）を表している。
【００１４】
このような本発明の異常監視用プログラムによれば、ＲＴＯＳに異常が生じ、タスクの起床が要求されてもそのタスクが実行されない、という異常を検出できるようになる。
また、タスクの起床トリガが、一定時間毎に発生する時間同期イベントと、時間に非同期に発生する時間非同期イベントとの何れであっても、異常を検出することができる。つまり、遅延時間監視手順の対象のタスク（起床遅延時間を計測する対象のタスクであり、以下、遅延時間監視対象タスクともいう）が、一定時間毎に起床要求される時間同期タスクと、時間とは非同期に起床要求される時間非同期タスクとの何れであっても、異常検出が可能となる。尚、例えば車載電子制御装置に搭載されるマイコンの場合、時間非同期タスクとしては、クランク軸の回転に同期して起床要求されるタスク（いわゆる角度同期タスク）や、人によるスイッチ操作などが行われた時に起床要求されるタスクがある。
【００１５】
更に、本発明の異常監視用プログラムによれば、遅延時間監視対象タスクと同じ優先度かそれよりも高い優先度の他のタスク内でプログラム暴走が発生した場合でも、異常を検出してマイコンをリセットすることができる。その場合でも遅延時間監視対象タスクが実行されなくなるからである。
しかも、特に請求項１の異常監視用プログラムは、アイドルタスクよりも優先度が低い監視用タスクと、その監視用タスクの起床を要求し、その監視用タスクが実行されたならば異常と判断してマイコンをリセットするための処理を行う手順を、マイコンに実行させるためのプログラムとを、更に有している。そして、この異常監視用プログラムによれば、アイドルタスクが起床されない異常が発生したことを検知してマイコンをリセットすることができるようになる。尚、アイドルタスクとは、マイコンによって実現される目的の機能に必要などのタスクよりも優先度が低く、且つ、マイコンが起動した後に１回だけ起床要求されて、その後は終了することなく、当該タスクよりも優先度が高い他のタスクに割り込まれながら実行され続けるタスクであり、簡単に言えば、マイコンが目的の機能に必要な処理を行わない時（即ち、暇な時）に実行されるタスクである。
次に、請求項２の異常監視用プログラムでは、請求項１の異常監視用プログラムにおいて、遅延時間監視手順の対象のタスクのうち、一部又は全部は、起床要求されてから実行が終了するまでの間に起床要求されることが可能な多重起床要求可能タスクである。そして、マイコンに遅延時間監視手順を実行させるプログラムは、対象の多重起床要求可能タスクについて、起床要求されたが実行されていない残り回数を計数する計数手順を、マイコンに実行させるためのプログラムを有すると共に、前記計数手順により計数される残り回数が１以上の多重起床要求可能タスクについては、初回の起床要求から最初に実行されるまでは起床遅延時間を計測し、その後、前記残り回数が０となるまでは、実行開始から次の実行開始までの時間を起床遅延時間の代わりに計測する手順を、マイコンに実行させるように構成されている。つまり、多重起床要求可能タスクが多重に起床要求される場合には、起床要求（１回目）→起床要求（２回目）→実行（１回目）→実行（２回目）、というような順になるため、２回目以降の実行の監視については、対応する起床要求からの経過時間ではなく、前回の実行開始時からの経過時間を計測するようにしており、これにより時間計測のための処理プログラムを簡略化することができる。
また、請求項３の異常監視用プログラムは、前述した基本的な特徴に加えて、請求項２に記載の特徴と同じ特徴を有している。よって、請求項２の異常監視用プログラムについて述べた効果と同じ効果が得られる。
次に、請求項４の異常監視用プログラムでは、請求項２，３の異常監視用プログラムにおいて、前記計数手順により計数される残り回数が多重起床の上限回数未満である多重起床要求可能タスクについて起床要求された際に、その起床要求がＲＴＯＳによって受け付けられなかったならば、異常と判断してマイコンをリセットするための処理を行う手順を、マイコンに実行させるプログラムを更に有している。そして、この異常監視用プログラムによれば、タスクの起床要求がＲＴＯＳによって受け付けられなくなる異常を検出してマイコンをリセットすることができるようになる。
また、請求項５の異常監視用プログラムでは、請求項２，３の異常監視用プログラムにおいて、前記計数手順により計数される残り回数が０である多重起床要求可能タスクについて起床要求された際に、その起床要求がＲＴＯＳによって受け付けられなかったならば、異常と判断してマイコンをリセットするための処理を行う手順を、マイコンに実行させるプログラムを更に有している。そして、この異常監視用プログラムによっても、タスクの起床要求がＲＴＯＳによって受け付けられなくなる異常を検出してマイコンをリセットすることができるようになる。また、請求項４の異常監視用プログラムよりも簡単な処理内容で済むという点で有利である。
【００１６】
次に、請求項６の異常監視用プログラムでは、請求項１〜５の異常監視用プログラムにおいて、無限ループ導入用プログラムを有している。この無限ループ導入用プログラムは、遅延時間監視手順により異常と判断された場合に、割り込みを禁止状態にした上でマイコンによるプログラムの実行状態を無限ループ状態にするための手順を、マイコンに実行させるためのものである。そして、このような異常監視用プログラムによれば、マイコンが異常状態で処理を継続してしまうことを確実に防止することができる。
【００１７】
ところで、マイコンをリセットするための処理としては、請求項７に記載の処理が考えられる。
即ち、請求項７の異常監視用プログラムでは、請求項１〜５の異常監視用プログラムにおいて、まず、マイコンは、当該マイコンの外部又は内部に設けられたウォッチドッグタイマが当該マイコンにより所定時間以内にリセットされないと該ウォッチドッグタイマによりリセットされるようになっていると共に、その所定時間よりも短い一定時間毎に特定のプログラムを実行することにより、ウォッチドッグタイマをリセットするための処理を行うようになっている。尚、ウォッチドッグタイマがマイコンの外部に設けられる場合、ウォッチドッグタイマをリセットするための処理は、前述したＷＤＣ信号を出力する処理となり、また、ウォッチドッグタイマがマイコンの内部に設けられる場合、ウォッチドッグタイマをリセットするための処理は、ウォッチドッグタイマのタイマ値を初期値にする処理となる。
【００１８】
そして、請求項７の異常監視用プログラムにおいて、マイコンにリセット用手順を実行させるプログラムは、マイコンをリセットするための処理として、ウォッチドッグタイマをリセットするための処理が行われないようにする処理を、マイコンに実行させるように構成されている。ウォッチドッグタイマをリセットするための処理が行われないようにすれば、そのウォッチドッグタイマによってマイコンがリセットされるからである。
【００１９】
この構成によれば、マイコンのリセットを簡単に実施することができる。
次に、請求項８の異常監視用プログラムでは、請求項７の異常監視用プログラムにおいて、マイコンに遅延時間監視手順を実行させるプログラム（以下、遅延時間監視プログラムともいう）のうち、起床要求されたタスクの前記遅延時間の計測値を更新していくための部分と、前記遅延時間の計測値が起床タイムアウト値以上になったか否かを判定するための部分との、両方又は一方は、前記特定のプログラム内に設けられている。
【００２０】
この構成によれば、「起床遅延時間の計測と、その計測値の判定との、両方又は一方が行われなくなること」＝「ウォッチドッグタイマのリセットが行われなくなること」となるため、遅延時間監視プログラムが正常に実行されなくなって異常なのにマイコンをリセットできない、といったことを防止することができる。つまり、仮に、遅延時間監視プログラムの全てと前記特定のプログラムとが別々のタイミングで実行されるものとした場合、遅延時間監視プログラムが実行されなくなると、異常であるにも拘わらずマイコンをリセットすることができなくなるが、請求項８の発明によれば、そのような問題を回避することができる。
【００２１】
次に、請求項９の異常監視用プログラムでは、請求項１〜８の異常監視用プログラムにおいて、遅延時間監視手順での判定に用いられる起床タイムアウト値は、タスクの優先度毎に異なる値に設定されている。
【００２２】
つまり、タスクの正常な起床遅延時間の許容範囲は、そのタスクの優先度によって異なるため、請求項９のように設定すると良い。そして、この異常監視用プログラムによれば、優先度が高いタスクの起床タイムアウト値ほど短く設定することで、異常を極力早く検出することができるようになる。
【００２３】
一方、遅延時間監視対象タスク（遅延時間監視手順の対象のタスク）は、請求項１０に記載のように、時間と非同期に発生するイベントに対応した時間非同期タスク（時間とは非同期に起床要求されるタスク）であることが好ましい。
【００２４】
なぜなら、一定時間毎に発生するイベント対応した時間同期タスク（一定時間毎に起床要求されるタスク）については、例えば、そのタスクの実行間隔を計測すると共に、その計測値が規定の実行間隔タイムアウト値以上になったならば異常と判断する実行間隔監視手順と、その実行間隔監視手順により異常と判断された場合にマイコンをリセットするための処理を行う手順とを、マイコンに実行させるプログラムを設けることで、その時間同期タスクが実行されなくなった異常の発生時にマイコンをリセットすることができ、また、タスクの実行間隔を計測する処理は、起床遅延時間を計測する処理と比べると簡単なものになるため、マイコンの処理負荷を抑制することができるからである。
【００２５】
次に、請求項１１の異常監視用プログラムでは、請求項１〜１０の異常監視用プログラムにおいて、アイドルタスクを除く最低優先度のタスクとして、一定時間毎に起床要求される時間同期タスクが設けられており、その時間同期タスクが、遅延時間監視対象タスクとなっている。
【００２６】
そして、請求項１１の異常監視用プログラムによれば、アイドルタスクを除く最低優先度の時間非同期タスク内でプログラム暴走が発生しても、その異常を検出することができる。最低優先度の時間非同期タスク内でプログラム暴走が発生すれば、それと同じ最低優先度の時間同期タスクは実行されなくなるため、遅延時間監視手順により異常と判断されるからである。尚、目的の機能を実現するためのプログラムにおける最低優先度のタスクとして、時間同期タスクが無ければ、最低優先度の時間同期タスクを故意に追加して、そのタスクを遅延時間監視手順の対象とすれば良い。
【００２７】
一方、請求項１２の異常監視用プログラムでは、請求項１〜１０の異常監視用プログラムにおいて、アイドルタスクを除く最低優先度のタスクとして、時間と非同期に発生するイベントに対応した時間非同期タスクがある。そして、その最低優先度の時間非同期タスクの実行時間を計測すると共に、その計測値が規定の実行時間タイムアウト値以上になったならば異常と判断する実行時間監視手順を、マイコンに実行させるプログラムと、その実行時間監視手順により異常と判断された場合にマイコンをリセットするための処理を行う手順を、マイコンに実行させるプログラムとを、更に有している。
【００２８】
この異常監視用プログラムによれば、最低優先度のタスクとして時間同期タスクが無くても（また、故意に設けなくても）、最低優先度の時間非同期タスク内でプログラム暴走が発生した場合に、その異常を検出することができる。
【００２９】
次に、請求項１３の異常監視用プログラムでは、請求項１〜１２の異常監視用プログラムにおいて、タスクのうち、一定時間毎に起床要求される時間同期タスクの１つ以上について、そのタスクの実行間隔を計測すると共に、その計測値が規定の実行間隔タイムアウト値以上になったならば異常と判断する実行間隔監視手順を、マイコンに実行させるプログラムと、その実行間隔監視手順により異常と判断された場合にマイコンをリセットするための処理を行う手順を、マイコンに実行させるプログラムとを、更に有している。
【００３０】
この異常監視用プログラムによれば、一定時間毎に時間同期タスクの起床を要求するためのプログラムに異常が発生するなどして、時間同期タスクの起床要求そのものがされなくなった異常も検出できるようになる。
【００３１】
次に、請求項１４の異常監視用プログラムでは、請求項１〜１３の異常監視用プログラムにおいて、まず、マイコンは、当該マイコンの外部又は内部に設けられたウォッチドッグタイマが当該マイコンにより所定時間以内にリセットされないと該ウォッチドッグタイマによりリセットされるようになっていると共に、その所定時間よりも短い一定時間毎に特定のプログラムを実行することにより、ウォッチドッグタイマをリセットするための処理を行うようになっている。そして、請求項１４の異常監視用プログラムでは、前記特定のプログラムを一定時間毎に起床させるためのタイマを起動する処理を、マイコンに行わせるためのプログラムが、前記タスクのうち、マイコンが起動した際に最初に起床されるイニシャルタスク内に設けられている。
【００３２】
このような請求項１４の異常監視用プログラムによれば、イニシャルタスクを遅延時間監視対象タスクとしなくても、そのイニシャルタスクが正常に実行されない場合に、マイコンをリセットすることができる。イニシャルタスクが正常に実行されなければ、前記特定のプログラムが起床されず、ウォッチドッグタイマをリセットするための処理が行われなくなるため、ウォッチドッグタイマによってマイコンがリセットされることとなるからである。
【００３９】
次に、請求項１５の発明は、請求項１〜１４の異常監視用プログラムを記録したコンピュータ読み取り可能な記録媒体である。そして、この記録媒体に記録したプログラムをコンピュータに実行させれば、前述した請求項１〜１４の各異常監視用プログラムによる効果を得ることができる。
【００４０】
また、請求項１６の発明は、請求項１〜１４の異常監視用プログラムを実行するマイコンを備えた電子装置である。そして、この電子装置によれば、前述した請求項１〜１４の各異常監視用プログラムによる効果を得ることができる。
【発明を実施するための最良の形態】
【００４１】
以下に、本発明が適用された実施形態の電子制御装置（以下、ＥＣＵという）について説明する。尚、本実施形態のＥＣＵは、マイコンを備えた電子装置に相当すると共に、例えば車両に搭載されてその車両のエンジンを制御するものである。
［第１実施形態］
まず図１に示すように、第１実施形態のＥＣＵ１は、エンジンを制御するための各種処理を実行するマイコン３と、車載バッテリ５の電圧（バッテリ電圧）を一定の電源電圧（例えば５Ｖ）に降圧してマイコン３に供給する電源ＩＣ７と、エンジンのクランク軸が所定角度回転する毎にパルス状の信号を出力するクランクセンサ、エンジンの冷却水の温度を検出する水温センサ、及びエンジンの吸入空気量を検出する吸気量センサ等、エンジンの運転状態を検出する様々なセンサ９からの信号を入力して波形整形やＡ／Ｄ変換を行うことにより、それら各信号をマイコン３に取り込ませる入力回路１１と、マイコン３からの制御信号に応じて、エンジンを作動させるためのインジェクタやイグナイタ等のアクチュエータ１３を駆動する出力回路１５とを、備えている。
【００４２】
そして、マイコン３には、プログラムを実行する周知のＣＰＵ２１と、実行対象のプログラムが予め記憶されたＲＯＭ２３と、ＣＰＵ２１による演算結果等を記憶するためのＲＡＭ２５と、入力回路１１及び出力回路１５との間で信号をやり取りするための入出力ポート２７とが備えられている。
【００４３】
また、電源ＩＣ７には、マイコン３にてプログラムが正常に実行されているか否かを監視するためのウォッチドッグタイマ（以下、ＷＤＴと記す）１７が備えられている。そして、電源ＩＣ７内のＷＤＴ１７は、マイコン３から電源ＩＣ７へ出力されるＷＤＣ信号がレベル変化（ハイ→ロー、又は、ロー→ハイ）すると、そのレベル変化エッジによってリセットされるようになっていると共に、もし、予め定められたＷＤＴ用のタイムアウト時間（以下、ＷＤタイムアウト時間という）以内にリセットされなければ、マイコン３へ一定時間だけローアクティブのリセット信号を出力して、マイコン３をリセットし再起動を試みるようになっている。
【００４４】
次に図２に、電源ＩＣ７のＷＤＴ１７によるマイコン３の監視手順を示す。
まず、ＥＣＵ１へのバッテリ電圧の供給が開始されて、電源ＩＣ７からマイコン３への電源電圧が立ち上がると、その後、一定の時間が経過した時点で、電源ＩＣ７からマイコン３へのリセット信号がローからハイになり、マイコン３のリセットが解除される。これは、電源ＩＣ７に備えられた周知のパワーオンリセット機能によるものである。
【００４５】
すると、マイコン３が起動して初期状態からプログラムの実行を開始する。そして、マイコン３は、特定のプログラムを実行することにより、ＷＤタイムアウト時間よりも短い一定時間毎に、ＷＤＴ１７をリセットするための処理として、ＷＤＣ信号の出力レベルを反転させるＷＤＣ信号出力処理を行う。
【００４６】
このため、マイコン３が正常にプログラムを実行している場合には、マイコン３から電源ＩＣ７（ＷＤＴ１７）へのＷＤＣ信号が、ＷＤタイムアウト時間よりも短い間隔でレベル反転することとなる。
【００４７】
これに対し、マイコン３にてプログラムが正常に実行されなくなり、上記ＷＤＣ信号出力処理が行われなくなると、マイコン３からのＷＤＣ信号がレベル変化しなくなる。
すると、その時点からＷＤタイムアウト時間が経過した時に、電源ＩＣ７（ＷＤＴ１７）からマイコン３へリセット信号が一定時間だけ出力され（即ち、リセット信号が一定時間だけローとなり）、マイコン３は一旦リセットされて再起動することとなる。
【００４８】
尚、本実施形態において、マイコン３が上記ＷＤＣ信号出力処理を行わなくなる場合としては、そのＷＤＣ信号出力処理を行うためのプログラム（本実施形態では、後述する１ｍｓタスク）自体が実行されなくなる場合と、異常監視用のプログラムにより異常が検出されてＷＤＣ信号出力処理が行われるのが故意に禁止される場合とがある。
【００４９】
次に図３に、マイコン３が実行するプログラム（以下、実行対象プログラムという）の構成を示す。
図３に示すように、マイコン３の実行対象プログラムは、少なくとも、ＲＴＯＳ、複数のタスク、ＲＴＯＳに対してタスクの起床要求を行うための起床要求プログラム、及び各種割り込み処理のプログラム（図示省略）から構成されている。そして、タスクとしては、イニシャルタスク、時間同期タスク（Ａ，Ｂ，Ｃ，…）、角度同期タスク（Ｄ，Ｅ，…）、イベントタスク（Ｆ，Ｇ，…）、及びアイドルタスクがある。
【００５０】
イニシャルタスクは、マイコン３が起動した際に最初に起床される。そして、そのイニシャルタスクの中には、マイコン３内にて周期タイマ割り込み（一定時間毎のタイマ割り込み）を発生させるためのタイマ２９を起動する処理のプログラムが含まれている。つまり、タイマ２９はイニシャルタスクが実行されることで起動される。
【００５１】
時間同期タスクは、一定時間毎に起床要求されるタスクである。尚、以下の説明においては、Ｎ（Ｎは整数）ｍｓ毎に起床要求される時間同期タスクのことを、Ｎｍｓタスクという。
【００５２】
角度同期タスクとイベントタスクは、時間とは非同期に起床要求される時間非同期タスクである。そして、角度同期タスクは、クランク軸の回転に同期して一定のクランク角毎のタイミングで起床要求される。また、イベントタスクは、人による特定のスイッチ操作が行われた時やセンサの異常が検出された時など、時間にもクランク角にも関係のないタイミングで起床要求される。
【００５３】
アイドルタスクは、マイコン３によって実現される制御機能（本実施形態ではエンジンの制御機能）に必要などのタスクよりも優先度が低く、且つ、マイコン３が起動した後に例えばＲＴＯＳにより１回だけ起床要求されて、その後は終了することなく、当該タスクよりも優先度が高い他のタスクに割り込まれながら実行され続けるタスクである。つまり、アイドルタスクは、マイコン３がエンジンの制御に必要な処理を行わないアイドル時に実行される。
【００５４】
一方、起床要求プログラムは、時間同期タスクの起床要求を行うための時間同期スケジュール部と、角度同期タスクの起床要求を行うための回転角度検出部と、イベントタスクの起床要求を行うためのイベント検出部とを備えている。
【００５５】
時間同期スケジュール部は、タイマ２９によって一定時間毎に発生される周期タイマ割り込み（本実施形態では１ｍｓ毎のタイマ割り込み）を受けると、１ｍｓ毎の時間同期イベントが発生したとして１ｍｓタスクの起床要求を行う（起床を要求する）。
【００５６】
更に、時間同期スケジュール部は、１ｍｓ周期のタイミングが２回来たら、２ｍｓ毎の時間同期イベントが発生したとして２ｍｓタスクの起床要求を行い、１ｍｓ周期のタイミングが４回来たら、４ｍｓ毎の時間同期イベントが発生したとして４ｍｓタスクの起床要求を行う、といった具合に、１ｍｓ周期のタイミングを分周して周期が異なる複数の時間同期タスクの起床を要求する。
【００５７】
また、回転角度検出部は、クランクセンサからの信号（回転信号）に基づきクランク角を検出し、一定のクランク角のタイミング毎に、角度同期イベントが発生したとして、その一定のクランク角毎に実行されるべき角度同期タスクの起床要求を行う。
【００５８】
イベント検出部は、時間にもクランク角にも関係のない不定期なイベントの発生を検出して、その検出したイベントに対応するイベントタスクの起床要求を行う。例えば、各種センサからの入力信号をモニタして、正常範囲外であったときにセンサ異常と判定し、ダイアグノシス処理を行うためのイベントタスクの起床要求を行う。
【００５９】
ＲＴＯＳは、上記のようなタスクの起床要求を受けて、それぞれの起床要求に対応するタスクを、あらかじめ設定されたタスクの優先度（優先順位）に基づきスケジューリングして起床させる。
【００６０】
尚、タスクの優先度とは、図４に例示するように、優先度が低いタスクは、それよりも優先度が高いタスクに割り込まれ、その優先度が高いタスクが終了すると再び優先度が低いタスクの続きの処理が行われる、といったものである。そして、本実施形態において、時間同期タスクのうちでは、１ｍｓタスク（時間同期タスクＡ）が最も高い優先度に設定されている。
【００６１】
一方、本実施形態において、ＲＡＭ２５には、ＣＰＵ２１による演算結果として、プログラムの実行を正しく進めるためのアドレス情報などが記憶される。また、実行対象プログラムは、予め全てＲＯＭ２３に記憶されているが、マイコン３の動作中に適宜ＲＡＭ２５へコピーされ、そのＲＡＭ２５上で実行される場合もある。このため、例えば電波ノイズなどの外乱によってＲＡＭ２５内のデータが破壊されると、マイコン３にてプログラムが正常に実行されなくなる。よって、そのような場合には、マイコン３をリセットして再起動する必要がある。
【００６２】
そこで次に、マイコン３にてプログラムが正常に実行されているか否かを監視するために、そのマイコン３が実行する異常監視用プログラムの内容について、図５のフローチャートを用い説明する。
【００６３】
まず、本実施形態の異常監視用プログラムによって実現される機能（異常監視用機能）の概要を説明すると、この機能は、起床要求プログラムによりＲＴＯＳに対してタスクの起床が要求されてから、そのタスクの実行が開始（起床）されるまでの起床遅延時間を計測し、その計測値が起床タイムアウト値以上になったならば、異常と判断して、ＷＤＣ信号の出力（レベル反転）を停止することにより、当該マイコン３がＷＤＴ１７によりリセットされるようにするものである。
【００６４】
そこで、異常監視用プログラムの処理として、図５（Ａ）〜（Ｃ）の処理が行われるようにしている。尚、本実施形態において、遅延時間監視対象タスク（即ち、起床遅延時間を計測して監視する対象のタスク）は、１ｍｓタスク以外の時間同期タスク、角度同期タスク、及びイベントタスクの各々である。
【００６５】
まず、図５（Ａ）に示すように、起床要求プログラムでは、あるタスクＸに対応するイベントが発生して、そのタスクＸの起床要求を行った際に（Ｓ１１０）、そのタスクＸに対応する起床要求フラグＴＡＦ［Ｘ］をオンにする（Ｓ１２０）。尚、［Ｘ］は、それが付された情報（ここでは、フラグ）が、タスクＸに対応するものであることを示している。そして、起床要求フラグＴＡＦ［Ｘ］は、タスクＸの起床要求が行われたことを示すフラグである。
【００６６】
また、図５（Ｂ）に示すように、遅延時間監視対象タスクの各々では、その先頭にて、当該タスクＸに対応する起床要求フラグＴＡＦ［Ｘ］をオフにし（Ｓ２１０）、更に、当該タスクＸに対応する起床遅延時間カウンタＴＤＣ［Ｘ］を０にクリアする（Ｓ２２０）。尚、起床遅延時間カウンタＴＤＣ［Ｘ］は、タスクＸの起床遅延時間を計測するためのカウンタであり、後述する１ｍｓタスクによってインクリメント（１カウントアップ）される。
【００６７】
そして、図５（Ｃ）に示すように、１ｍｓタスクでは、まずＳ３１０にて、遅延時間監視対象タスクの番号を示す番号カウンタｉを初期値の１にし、次のＳ３１５にて、その番号カウンタｉの値に該当する遅延時間監視対象タスクの起床要求フラグＴＡＦ［ｉ］が、オンであるか否かを判定する。そして、起床要求フラグＴＡＦ［ｉ］がオンでなければ（オフならば）、Ｓ３２０に進む。
【００６８】
Ｓ３２０では、番号カウンタｉをインクリメントし、続くＳ３２５にて、番号カウンタｉの値が遅延時間監視対象タスクの総数（以下単に、対象タスク総数という）を越えたか否かを判定する。そして、番号カウンタｉの値が対象タスク総数を越えていなければ、上記Ｓ３１５に戻る。
【００６９】
また、上記Ｓ３１５にて、起床要求フラグＴＡＦ［ｉ］がオンであると判定した場合には、Ｓ３３０に移行して、現在の番号カウンタｉの値に該当する遅延時間監視対象タスクの起床遅延時間カウンタＴＤＣ［ｉ］をインクリメントする。
【００７０】
そして、次のＳ３３５にて、その起床遅延時間カウンタＴＤＣ［ｉ］の値が、起床タイムアウト値以上であるか否かを判定し、起床タイムアウト値以上でなければ、上記Ｓ３２０へ移行する。
【００７１】
これに対し、上記Ｓ３３５にて、起床遅延時間カウンタＴＤＣ［ｉ］の値が起床タイムアウト値以上であると判定した場合には、異常と判断して、Ｓ３４０に進む。
そして、Ｓ３４０では、割り込みを禁止状態にし、プログラムの実行状態を無限ループ状態にする。つまり、プログラムの実行先が当該Ｓ３４０のままになるようにする。
【００７２】
一方、上記Ｓ３２５にて、番号カウンタｉの値が対象タスク総数を越えたと判定した場合には、Ｓ３４５に移行する。
Ｓ３４５では、ＷＤＣ信号の出力レベルが同一レベルである継続時間を計測するためのカウンタＷＩＣの値が、ＷＤＣパルス幅相当値（即ち、ＷＤＣ信号の出力レベルを反転させてから次に反転させるまでの時間に相当する値）以上であるか否かを判定する。そして、カウンタＷＩＣの値がＷＤＣパルス幅相当値以上でなければ、Ｓ３５０に進んで、カウンタＷＩＣをインクリメントし、その後、１ｍｓタスクにおける他の処理のステップへ進む。
【００７３】
また、上記Ｓ３４５にて、カウンタＷＩＣの値がＷＤＣパルス幅相当値以上であると判定した場合には、Ｓ３５５に移行して、そのカウンタＷＩＣの値を０にクリア（初期化）し、続くＳ３６０にて、ＷＤＣ信号の出力レベルを反転させる。そして、その後、１ｍｓタスクにおける他の処理のステップへ進む。
【００７４】
つまり、１ｍｓタスクでは、ＷＤタイムアウト時間よりも短い一定時間毎にＷＤＣ信号の出力レベルを反転させるための処理（Ｓ３４５〜Ｓ３６０）を行うと共に、遅延時間監視対象タスクの各々について、起床要求フラグＴＡＦがオンになっている継続時間（即ち、起床遅延時間）を起床遅延時間カウンタＴＤＣにより計測し（Ｓ３１０〜Ｓ３３５）、何れか１つのタスクでも、その時間の計測値が規定の起床タイムアウト値以上になったならば、異常と判断して（Ｓ３３５：ＹＥＳ）、当該１ｍｓタスク内でプログラムを無限ループさせ（Ｓ３４０）、これにより、以後はＷＤＣ信号のレベル反転が故意に行われないようにしている。
【００７５】
尚、各タスクの起床遅延時間の正常な最大値は、タスクの優先度に依存し、優先度が低いタスクほど長くなるため、起床タイムアウト値は、最低優先度のタスクに合わせて設定しておけば良い。つまり、起床タイムアウト値は、最低優先度のタスクについて考えられる起床遅延時間の正常な最大値よりも若干大きい値に設定しておけば良い。
【００７６】
次に、上記図５の処理の作用について、図６を用い説明する。尚、図６は、あるタスクＸ内でプログラム暴走（無限ループ）が発生した場合の例である。
図６に示すように、タスクＸよりも優先度が低いタスクＹの起床要求が行われた際、そのタスクＹの起床要求フラグＴＡＦ［Ｙ］がオンとなり、１ｍｓタスク内で、タスクＹの起床遅延時間の計測（即ち、起床遅延時間カウンタＴＤＣ［Ｙ］のカウントアップ）が始まる。
【００７７】
ここで、タスクＹの実行開始がタスクＸによって遅らされた場合でも、起床遅延時間が正常範囲内（即ち、ＴＤＣ［Ｙ］＜起床タイムアウト値）であれば、ＷＤＣ信号は出力し続けられ、その後、タスクＹが実行された時点で起床要求フラグＴＡＦ［Ｙ］がオフとなり、その回のタスクＹの起床遅延時間の計測は終了する。
【００７８】
これに対し、タスクＸ内でプログラム暴走（無限ループ）が発生した場合には、タスクＹはいつまで経っても実行されなくなり、起床遅延時間カウンタＴＤＣ［Ｙ］の値が起床タイムアウト値に達することとなる。すると、ＷＤＣ信号の出力（レベル反転）が停止して、その後、マイコン３は電源ＩＣ７のＷＤＴ１７によりリセットされる。
【００７９】
尚、こうした動作は、タスクＹの優先度がタスクＸと同じであっても同様である。
また、図６の例は、タスクＸが１ｍｓタスクよりも優先度が低い場合の例であるが、１ｍｓタスクと同じ優先度か高い優先度のタスク（又は割り込み）の何れかの処理でプログラム暴走が発生した場合は、１ｍｓタスク自体が実行できなくなることでＷＤＣ信号の出力が止まり、やはり、ＷＤＴ１７によるマイコン３のリセットが発生することとなる。
【００８０】
また特に、ＲＴＯＳに異常が生じて、ある特定のタスク、又は特定の優先度のタスク全てが実行されないという状態になった場合にも、起床要求に対して該当するタスクが実行されなくなるため、やはり、起床遅延時間カウンタＴＤＣの値が起床タイムアウト値に達して、ＷＤＣ信号の出力が停止し、ＷＤＴ１７によるマイコン３のリセットが発生することとなる。
【００８１】
以上のような第１実施形態ＥＣＵ１によれば、ＲＴＯＳに異常が生じて、タスクの起床が要求されてもそのタスクが実行されない、という異常状態を検出して、マイコン３をリセットすることができる。そして、タスクが、時間同期タスクと時間非同期タスクとの何れであっても、異常検出が可能となる。更に、遅延時間監視対象タスクと同じ優先度かそれよりも高い優先度の他のタスク内でプログラム暴走が発生した場合でも、異常を検出してマイコン３をリセットすることができる。
【００８２】
また、本実施形態では、図５（Ａ）のＳ１２０、図５（Ｂ）のＳ２１０，Ｓ２２０、及び図５（Ｃ）のＳ３１０〜Ｓ３３５が、遅延時間監視プログラム（マイコンに遅延時間監視手順を実行させるプログラム）に相当しているが、そのうち、起床要求されたタスクの起床遅延時間カウンタＴＤＣの値を更新していくための処理ステップ（Ｓ３１０〜Ｓ３３０）と、起床遅延時間カウンタＴＤＣの値が起床タイムアウト値以上になったか否かを判定するための処理ステップ（Ｓ３３５）とが、ＷＤＣ信号を出力するためのＳ３６０（即ち、ＷＤＴ１７をリセットするための処理ステップ）を含む１ｍｓタスク内に設けられているため、「起床遅延時間の計測と、その計測値の判定とが行われなくなること」＝「ＷＤＴ１７のリセットが行われなくなること」となる。よって、遅延時間監視プログラムが正常に実行されなくなって異常なのにマイコン３をリセットできない、といったことも防止することができる。
【００８３】
また、本実施形態では、図５（Ｃ）のＳ３３５で異常と判断された場合に、次のＳ３４０により、割り込みを禁止状態にした上でプログラムの実行状態を無限ループ状態にしているため、マイコン３が異常状態で処理を継続してしまうことを確実に防止することができる。
【００８４】
尚、本実施形態では、図５（Ｃ）のＳ３４０が、マイコンにリセット用手順を実行させるプログラムに相当しており、また、無限ループ導入用プログラムにも相当している。
更に、本実施形態では、１ｍｓタスクを周期的に起床させるためのタイマ２９を起動する処理を、イニシャルタスク内で行うようにしているため、イニシャルタスクを遅延時間監視対象タスクとしなくても、そのイニシャルタスクが正常に実行されない場合に、マイコン３をリセットすることができる。イニシャルタスクが正常に実行されなければ、１ｍｓタスクが起床されず、ＷＤＣ信号を出力するための処理（Ｓ３６０）が行われなくなるため、ＷＤＴ１７によりマイコン３がリセットされるからである。
【００８５】
一方、Ｓ３３５の判定に用いられる起床タイムアウト値は、タスクの優先度毎に異なる値に設定しても良い。つまり、優先度が高いタスクの起床タイムアウト値ほど短い値（小さい値に）設定しておくことで、異常を極力早く検出できるようになる。
［第２実施形態］
ところで、タスクには、起床要求されてから実行が終了するまでの間に重ねて起床要求されることが可能な多重起床要求可能タスクがある。
【００８６】
そこで、第２実施形態では、そのような多重起床要求可能タスクに関しても異常検出が十分できるように、図５（Ａ）〜（Ｃ）の処理に代えて、図７（Ａ）〜（Ｃ）の処理が行われるようにプログラムを構成している。尚、図７において、図５と同じ内容の処理については、同一のステップ番号を付しているため説明を省略する。
【００８７】
まず、図７（Ａ）に示すように、起床要求プログラムでは、ある多重起床要求可能タスクＸに対応するイベントが発生して、そのタスクＸの起床要求をＳ１１０で行うと、次のＳ１３０にて、ＲＴＯＳからの戻り値がＯＫであったか否かを判定し、戻り値がＯＫならば（Ｓ１３０：ＹＥＳ）、今回行ったタスクＸの起床要求がＲＴＯＳによって受け付けられたということであるから、Ｓ１４０に進む。そして、そのＳ１４０にて、タスクＸに対応する起床要求回数カウンタＴＡＣ［Ｘ］をインクリメントし、その後、当該図７（Ａ）の処理を抜ける。
【００８８】
尚、起床要求回数カウンタＴＡＣ［Ｘ］は、タスクＸの起床要求回数と実行回数との差分の回数であって、タスクＸが起床要求されたが未だ実行されていない残り回数（以下、起床残り回数という）を計数するためのカウンタであり、その初期値は０である。
【００８９】
一方、上記Ｓ１３０にて、ＲＴＯＳからの戻り値がＯＫではないと判定した場合（具体的には、ＲＴＯＳが“エラー”を示す戻り値を返した場合）には（Ｓ１３０：ＮＯ）、今回行ったタスクＸの起床要求がＲＴＯＳによって受け付けられなかったということであるから、Ｓ１５０に移行し、起床要求回数カウンタＴＡＣ［Ｘ］の値が、タスクＸについての多重起床上限回数［Ｘ］以上であるか否かを判定する。そして、このＳ１５０にて、起床要求回数カウンタＴＡＣ［Ｘ］の値が多重起床上限回数［Ｘ］以上であると判定した場合には、そのまま当該図７（Ａ）の処理を抜ける。尚、多重起床上限回数［Ｘ］は、タスクＸについて、ＲＴＯＳに予め設定された多重起床要求回数（多重に起床要求できる回数）の上限値である。
【００９０】
また、上記Ｓ１５０にて、起床要求回数カウンタＴＡＣ［Ｘ］の値が多重起床上限回数［Ｘ］以上ではないと判定した場合には、ＲＴＯＳが異常であると判断して、Ｓ１６０に進む。そして、そのＳ１６０にて、前述した図５（Ｃ）のＳ３４０と同様に、割り込みを禁止状態にし、プログラムの実行状態を無限ループ状態にする。すると、その後、ＷＤタイムアウト時間が経過した時に、ＷＤＴ１７により当該マイコン３がリセットされることとなる。
【００９１】
そして、図７（Ｂ）に示すように、遅延時間監視対象タスクである多重起床要求可能タスクの各々では、その先頭にて、当該タスクＸに対応する起床要求回数カウンタＴＡＣ［Ｘ］をデクリメント（１カウントダウン）し（Ｓ２１５）、更に、当該タスクＸに対応する起床遅延時間カウンタＴＤＣ［Ｘ］を０にクリアする（Ｓ２２０）。
【００９２】
一方、図７（Ｃ）に示すように、本第２実施形態の１ｍｓタスクでは、図５（Ｃ）の１ｍｓタスクと比較すると、Ｓ３１５の代わりに、Ｓ３１７の処理が行われる点のみ異なっており、そのＳ３１７では、番号カウンタｉの値に該当するタスクの起床要求回数カウンタＴＡＣ［ｉ］の値が０であるか否かを判定する。
【００９３】
そして、そのＳ３１７にて、起床要求回数カウンタＴＡＣ［ｉ］の値が０であると判定した場合には、前述したＳ３２０に進む。また、Ｓ３１７にて、起床要求回数カウンタＴＡＣ［ｉ］の値が０ではないと判定した場合には、前述したＳ３３０に移行する。
【００９４】
つまり、本第２実施形態では、多重起床要求可能タスクの各々について、起床要求フラグＴＡＦの代わりに、起床要求回数カウンタＴＡＣを設け、図８に示すように、その起床要求回数カウンタＴＡＣを、起床要求時にインクリメントし（Ｓ１４０）、タスクの実行開始時にデクリメントすることで（Ｓ２１５）、その起床要求回数カウンタＴＡＣの値が起床残り回数を示すようにしている。尚、図８においては、少なくともタスクＹが多重起床要求可能タスクであり、そのタスクＹの優先度は、図６と同様に、１ｍｓタスク及びタスクＸよりも低く設定されている。
【００９５】
そして、図８に示すように、１ｍｓタスクでは、多重起床要求可能タスクの各々について、起床要求回数カウンタＴＡＣの値が０でない場合に（Ｓ３１７：ＮＯ）、そのタスクの起床遅延時間カウンタＴＤＣをインクリメントするようになっている（Ｓ３３０）。また、その起床遅延時間カウンタＴＤＣの値は、該当するタスクが実行されると、０にクリアされる（Ｓ２２０）。
【００９６】
このような処理により、図８におけるタスクＹのように、多重起床要求可能タスクについては、初回の起床要求から最初に実行されるまでは起床遅延時間が、起床遅延時間カウンタＴＤＣの値として計測され、その後、起床要求回数カウンタＴＡＣの値（起床残り回数）が０となるまでは、実行開始から次の実行開始までの時間が、起床遅延時間カウンタＴＤＣの値として計測されることとなる。そして、何れにしても、起床遅延時間カウンタＴＤＣの値が起床タイムアウト値以上になったならば、異常と判断されることとなる（Ｓ３３５：ＹＥＳ）。
【００９７】
つまり、多重起床要求可能タスクが多重に起床要求される場合には、起床要求（１回目）→起床要求（２回目）→実行（１回目）→実行（２回目）、というような順になるため、２回目以降の時間計測については、対応する起床要求からの経過時間ではなく、前回の実行開始時からの経過時間を計測するようにしており、これにより時間計測のための処理プログラムを簡略化している。尚、通常、起床要求が累積した場合には、「起床→実行」までの時間よりも「実行→実行」までの時間の方が短くなるため、２回目以降の時間計測時においてＳ３３５での起床タイムアウト値を変えなくても、検出性能上特に問題はない。よって、それぞれの回の「起床→実行」までの時間を別々に計測するよりもソフトウェアのロジックを簡単なものにすることができるのである。
【００９８】
そして、このような第２実施形態によれば、ＲＴＯＳに異常が生じて、多重に起床要求されたタスクがその回数分だけ正常に起床されなくなった、という異常状態を、簡単な処理で且つ確実に検知してマイコン３をリセットすることができる。
【００９９】
また、本第２実施形態では、図７（Ａ）のＳ１３０，Ｓ１５０，及びＳ１６０の処理を行っているため、起床要求回数カウンタＴＡＣの値が多重起床上限回数未満であるタスクについて新たに起床要求された際に、ＲＴＯＳが戻り値としてＯＫを返さず、その起床要求がＲＴＯＳによって受け付けられなかったならば、異常と判断して無限ループ状態となり、ＷＤＣ信号の出力を停止することとなる。よって、タスクの起床要求がＲＴＯＳによって受け付けられなくなる異常を検出して、マイコン３のリセットを実施することができる。
【０１００】
尚、本第２実施形態では、図７（Ａ）のＳ１４０、図７（Ｂ）のＳ２１５，Ｓ２２０、及び図７（Ｃ）のＳ３１０〜Ｓ３３５が、遅延時間監視プログラムに相当しているが、そのうち、図７（Ａ）のＳ１４０、及び図７（Ｂ）のＳ２１５が、多重起床要求可能タスクについて起床要求されたが実行されていない残り回数（起床残り回数）を計数する計数手順を、マイコンに実行させるプログラムに相当している。また、図７（Ａ）のＳ１３０，Ｓ１５０，及びＳ１６０が、請求項４に記載の手順を、マイコンに実行させるプログラムに相当している。
【０１０１】
一方、言うまでもないが、図７の処理は、遅延時間監視対象タスクが多重起床要求可能タスクでなくても（即ち、多重に起床要求することのできない、又は多重に起床要求されることのないタスクであっても）適用することはできる。
【０１０２】
また、変形例として、図７（Ａ）のＳ１５０では、起床要求回数カウンタＴＡＣ［Ｘ］の値が０であるか否かを判定し、０であればＲＴＯＳが異常であると判断して、Ｓ１６０へ進むようにしても良い。このように変形すれば、起床要求回数カウンタＴＡＣの値が０であるタスクについて新たに起床要求された際に、その起床要求がＲＴＯＳによって受け付けられなかったならば、異常と判断して無限ループ状態となり、ＷＤＣ信号の出力を停止することとなる。
【０１０３】
そして、この変形例によっても、タスクの起床要求がＲＴＯＳによって受け付けられなくなる異常を検出してマイコン３のリセットを実施することができ、しかも、処理内容を簡単化することができる。例えば、第２実施形態のＳ１５０では、判定に用いる多重起床上限回数をタスク毎に切り替える必要があるが、この変形例によれば、多重起床上限回数を意識する必要がなく、そのような切り替えを行わなくて済むからである。尚、この変形例では、図７（Ａ）のＳ１３０，Ｓ１５０，及びＳ１６０が、請求項５に記載の手順を、マイコンに実行させるプログラムに相当することとなる。
［第３実施形態］
ところで、上記各実施形態の異常監視用プログラムでは、あるタスク内でプログラム暴走（無限ループ）が発生したことは、そのタスクと優先度が同じかそれよりも優先度が低い他のタスクの起床遅延時間が起床タイムアウト値以上になることで検知する仕組みになっている。
【０１０４】
このため、時間周期タスクのうちの最も優先度が低いタスクよりも更に優先度が低く、且つ、アイドルタスクではない最低優先度のタスクとして、時間非同期タスク（特に、時間にもクランク角にも関係のない不定期なタイミングで起床要求されるイベントタスク）があり、しかも、その最低優先度の時間非同期タスクが１つである場合には、その時間非同期タスクの中でのプログラム暴走は検知されない。その時間非同期タスク内でプログラム暴走が発生しても、他のタスクの起床遅延時間に影響が出ないからである。
【０１０５】
また、そのような最低優先度の時間非同期タスクが複数あり、その各タスクが遅延時間監視対象タスクとなっていても、異常を検知できるまでの時間が不定になってしまう。例えば、最低優先度の時間非同期タスクとしてＴＡとＴＢとがあり、そのうちのＴＡ内でプログラム暴走が発生したとすると、ＴＢは起床要求されても実行されなくなるため、そのＴＢが起床要求されれば、やがては異常が検知されるが、ＴＢが起床要求されるタイミングは時間的に不定であるため、ＴＡ内でプログラム暴走が発生してから異常が検知されるまでの時間が不定になってしまうのである。
【０１０６】
そこで、こうした懸念を簡単に解決するために、第３実施形態では、例えば第２実施形態に対して、図９（Ａ），（Ｂ）の処理が追加して行われるようにしている。そして、その図９（Ａ），（Ｂ）の処理により、最低優先度の時間非同期タスクの実行時間（実行開始から実行終了までの時間）を計測すると共に、その計測値が規定の実行時間タイムアウト値以上になったならば、異常と判断して、ＷＤＣ信号の出力を停止することにより、マイコン３がＷＤＴ１７によりリセットされるようにしている。尚、以下では、実行時間を計測する対象の最低優先度の時間非同期タスクを、実行時間監視対象タスクという。
【０１０７】
具体的に説明すると、まず図９（Ａ）に示すように、実行時間監視対象タスクの各々では、その先頭にて、前述したＳ２１５，Ｓ２２０の処理（図７（Ｂ）参照）を行った後、当該タスクＸに対応する実行時間カウンタＴＥＣ［Ｘ］を０にクリアし（Ｓ２３０）、更に、当該タスクＸに対応する実行中フラグＴＥＦ［Ｘ］をオンにする（Ｓ２４０）。そして、当該タスクＸの最後で実行中フラグＴＥＦ［Ｘ］をオフに戻す（Ｓ２５０）。
【０１０８】
尚、実行時間カウンタＴＥＣ［Ｘ］は、タスクＸの実行時間を計測するためのカウンタであり、後述する１ｍｓタスクのＳ４３０でインクリメントされる。また、実行中フラグＴＥＦ［Ｘ］は、タスクＸが実行中であることを示すフラグである。
【０１０９】
そして、１ｍｓタスクでは、図７（Ｃ）の処理に加え、更に図９（Ｂ）の処理を行う。
即ち、図９（Ｂ）に示すように、まずＳ４１０にて、実行時間監視対象タスクの番号を示す番号カウンタｊを初期値の１にし、次のＳ４１５にて、その番号カウンタｊの値に該当する実行時間監視対象タスクの実行中フラグＴＥＦ［ｊ］が、オンであるか否かを判定する。そして、実行中フラグＴＥＦ［ｊ］がオンでなければ（オフならば）、Ｓ４２０に進む。
【０１１０】
Ｓ４２０では、番号カウンタｊをインクリメントし、続くＳ４２５にて、番号カウンタｊの値が実行時間監視対象タスクの総数を越えたか否かを判定する。そして、番号カウンタｊの値が上記総数を越えていれば（Ｓ４２５：ＹＥＳ）、１ｍｓタスクにおける他の処理のステップへ進むが、番号カウンタｊの値が上記総数を越えていなければ（Ｓ４２５：ＮＯ）、上記Ｓ４１５に戻る。
【０１１１】
また、上記Ｓ４１５にて、実行中フラグＴＥＦ［ｊ］がオンであると判定した場合には、Ｓ４３０に移行して、現在の番号カウンタｊの値に該当する実行時間監視対象タスクの実行時間カウンタＴＥＣ［ｊ］をインクリメントする。
【０１１２】
そして、次のＳ４３５にて、その実行時間カウンタＴＥＣ［ｊ］の値が、実行時間タイムアウト値以上であるか否かを判定し、実行時間タイムアウト値以上でなければ、上記Ｓ４２０へ移行する。
【０１１３】
これに対し、上記Ｓ４３５にて、実行時間カウンタＴＥＣ［ｊ］の値が実行時間タイムアウト値以上であると判定した場合には、異常と判断して、Ｓ４４０に進む。
そして、Ｓ４４０では、図７（Ｃ）のＳ３４０と同様に、割り込みを禁止状態にし、プログラムの実行状態を無限ループ状態にする。すると、以後はＷＤＣ信号の出力が行われなくなり、マイコン３はＷＤＴ１７によってリセットされることとなる。
【０１１４】
つまり、１ｍｓタスクでは、実行時間監視対象タスクの各々について、実行中フラグＴＥＦがオンになっている継続時間（即ち、実行時間）を実行時間カウンタＴＥＣにより計測し（Ｓ４１０〜Ｓ４３５）、何れか１つのタスクでも、その時間の計測値が実行時間タイムアウト値以上になったならば、異常と判断して（Ｓ４３５：ＹＥＳ）、当該１ｍｓタスク内でプログラムを無限ループさせ（Ｓ４４０）、これにより、以後はＷＤＣ信号のレベル反転が故意に行われないようにしている。
【０１１５】
以上のような第３実施形態によれば、最低優先度のタスクとして時間同期タスクが無くても、最低優先度の時間非同期タスク内でプログラム暴走が発生した場合には、その異常を、上記実行時間タイムアウト値に相当する時間が経過した時点で確実に検出することができるようになる。図９（Ｂ）のＳ４３５で異常と判断されるからである。
【０１１６】
尚、本第３実施形態では、図９（Ａ）のＳ２３０〜Ｓ２５０と図９（Ｂ）のＳ４１０〜Ｓ４３５が、実行時間監視手順をマイコンに実行させるプログラムに相当し、図９（Ｂ）のＳ４４０が、実行時間監視手順により異常と判断された場合にマイコンをリセットするための処理を行う手順を、マイコンに実行させるプログラムに相当している。
【０１１７】
一方、上記第３実施形態の別案として、前述した懸念を解決するためには、図９の処理を行う代わりに、以下のようにしても良い。
即ち、アイドルタスクを除く最低優先度のタスクとして、時間同期タスクがなければ、制御には関係のない時間同期タスクを追加し、その追加した時間同期タスクも遅延時間監視対象タスクとなるようにプログラムを構成すれば良い。
【０１１８】
このようにすれば、アイドルタスクを除く最低優先度の時間非同期タスク内でプログラム暴走が発生した場合には、それと同じ最低優先度の上記追加した時間同期タスクが実行されなくなるため、図５（Ｃ）又は図７（Ｃ）のＳ３３５により異常と判断されるからである。
【０１１９】
尚、エンジンの制御機能を実現するためのプログラムにおける最低優先度のタスクとして、時間同期タスクが元々あれば、その時間同期タスクを遅延時間監視対象タスクにしておけば良い。
［第４実施形態］
次に、第４実施形態では、第２又は第３実施形態と比較すると、下記（１）〜（４）の点が異なっている。
【０１２０】
（１）時間同期タスクのうちの１つ以上が、実行間隔監視対象タスクとなっている。
尚、実行間隔監視対象タスクとは、それの実行間隔（実行開始から次の実行開始までの時間）が後述の処理によって計測されるタスクのことである。
【０１２１】
（２）図１０（Ａ）に示すように、起床要求プログラムでは、実行間隔監視対象タスクＸについては、そのタスクＸに対応するイベントが発生すると、起床要求だけを行う（Ｓ１１０）。
【０１２２】
尚、実行間隔監視対象タスク以外のタスク（即ち、遅延時間監視対象タスク）については、前述した図７（Ａ）の処理が行われる。
（３）図１０（Ｂ）に示すように、実行間隔監視対象タスクの各々では、その先頭にて、当該タスクＸに対応する起床要求回数カウンタＴＡＣ［Ｘ］の値を１に設定し（Ｓ２１７）、更に、当該タスクＸに対応するカウンタＴＣ［Ｘ］を０にクリアする（Ｓ２２２）。
【０１２３】
尚、実行間隔監視対象タスク以外の遅延時間監視対象タスクでは、前述した図７（Ｂ）の処理が行われるが、そのタスクＸにおけるＳ２２０では、そのタスクＸに対応するカウンタＴＣ［Ｘ］を０にクリアする。
【０１２４】
そして、本第４実施形態において、カウンタＴＣ［Ｘ］は、タスクＸが実行間隔監視対象タスクであれば、そのタスクの実行間隔を計測するためのカウンタとして用いられ、タスクＸが実行間隔監視対象タスクでなければ、そのタスクＸの起床遅延時間を計測するためのカウンタとして用いられる。
【０１２５】
（４）１ｍｓタスクは、図７（Ｃ）の処理に代えて、図１１の処理が行われるように構成されている。尚、図１１において、図７（Ｃ）と同じ内容の処理については、同一のステップ番号を付しているため説明を省略する。
【０１２６】
図１１に示すように、本第４実施形態の１ｍｓタスクでは、７（Ｃ）と比較すると、Ｓ３３０の代わりにＳ３３２の処理が行われ、Ｓ３３５の代わりにＳ３３８の処理が行われ、更にＳ３３２とＳ３３８との間で、Ｓ３３７の処理が行われる点が異なっている。
【０１２７】
そして、Ｓ３３２では、現在の番号カウンタｉの値に該当するタスクのカウンタＴＣ［ｉ］をインクリメントする。
次にＳ３３７では、番号カウンタｉの値に該当するタスクが、実行間隔監視対象タスクであるか否かを判別し、実行間隔監視対象タスクであれば、カウンタＴＣ［ｉ］と大小比較するタイムアウト値を、実行間隔のタイムアウト値に設定し、また、番号カウンタｉの値に該当するタスクが実行間隔監視対象タスクでなければ、タイムアウト値を、図７（Ｃ）のＳ３３５で用いられる起床タイムアウト値と同じタイムアウト値（即ち、起床遅延時間のタイムアウト値）に設定する。
【０１２８】
尚、本第４実施形態において、図１１の番号カウンタｉは、実行間隔監視対象タスクと遅延時間監視対象タスクとの各タスクの番号を示している。そして、どの番号のタスクが実行間隔監視対象タスクと遅延時間監視対象タスクとの何れであるかの対応情報が予めＲＯＭ２３に記憶されており、Ｓ３３７では、その対応情報を参照して上記の判別を行う。
【０１２９】
次にＳ３３８では、カウンタＴＣ［ｉ］の値が、上記Ｓ３３７で設定されたタイムアウト値以上であるか否かを判定する。そして、カウンタＴＣ［ｉ］の値がタイムアウト値以上でなければ、Ｓ３２０に移行するが、カウンタＴＣ［ｉ］の値がタイムアウト値以上であれば、異常と判断してＳ３４０に進み、割り込みを禁止状態にした上でプログラムの実行状態を無限ループ状態にする。
【０１３０】
以上のような処理により、実行間隔監視対象タスクについては、上記Ｓ３３２により、実行間隔がカウンタＴＣで計測され、その計測値が実行間隔のタイムアウト値以上になったならば、上記Ｓ３３８により異常と判断されて、マイコン３がＷＤＴ１７によりリセットされることとなる。また、遅延時間監視対象タスクについては、上記Ｓ３３２により、起床遅延時間がカウンタＴＣで計測され、その計測値が起床遅延時間のタイムアウト値以上になったならば、上記Ｓ３３８により異常と判断されて、マイコン３がＷＤＴ１７によりリセットされることとなる。尚、この遅延時間監視対象タスクについての動作は、第２及び第３実施形態と同じである。
【０１３１】
そして、このような第４実施形態によれば、ＲＴＯＳに対して一定時間毎に時間同期タスクの起床を要求するためのプログラム（即ち、起床要求プログラムの時間同期スケジュール部）に関するＲＡＭ２５内のデータがノイズ等で破壊され、時間同期タスクの起床要求そのものがされなくなった異常状態も検出して、マイコン３をリセットすることができる。
【０１３２】
尚、本第４実施形態では、図７（Ａ）のＳ１４０、図７（Ｂ）のＳ２１５，Ｓ２２０、及び図１１のＳ３１０〜Ｓ３３８が、遅延時間監視プログラムに相当し、図１１のＳ３４０が、マイコンにリセット用手順を実行させるプログラムに相当している。そして、図１０（Ｂ）のＳ２１７，Ｓ２２２、及び図１１のＳ３１０〜Ｓ３３８が、実行間隔監視手順をマイコンに実行させるプログラムに相当しており、図１１のＳ３４０は、実行間隔監視手順により異常と判断された場合にマイコンをリセットするための処理を行う手順を、マイコンに実行させるプログラムにも相当している。
【０１３３】
一方、上記第４実施形態において、時間同期タスクのうちの一部を実行間隔監視対象タスクとし、他の時間同期タスクと時間非同期タスクとを遅延時間監視対象タスクとしても良いが、遅延時間監視対象タスクとしては時間非同期タスクだけにし、時間同期タスクの全て又は一部を実行間隔監視対象タスクとすれば、高い異常検出能力と処理負荷の低減化とを両立し易くなる。つまり、タスクの実行間隔を計測する処理と、起床遅延時間を計測する処理とを比較すると、前者の場合、例えば、図１０（Ａ）に示したように、起床要求プログラムではタスクの起床要求だけを行えば良く（換言すれば、フラグＴＡＦのオンやカウンタＴＡＣのインクリメントといった追加の処理を行わなくても良く）、少なくともその分は後者の場合よりも処理が簡単になるからである。
［第５実施形態］
次に、第５実施形態では、第１〜第４実施形態の何れかに対して、下記（ａ），（ｂ）の点が追加されている。
【０１３４】
（ａ）まず、タスクとして、アイドルタスクよりも優先度が低い監視用タスクが追加されている。そして、その監視用タスクの中には、図１２（Ｂ）に示すように、割り込みを禁止状態にして、プログラムの実行状態を無限ループ状態にするステップ（Ｓ６１０）が含まれている。つまり、監視用タスクのＳ６１０では、前述したＳ３４０と同様に、プログラムの実行先が当該Ｓ６１０のままになるようにする。
【０１３５】
（ｂ）次に、図１２（Ａ）に示すように、ＲＴＯＳを構成するプログラムのうち、マイコン３が起動した時に最初に実行される起動処理のプログラムでは、まずＳ５１０にて、ＲＡＭ２５の初期化などを行い、その後、Ｓ５２０にて、イニシャルタスクの起床を要求し、Ｓ５３０にて、アイドルタスクの起床を要求する。更に、Ｓ５４０にて、上記監視用タスクの起床を要求し、その後、他の処理を行う。
【０１３６】
尚、エンジンの制御機能に必要な他のタスク（即ち、時間同期タスク、角度同期タスク、及びイベントタスクの各々であり、以下、それらを制御用タスクという）については、図１２（Ａ）のＳ５１０〜Ｓ５４０の処理が終了した後、起床要求プログラムにより適宜起床要求される。
【０１３７】
そして、本第５実施形態のＥＣＵ１におけるマイコン３では、図１３（Ａ）に示すように、イニシャルタスクは、上記Ｓ５２０で起床要求が行われると、ＲＴＯＳのうちのタスクスケジュール用プログラムによって即座に起床される（実行が開始される）。
【０１３８】
また、アイドルタスクは、上記Ｓ５３０で起床要求が行われると、イニシャルタスクの実行が終了した時点で、上記タスクスケジュール用プログラムにより起床される。但し、アイドルタスクは、制御用タスクよりも優先度が低いため、制御用タスクに割り込まれながら実行されることとなる。
【０１３９】
一方、監視用タスクも、上記Ｓ５４０で起床要求が行われると、基本的には、上記タスクスケジュール用プログラムによりタスクの優先度に基づき起床されるが、その監視用タスクは、アイドルタスクよりも更に優先度が低いため、マイコン３にてプログラムが正常に実行されている限り実際に起床されることはない。
【０１４０】
ところが、図１３（Ｂ）に示すように、例えばＲＴＯＳに異常が生じて、アイドルタスクが起床されなければ、イニシャルタスクの実行が終了した時点で監視用タスクが起床されることとなる。すると、その監視用タスクのＳ６１０により、プログラムの実行状態が無限ループ状態となり、その結果、マイコン３からＷＤＣ信号が出力されなくなる。よって、マイコン３は、ＷＤＴ１７によってリセットされることとなる。
【０１４１】
このような本第５実施形態によれば、アイドルタスクが起床されない異常が発生したことを検知してマイコン３をリセットすることができる。
尚、本第５実施形態では、図１２（Ａ）のＳ５４０と図１２（Ｂ）のＳ６１０とが、請求項１に記載の「監視用タスクの起床を要求し、その監視用タスクが実行されたならば異常と判断してマイコンをリセットするための処理を行う手順」を、マイコンに実行させるためのプログラムに相当している。
【０１４２】
以上、本発明の一実施形態について説明したが、本発明はこうした実施形態に何等限定されるものではなく、本発明の要旨を逸脱しない範囲において、種々なる態様で実施し得ることは勿論である。
【０１４３】
例えば、ＷＤＴは、マイコン３内に設けられていても良い。その場合、ＷＤＴをリセットするための処理としては、そのＷＤＴのタイマ値を初期値に設定する処理となる。
また、マイコンをリセットするための処理としては、例えば、プログラムの実行先アドレスをイニシャルスタート時の先頭アドレスに変更する処理であっても良い。
【図面の簡単な説明】
【０１４４】
【図１】実施形態のＥＣＵの構成を表す構成図である。
【図２】電源ＩＣのＷＤＴ（ウォッチドッグタイマ）によるマイコンの監視手順を表すタイムチャートである。
【図３】実行対象プログラムの構成を表す構成図である。
【図４】タスクの優先度を説明するタイムチャートである。
【図５】第１実施形態の異常監視用プログラムの内容を表すフローチャートである。
【図６】第１実施形態の作用を表すタイムチャートである。
【図７】第２実施形態の異常監視用プログラムの内容を表すフローチャートである。
【図８】第２実施形態の作用を表すタイムチャートである。
【図９】第３実施形態の異常監視用プログラムの内容を表すフローチャートである。
【図１０】第４実施形態の異常監視用プログラムの内容を表す第１のフローチャートである。
【図１１】第４実施形態の異常監視用プログラムの内容を表す第２のフローチャートである。
【図１２】第５実施形態の異常監視用プログラムの内容を表すフローチャートである。
【図１３】第５実施形態の作用を表すタイムチャートである。
【符号の説明】
【０１４５】
１…ＥＣＵ、３…マイコン、５…車載バッテリ、７…電源ＩＣ、９…センサ、１１…入力回路、１３…アクチュエータ、１５…出力回路、１７…ウォッチドッグタイマ（ＷＤＴ）、２１…ＣＰＵ、２３…ＲＯＭ、２５…ＲＡＭ、２７…入出力ポート、２９…タイマ
【図１】
0004609381.tif 000002
【図２】
0004609381.tif 000003
【図３】
0004609381.tif 000004
【図５】
0004609381.tif 000005
【図７】
0004609381.tif 000006
【図９】
0004609381.tif 000007
【図１０】
0004609381.tif 000008
【図１１】
0004609381.tif 000009
【図１２】
0004609381.tif 000010
【図４】
0004609381.tif 000011
【図６】
0004609381.tif 000012
【図８】
0004609381.tif 000013
【図１３】
0004609381.tif 000014