(57)【要約】【課題】２つのＣＰＵが、アプリケーションプログラムを正常実行しているかを相互に監視する相互監視システムにおいて、一方のＣＰＵに異常が生じた場合に、他方のＣＰＵにてアプリケーションプログラムの実行を代行しながら、相互監視機能も維持すること。【解決手段】ＣＰＵ１０、２０は、ＲＯＭ１２、２２の異常を検出する異常検出機能と、ＲＯＭ１２、２２の異常を検出した場合に、相手側のＣＰＵ１０、２０へＲＯＭ異常を通知する通知機能と、を備えている。例えば、一方のＣＰＵ２０は、他方のＣＰＵ１０からＲＯＭ異常通知を受信すると、アプリケーションプログラム２に加えて、他方のＣＰＵ１０にて実行されるべきアプリケーションプログラム１の代行用アプリケーションプログラム１ａを実行する。さらに、他方のＣＰＵ１０は、その他方のＣＰＵ１０のＲＡＭ１３に記憶された異常時監視プログラム１ａ及び異常時監視プログラム２ａを実行する。【選択図】図９
2018063599.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性の第１のメモリ（１２）を有し、当該第１のメモリに記憶されている第１のアプリケーションプログラムを実行する第１のＣＰＵ（１０）と、
不揮発性の第２のメモリ（２２）を有し、当該第２のメモリに記憶されている第２のアプリケーションプログラムを実行する第２のＣＰＵ（２０）と、を備え、
前記第１のメモリには、前記第２のＣＰＵが前記第２のアプリケーションプログラムを正常に実行しているかどうかを監視する第１の監視プログラムも記憶され、前記第１のＣＰＵは、前記第１の監視プログラムも実行し、
前記第２のメモリには、前記第１のＣＰＵが前記第１のアプリケーションプログラムを正常に実行しているかどうかを監視する第２の監視プログラムも記憶され、前記第２のＣＰＵは、前記第２の監視プログラムも実行する相互監視システムであって、
前記第１のＣＰＵは、前記第１のメモリの異常を検出する異常検出機能（Ｓ２００、Ｓ２１０）と、前記異常検出機能によって前記第１のメモリの異常を検出した場合に、前記第２のＣＰＵへメモリ異常の発生を通知する通知機能（Ｓ３３０）と、を備えており、
前記第２のメモリには、予め前記第１のアプリケーションプログラムの代行用プログラムが記憶されており、
前記第２のＣＰＵは、前記第１のＣＰＵからメモリ異常発生の通知を受信すると、前記第２のアプリケーションプログラムに加えて前記第１のアプリケーションプログラムの代行用プログラムも実行し、その一方で、前記第２の監視プログラムの実行を停止し、
前記第１のＣＰＵは、前記第１のメモリとは異なる第３のメモリ（１３、１４）も有し、前記メモリ異常発生の通知後に、前記第３のメモリに記憶された、前記第２のアプリケーションプログラムの正常実行を監視するための第３の監視プログラムと、前記第１のアプリケーションプログラムの代行用プログラムの正常実行を監視するための第４の監視プログラムとを実行する相互監視システム。
【請求項２】
前記第３のメモリ（１４）は不揮発性メモリであって、前記第３の監視プログラムと前記第４の監視プログラムとが前記第３のメモリに予め格納されている請求項１に記載の相互監視システム。
【請求項３】
前記第３のメモリ（１３）は揮発性メモリであって、前記第３の監視プログラムと前記第４の監視プログラムとは、前記第１のＣＰＵと前記第２のＣＰＵとの少なくとも一方に設けられる不揮発性メモリ（１４，２４）に格納され、当該不揮発性メモリから前記第３のメモリに転送されることにより、前記第３の監視プログラムと前記第４の監視プログラムとが前記第３のメモリに記憶される請求項１に記載の相互監視システム。
【請求項４】
前記第１のアプリケーションプログラムの代行用プログラムは、前記第１のアプリケーションプログラムに比較して機能が制限されたものである請求項１乃至３のいずれかに記載の相互監視システム。
【請求項５】
前記第１のアプリケーションプログラムの代行用プログラムの正常実行を監視するための前記第４の監視プログラムは、代行用プログラムが機能制限されたことに応じて、前記第１のアプリケーションプログラムの正常実行を監視するための前記第２の監視プログラムに比較して、プログラム容量が削減されている請求項４に記載の相互監視システム。
【請求項６】
前記第２のＣＰＵも、前記第２のメモリの異常を検出する異常検出機能と、前記異常検出機能によって前記第２のメモリの異常を検出した場合に、前記第１のＣＰＵへメモリ異常の発生を通知する通知機能と、を備えており、
前記第１のメモリには、予め前記第２のアプリケーションプログラムの代行用プログラムが記憶されており、
前記第１のＣＰＵは、前記第２のＣＰＵからメモリ異常発生の通知を受信すると、前記第１のアプリケーションプログラムに加えて前記第２のアプリケーションプログラムの代行用プログラムも実行し、その一方で、前記第１の監視プログラムの実行を停止し、
前記第２のＣＰＵは、前記第２のメモリとは異なる第４のメモリ（２３、２４）も有し、前記メモリ異常発生の通知後に、前記第４のメモリに記憶された、前記第１のアプリケーションプログラムの正常実行を監視するための第５の監視プログラムと、前記第２のアプリケーションプログラムの代行用プログラムの正常実行を監視するための第６の監視プログラムとを実行する請求項１に記載の相互監視システム。
【請求項７】
前記第４のメモリ（２４）は不揮発性メモリであって、前記第５の監視プログラムと前記第６の監視プログラムとが前記第４のメモリに予め格納されている請求項６に記載の相互監視システム。
【請求項８】
前記第４のメモリ（２３）は揮発性メモリであって、前記第５の監視プログラムと前記第６の監視プログラムとは、前記第１のＣＰＵと前記第２のＣＰＵとの少なくとも一方に設けられる不揮発性メモリ（１４、２４）に格納され、当該不揮発性メモリから前記第４のメモリに転送されることにより、前記第５の監視プログラムと前記第６の監視プログラムとが前記第４のメモリに記憶される請求項６に記載の相互監視システム。
【請求項９】
前記第２のアプリケーションプログラムの代行用プログラムは、前記第２のアプリケーションプログラムに比較して機能が制限されたものである請求項６乃至８のいずれかに記載の相互監視システム。
【請求項１０】
前記第２のアプリケーションプログラムの代行用プログラムの正常実行を監視するための前記第６の監視プログラムは、代行用プログラムが機能制限されたことに応じて、前記第２のアプリケーションプログラムの正常実行を監視するための前記第１の監視プログラムに比較して、プログラム容量が削減されている請求項９に記載の相互監視システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、少なくとも２つのＣＰＵが、それぞれ、アプリケーションプログラムを実行する際に正常に実行しているかを相互に監視する相互監視システムに関する。
【背景技術】
【０００２】
例えば、特許文献１には、あるプロセッサに異常が発生しても、そこに割り付けられた機能を保証するための自動車用電子制御システムについて開示されている。このシステムでは、プロセッサＡが独占使用するメモリＡのＲＯＭに、プログラムＡと、そのプログラムＡの機能の一部を実現するＲＡＭプログラムＡとを格納しておく。また、プロセッサＢが独占使用するメモリＢのＲＯＭに、プログラムＢと、そのプログラムＢの機能の一部を実現するＲＡＭプログラムＢとを格納しておく。そして、電子制御システムの起動時に、プロセッサＡのＲＡＭプログラムＡをプロセッサＢのＲＡＭに転送して展開するとともに、プロセッサＢのＲＡＭプログラムＢをプロセッサＡのＲＡＭに転送して展開する。プロセッサＡ、Ｂの一方に異常が発生したときには、他方のプロセッサがＲＡＭプログラムを実行することにより、異常が発生したプロセッサに割り付けられていた機能を代行する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１４−４９０１３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上述したシステムでは、一方のプロセッサの異常時に、その一方のプロセッサに割り付けられていた機能を、他方の正常なプロセッサが代行することで、制御を継続させることを可能としている。
【０００５】
上述したシステムにおいて、さらにシステムによる制御の安全性を高めることなどを目的として、それぞれに割り付けられた機能が正常に実行されているかを相互に監視することが考えられる。この場合、例えば、プロセッサＡのメモリＡに、プロセッサＢによりプログラムＢが正常に実行されているかを監視する監視プログラムＡを格納しておき、プロセッサＡは、プログラムＡに加えて監視プログラムＡを実行するように構成する。同様に、プロセッサＢのメモリＢに、プロセッサＡによりプログラムＡが正常に実行されているかを監視する監視プログラムＢを格納しておき、プロセッサＢは、プログラムＢに加えて監視プログラムＢを実行するように構成する。
【０００６】
しかしながら、相互監視を行うようにシステムを構成した場合に、いずれか一方のプロセッサに異常が発生したとき、特許文献１に記載されたように、他方のプロセッサがＲＡＭプログラムを実行することで、異常が発生したプロセッサに割り付けられていた機能を代行することはできるが、相互監視を行う構成が崩れるため、監視機能が働かなくなってしまうという問題が生じる。この問題に対処するため、仮に、正常なプロセッサにおいて、通常のプログラムとＲＡＭプログラムとに加えて、監視プログラムＡ，Ｂを実行させたとしても、監視する側と監視される側が同じプロセッサにあるため、監視のレベルが低下してしまう。
【０００７】
本発明は、上述した点に鑑みてなされたものであり、少なくとも２つのＣＰＵが、アプリケーションプログラムを実行する際に正常に実行しているかを相互に監視する相互監視システムにおいて、一方のＣＰＵに異常が生じた場合に、他方のＣＰＵにてアプリケーションプログラムの実行を代行しながら、相互監視機能も維持することが可能な相互監視システムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するために、本発明に係る相互監視システムは、
不揮発性の第１のメモリ（１２）を有し、当該第１のメモリに記憶されている第１のアプリケーションプログラムを実行する第１のＣＰＵ（１０）と、
不揮発性の第２のメモリ（２２）を有し、当該第２のメモリに記憶されている第２のアプリケーションプログラムを実行する第２のＣＰＵ（２０）と、を備え、
第１のメモリには、第２のＣＰＵが第２のアプリケーションプログラムを正常に実行しているかどうかを監視する第１の監視プログラムも記憶され、第１のＣＰＵは、第１の監視プログラムも実行し、
第２のメモリには、第１のＣＰＵが第１のアプリケーションプログラムを正常に実行しているかどうかを監視する第２の監視プログラムも記憶され、第２のＣＰＵは、第２の監視プログラムも実行するものであって、
第１のＣＰＵは、第１のメモリの異常を検出する異常検出機能（Ｓ２００、Ｓ２１０）と、異常検出機能によって第１のメモリの異常を検出した場合に、第２のＣＰＵへメモリ異常の発生を通知する通知機能（Ｓ３３０）と、を備えており、
第２のメモリには、予め第１のアプリケーションプログラムの代行用プログラムが記憶されており、
第２のＣＰＵは、第１のＣＰＵからメモリ異常発生の通知を受信すると、第２のアプリケーションプログラムに加えて第１のアプリケーションプログラムの代行用プログラムも実行し、その一方で、第２の監視プログラムの実行を停止し、
第１のＣＰＵは、第１のメモリとは異なる第３のメモリ（１３、１４）も有し、メモリ異常発生の通知後に、第３のメモリに記憶された、第２のアプリケーションプログラムの正常実行を監視するための第３の監視プログラムと、第１のアプリケーションプログラムの代行用プログラムの正常実行を監視するための第４の監視プログラムとを実行するように構成される。
【０００９】
第１のアプリケーションプログラム及び第１の監視プログラムを記憶する第１のメモリに何らかの異常が生じて、第１のアプリケーションプログラム及び／又は第１の監視プログラムを正しく読み出すことができなくなると、第１のＣＰＵは、第１のアプリケーションプログラムによる制御機能及び／又は第１の監視プログラムによる監視機能を正しく実行することができなくなる虞が生じる。しかしながら、第１のＣＰＵによる演算処理機能に支障が生じていなければ、その後も、なんらかの形で、第１のＣＰＵを活用することは可能である。
【００１０】
このような着眼点の下、本発明に係る相互監視システムでは、第１のメモリの異常検出機能、及び異常を検出した場合に第２のＣＰＵに通知する通知機能を第１のＣＰＵに持たせた。そして、第２のＣＰＵは、第１のＣＰＵからメモリ異常発生の通知を受信すると、第２のアプリケーションプログラムに加えて第１のアプリケーションプログラムの代行用プログラムも実行するように構成した。これにより、第１のＣＰＵの第１のメモリに異常が発生した場合であっても、第１のアプリケーションプログラムによる機能が、第２のＣＰＵにて代行して実現される。
【００１１】
その一方で、第１のＣＰＵは、メモリ異常発生の通知後に、第１のメモリとは異なる第３のメモリに記憶された、第２のアプリケーションプログラムの正常実行を監視するための第３の監視プログラムと、第１のアプリケーションプログラムの代行用プログラムの正常実行を監視するための第４の監視プログラムとを実行する。これにより、第２のＣＰＵにおける第２のアプリケーションプログラム及び代行用プログラムの正常実行を第１のＣＰＵにて監視することが可能となり、相互監視機能も維持することができる。
【００１２】
上記括弧内の参照番号は、本発明の理解を容易にすべく、後述する実施形態における具体的な構成との対応関係の一例を示すものにすぎず、なんら本発明の範囲を制限することを意図したものではない。
【００１３】
また、上述した特徴以外の、特許請求の範囲の各請求項に記載した技術的特徴に関しては、後述する実施形態の説明及び添付図面から明らかになる。
【図面の簡単な説明】
【００１４】
【図１】実施形態に係る相互監視システムの主要な構成を示す構成図である。
【図２】起動プログラムによって実行される起動処理を示すフローチャートである。
【図３】ＲＯＭチェックの処理の詳細を示すフローチャートである。
【図４】フェールセーフ処理の詳細を示すフローチャートである。
【図５】起動プログラムによりＲＯＭ起動が実行された後に、所定時間経過ごとに実行されるＲＯＭチェック処理を示すフローチャートである。
【図６】ＣＰＵ１０から、ＲＯＭ異常通知もしくはフェールセーフ処理の実行指示通知のいずれかの通知を受信したときに、ＣＰＵ２０において実行される処理を示すフローチャートである。
【図７】ＣＰＵ１０においてＲＯＭ異常が発生したため、ＣＰＵ１０からＣＰＵ２０へＲＯＭ異常通知が出力され、それに応じて、ＣＰＵ２０からＣＰＵ１０へリセット信号が出力されることを示す動作説明図である。
【図８】図７に示す動作に引き続いて、ＣＰＵ２０からＣＰＵ１０へとＲＡＭ起動信号が出力されるとともにリセット信号の出力が解除され、ＣＰＵ１０のＲＡＭ１３には、ＣＰＵ２０のフラッシュメモリ２４から転送された異常時監視プログラム１ａ及び異常時監視プログラム２ａが書き込まれて、それらのプログラムが起動されることを示す動作説明図である。
【図９】図８に示す動作に引き続いて、起動された異常時監視プログラム１ａ及び異常時監視プログラム２ａにより、ＣＰＵ２０によりアプリケーションプログラム２及び代行用アプリケーションプログラム１ａが正常実施されているかを監視することを示す動作説明図である。
【発明を実施するための形態】
【００１５】
以下、本発明に係る相互監視システムの実施形態について、図面に基づいて詳細に説明する。図１は、本実施形態に係る相互監視システムの主要な構成を示す構成図である。
【００１６】
図１に示すように、相互監視システムは、第１のＣＰＵとしてのＣＰＵ１０と、第２のＣＰＵとしてのＣＰＵ２０とを備える。ＣＰＵ１０とＣＰＵ２０とは、いわゆるマルチコアプロセッサとして、１つのパッケージに集積して形成されたものであっても良いし、それぞれ独立したプロセッサとして形成され、外部通信線を介して通信可能に接続されたものであっても良い。
【００１７】
なお、図１には、２個のＣＰＵしか図示していないが、相互監視システムは、３個以上のＣＰＵを備えていても良い。例えば、ＣＰＵの個数が３である場合、第１のＣＰＵが第２のＣＰＵを監視し、第２のＣＰＵが第３のＣＰＵを監視し、第３のＣＰＵが第１のＣＰＵを監視するように構成することができる。
【００１８】
本実施形態に係る相互監視システムを構成するＣＰＵ１０及びＣＰＵ２０は、例えば、車両に搭載されたエンジン、走行用モータ、ブレーキ、トランスミッション等の車載機器を制御する用途に用いられる。
【００１９】
ＣＰＵ１０及びＣＰＵ２０は、それぞれ、起動プログラム格納メモリ１１、２１と、ＲＯＭ１２、２２と、ＲＡＭ１３、２３と、フラッシュメモリ１４、２４とを有する。なお、図１には、各ＣＰＵ１０、２０の内部に、起動プログラム格納メモリ１１、２１、ＲＯＭ１２、２２、ＲＡＭ１３、２３、及び、フラッシュメモリ１４、２４の各メモリを設けた例を示しているが、各メモリは、各ＣＰＵ１０、２０の外部に設けても構わない。
【００２０】
起動プログラム格納メモリ１１、２１は不揮発性メモリであって、図１に示すように、起動プログラムであるｂｏｏｔ１、ｂｏｏｔ２を格納している。起動プログラムであるｂｏｏｔ１、ｂｏｏｔ２は、電源投入時やリセット後に動作し、通常は、ＲＯＭ１２、２２に格納されたプログラムを起動するように構成されている。しかし、相手側のＣＰＵ１０、２０からＲＡＭ起動信号が与えられているときには、ｂｏｏｔ１、ｂｏｏｔ２は、ＲＡＭ１３、２３に格納されたプログラムを起動するように構成されている。
【００２１】
なお、図１には、起動プログラム格納メモリ１１、２１をＲＯＭ１２、２２とは独立して設ける例を示しているが、ＲＯＭ１２、２２の一部の記憶領域を、起動プログラム格納メモリ１１、２１として用いても良い。
【００２２】
ＲＯＭ１２、２２は、制御対象となる車載機器を制御するためのアプリケーションプログラム１、アプリケーションプログラム２（図では‘アプリ１’、‘アプリ２’と記載）をそれぞれ格納している。これらのアプリケーションプログラム１及びアプリケーションプログラム２は、それぞれ、車両の運転者による運転操作や、車両の状態、外部環境などに応じて、制御対象となる車載機器を適切に制御するようにプログラムされている。なお、アプリケーションプログラム１及びアプリケーションプログラム２は、演算処理が正しく行われているかを確認するため実質的に同じ内容のプログラムであっても良いし、異なる車載機器を制御するための異なる内容のプログラムであっても良い。
【００２３】
ＣＰＵ１０のＲＯＭ１２には、さらに、ＣＰＵ２０がアプリケーションプログラム２を正常に実行しているかどうかを監視する監視プログラム２（図では‘監視２’と記載、第１の監視プログラムに相当）と、アプリケーションプログラム２の代行用プログラムである代行用アプリケーションプログラム２ａとが予め格納されている。同様に、ＣＰＵ２０のＲＯＭ２２には、さらに、ＣＰＵ１０がアプリケーションプログラム１を正常に実行しているかどうかを監視する監視プログラム１（図では‘監視１’と記載、第２の監視プログラムに相当）と、アプリケーションプログラム１の代行用プログラムである代行用アプリケーションプログラム１ａとが予め格納されている。
【００２４】
上述したように、ＣＰＵ１０は、ＲＯＭ１２に異常が生じていなければ、ｂｏｏｔ１により、ＲＯＭ１２に格納されているプログラムであるアプリケーションプログラム１及び監視プログラム２を起動して実行する。同様に、ＣＰＵ２０は、ＲＯＭ２２に異常が生じていなければ、ｂｏｏｔ２により、ＲＯＭ２２に格納されているプログラムであるアプリケーションプログラム２及び監視プログラム１を起動して実行する。従って、それぞれのＣＰＵ１０、２０にてアプリケーションプログラムが実行されるときには、相手側のＣＰＵ１０、２０にてそのアプリケーションプログラムの正常実行を監視する監視プログラムが実行されることになる。このようにして、ＣＰＵ１０とＣＰＵ２０との間で、アプリケーションプログラムの正常実行が相互に監視されるようになっている。
【００２５】
監視プログラム１及び監視プログラム２は、例えば、アプリケーションプログラム１及びアプリケーションプログラム２の各プロセスが所定の順序で実行されているか否か、及び／又は、各プロセスの実行時間が所定時間内に収まっているか否かなどに基づき、アプリケーションプログラム１及びアプリケーションプログラム２が正常に実行されているか否かを監視するものである。なお、アプリケーションプログラム１及びアプリケーションプログラム２が正常に実行されているかどうかを監視する手法は、上述した手法に限らず、公知のいかなる手法を適用しても良い。
【００２６】
代行用アプリケーションプログラム２ａ及び代行用アプリケーションプログラム１ａは、それぞれ、ＲＯＭ１２及びＲＯＭ２２に格納されているが、通常は、ｂｏｏｔ１及びｂｏｏｔ２によって起動されず、停止したままである。これらの代行用アプリケーションプログラム２ａ及び代行用アプリケーションプログラム１ａは、いずれかのＣＰＵ１０、２０のＲＯＭ１２、２２に異常が発生した場合に、その異常が発生したＲＯＭ１２、２２に格納されていたアプリケーションプログラム２又はアプリケーションプログラム１の代行用プログラムとして実行される。
【００２７】
代行用アプリケーションプログラム２ａ及び代行用アプリケーションプログラム１ａは、それぞれ、アプリケーションプログラム２及びアプリケーションプログラム１に比較して、機能が制限されている。これは、上述したように、代行用アプリケーションプログラム２ａ及び代行用アプリケーションプログラム１ａとも、いずれかのＣＰＵ１０、２０のＲＯＭ１２、２２に異常が発生したときに実行されるものであり、このような異常事態においては、最低限度の制御機能が得られれば十分であるためである。例えば、アプリケーションプログラム１が車両のエンジンを制御するためのプログラムである場合、代行用アプリケーションプログラム１ａは、車両の速度とトルクが所定の値以上に上昇しないようにエンジン出力の制御範囲を制限する。また、アプリケーションプログラム１が車両のトランスミッションを制御するためのプログラムである場合には、代行用アプリケーションプログラム１ａは、車両の速度とトルクが所定の値以上に上昇しないようにトランスミッションの変速比の制御範囲を制限する。このような機能制限の下で、代行用アプリケーションプログラム１ａによって制御対象となる車載機器を制御することにより、車両を安全に退避走行させることが可能となる。
【００２８】
なお、代行用アプリケーションプログラム１ａ又は代行用アプリケーションプログラム２ａが実行されるときには、車両を確実に退避走行させるために、同時に実行されるアプリケーションプログラム２又はアプリケーションプログラム１の機能も制限することが好ましい。このような機能制限を行うため、例えば、アプリケーションプログラム１及びアプリケーションプログラム２が通常モードと異常モードとを備え、通常モードではなんら機能を制限することなく制御対象の制御を実行するが、いずれかのＣＰＵ１０、２０にてＲＯＭ異常が発生したときには異常モードとなり、当該異常モードでは所定の機能制限の下で制御を実行するように構成することができる。
【００２９】
ＲＡＭ１３及びＲＡＭ２３は、それぞれ、ＣＰＵ１０がアプリケーションプログラム１及び監視プログラム２を実行する際及びＣＰＵ２０がアプリケーションプログラム２や監視プログラム１を実行する際などに、演算処理結果や、入出力データを一時的に記憶するためのものである。さらに、ＲＡＭ１３及びＲＡＭ２３は、対応するＣＰＵ１０、２０のＲＯＭ１２、２２に異常が発生した場合に、ＣＰＵ１０とＣＰＵ２０のいずれかのフラッシュメモリ１４、２４から転送される異常時監視プログラム１ａ、異常時監視プログラム２ａが書き込まれて記憶する機能も有する。そして、異常時監視プログラム１ａ、異常時監視プログラム２ａが書き込まれたＲＡＭ１３、２３を保有するＣＰＵ１０、２０は、相手側のＣＰＵ１０、２０からリセット信号及びＲＡＭ起動信号を与えられ、ＲＡＭ１３、２３に記憶した異常時監視プログラム１ａ、異常時監視プログラム２ａを起動して実行する。
【００３０】
異常時監視プログラム１ａ及び異常時監視プログラム２ａは、記憶内容を電気的に一括消去したり、再書き込みしたりすることが可能な不揮発性のフラッシュメモリ１４、２４の両方に予め格納されている。ただし、異常時監視プログラム１ａ及び異常時監視プログラム２ａをフラッシュメモリ１４、２４のいずれか一方のみに格納しておき、どちらのＣＰＵ１０、２０のＲＡＭ１３、２３に転送する場合にも、同じフラッシュメモリを使用するようにしても良い。
【００３１】
異常時監視プログラム１ａ及び異常時監視プログラム２ａは、代行用アプリケーションプログラム１ａ及び代行用アプリケーションプログラム２ａが正常に実行されているか否か、さらには機能制限されたアプリケーションプログラム１及びアプリケーションプログラム２が正常に実行されているか否かを監視するようにプログラムされている。このため、異常時監視プログラム１ａ及び異常時監視プログラム２ａは、それぞれ、監視プログラム１及び監視プログラム２に比較して、監視機能を削減することが可能であり、プログラム容量も削減されている。
【００３２】
なお、図１には、フラッシュメモリ１４、２４に、ともに異常時監視プログラム１ａ及び異常時監視プログラム２ａを格納した例を示している。しかし、ＲＯＭ異常が発生した場合にも、アプリケーションプログラム１、アプリケーションプログラム２が機能制限を行わない場合には、フラッシュメモリ１４、２４の一方に、監視プログラム１、異常時監視プログラム２ａを格納しておき、他方に、異常時監視プログラム１ａ、監視プログラム２を格納しておくようにしても良い。そして、ＣＰＵ１０が、機能制限を行わないアプリケーションプログラム１と代行用アプリケーションプログラム２ａとを実行するときには、監視プログラム１、異常時監視プログラム２ａを格納しているフラッシュメモリから、ＣＰＵ２０のＲＡＭ２３にそれらのプログラムを転送して書き込むようにすれば良い。また、ＣＰＵ２０が、機能制限を行わないアプリケーションプログラム２と代行用アプリケーションプログラム１ａとを実行するときには、監視プログラム２、異常時監視プログラム１ａを格納しているフラッシュメモリから、ＣＰＵ１０のＲＡＭ１３にそれらのプログラムを転送して書き込むようにすれば良い。
【００３３】
上述したように、本実施形態に係る相互監視システムでは、ＣＰＵ１０のＲＯＭ１２にアプリケーションプログラム２の代行用アプリケーションプログラム２ａが予め格納され、ＣＰＵ２０のＲＯＭ２２にアプリケーションプログラム１の代行用アプリケーションプログラム１ａが予め格納されている。また、詳しくは後述するが、ＣＰＵ１０、２０は、それぞれ、ＲＯＭ１２、２２の異常を検出する異常検出機能と、その異常検出機能によってＲＯＭ１２、２２の異常を検出した場合に、相手側のＣＰＵ１０、２０へＲＯＭ異常の発生を通知する通知機能と、を備えている。
【００３４】
例えば、ＣＰＵ１０がＲＯＭ１２の異常を検出すると、ＣＰＵ１０はＣＰＵ２０へＲＯＭ異常の発生を通知する。ＣＰＵ２０は、ＣＰＵ１０からＲＯＭ異常の発生通知を受信すると、アプリケーションプログラム２に加えて代行用アプリケーションプログラム１ａも実行する。これにより、ＣＰＵ１０のＲＯＭ１２に異常が発生した場合であっても、アプリケーションプログラム１による機能が、ＣＰＵ２０にて代行して実現される。なお、この際、ＣＰＵ１０においてアプリケーションプログラム１は実行されないので、ＣＰＵ２０は監視１の実行を停止する。
【００３５】
また、ＣＰＵ２０において、ＲＯＭ２２の異常が発生した場合には、上述したケースとは逆に、ＣＰＵ１０が、アプリケーションプログラム１に加えて代行用アプリケーションプログラム２ａも実行する。これにより、ＣＰＵ２０のＲＯＭ２２に異常が発生した場合であっても、アプリケーションプログラム２による機能が、ＣＰＵ１にて代行して実現される。
【００３６】
さらに、本実施形態に係る相互監視システムでは、上述したように、一方のＣＰＵ１０、２０が、自身のアプリケーションプログラムに加えて、本来、他方のＣＰＵ１０、２０にて実行されるべきアプリケーションプログラムの代行用アプリケーションプログラムを実行する場合には、他方のＣＰＵ１０、２０が、その他方のＣＰＵ１０、２０のＲＡＭ１３、２３に記憶された異常時監視プログラム１ａ及び異常時監視プログラム２ａを実行する。これにより、一方のＣＰＵ１０、２０におけるアプリケーションプログラム及び代行用アプリケーションプログラムの正常実行を他方のＣＰＵ１０、２０にて監視することが可能となり、相互監視機能も維持することができる。
【００３７】
次に、相互監視システムを構成する各ＣＰＵ１０、２０において実行される具体的な処理の一例について図２〜図６のフローチャートを参照して説明する。なお、図２〜図５のフローチャートに示す処理は、ＣＰＵ１０、２０のどちらにおいても実行されるものであるが、説明の便宜上、ＣＰＵ１０において実行される場合について説明する。また、図６のフローチャートに示す処理も、ＣＰＵ１０、２０のどちらにおいても実行されるものであるが、説明の便宜上、ＣＰＵ２０において実行される場合について説明する。
【００３８】
図２のフローチャートは、ＣＰＵ１０における起動プログラムｂｏｏｔ１によって実行される起動処理を示している。起動処理が開始されると、まずステップＳ１００において、ＣＰＵ２０からＲＡＭ起動信号を受信しているか否かを判定する。ＲＡＭ起動信号に関しては、後に図６のフローチャートに基づき詳しく説明する。このステップＳ１００において、ＲＡＭ起動信号を受信していないと判定すると、ステップＳ１１０の処理に進む。
【００３９】
ステップＳ１１０では、起動時のＲＯＭチェックを行う。このＲＯＭチェックの処理の詳細を、図３のフローチャートに基づいて説明する。
【００４０】
ＲＯＭチェック処理が開始されると、まず、ステップＳ２００において、ＲＯＭ１２から読み出したプログラムの誤り検出演算処理を実行する。この処理には、例えば、誤り訂正符号（Error-Correcting Code）、巡回冗長検査（Cyclic Redundancy Check）、パリティ検査（Parity Check）、チェックサム（Check Sum）などの誤り検出訂正のための任意の手法を適用することができる。
【００４１】
続くステップＳ２１０では、ステップＳ２００にて誤り検出演算処理を行った結果が、異常なしを示しているか、異常ありを示しているかを判定する。異常なしを示している場合には、そのままＲＯＭチェック処理を終了する。一方、異常ありを示している場合には、ＲＯＭ１２に異常が発生している可能性があるため、ステップＳ２２０に進み、フェールセーフ処理を実行する。
【００４２】
図４のフローチャートは、フェールセーフ処理の詳細を示している。このフェールセーフ処理では、最初にステップＳ３００において、アプリケーションプログラム１及び監視プログラム２に関するフェールセーフ処理を実行する。ＲＯＭ異常が発生している場合には、アプリケーションプログラム１及び監視プログラム２を正しく読み出すことができないため、それらのプログラムの実行により予期しない事態の発生を防止するためである。フェールセーフ処理としては、例えば、アプリケーションプログラム１に関しては、アプリケーションプログラム１の制御対象へ安全側で停止するよう指示を出したり、車両を走行させる側へ制御対象を駆動することを制限したりする。また、監視プログラム２に関しては、ＣＰＵ２０に対して、監視プログラム２による監視が実行できないことを伝えたり、監視プログラム２の監視対象であるアプリケーションプログラム２の制御対象へ停止指示を出したりする。
【００４３】
続くステップＳ３１０では、異常時監視プログラム１ａ、異常時監視プログラム２ａを転送して書き込む前に、ＲＡＭ１３に異常が生じていないかどうかのチェックを実施する。例えば、ＲＡＭ１３に所定のデータを書き込み、その書き込んだデータを読み出したときに、書き込んだデータと同一のデータが読み出せたかどうかにより、ＲＡＭ１３の異常をチェックする。ステップＳ３２０では、ステップＳ３１０におけるＲＡＭチェックの結果に基づき、ＲＡＭ１３に異常が生じているか否かを判定する。
【００４４】
ステップＳ３２０の判定処理において、ＲＡＭ１３に異常が生じていないと判定した場合には、ステップＳ３３０に進んで、図７に示すように、ＣＰＵ２０に対してＲＯＭ異常が発生した旨を通知し、その後、フェールセーフ処理を終了する。一方、ＲＡＭ１３に異常が生じていると判定した場合には、ステップＳ３４０に進んで、ＣＰＵ２０に対してフェールセーフ処理の実行指示を通知し、その後、フェールセーフ処理を終了する。ただし、ＲＡＭ１３に異常が生じていると判定された場合であっても、ＣＰＵ１０のフラッシュメモリ１４に異常時監視プログラム１ａ、異常時監視プログラム２ａが格納されている場合には、ＣＰＵ１０が、ＣＰＵ２０にＲＯＭ異常が発生した旨を通知するとともに、フラッシュメモリ１４から、直接、異常時監視プログラム１ａ及び異常時監視プログラム２ａを読み出して実行することとしても良い。
【００４５】
以上のようにして、ＲＯＭチェック処理が終了すると、処理は、図２のフローチャートのステップＳ１２０に進む。ステップＳ１２０では、ステップＳ１１０のＲＯＭチェックにおいてＲＯＭ異常が検出されたか否かを判定する。ＲＯＭ異常が検出されたと判定した場合には、そのまま起動プログラムｂｏｏｔ１を終了する。一方、ＲＯＭ異常が検出されなかったと判定した場合には、ステップＳ１３０に進んで、通常どおり、ＲＯＭ１２に格納されたアプリケーションプログラム１と監視プログラム２とを起動し、その後、起動プログラムｂｏｏｔ１を終了する。
【００４６】
同様の起動プログラムｂｏｏｔ２は、ＣＰＵ２０においても実行され、ＣＰＵ２０のＲＯＭ２２に異常が生じていなければ、ＲＯＭ２２に格納されたアプリケーションプログラム２と監視プログラム１とが起動される。この結果、相互監視システムは、図１に示すように、ＣＰＵ１０とＣＰＵ２０との間で、監視プログラム１及び監視プログラム２を用いて、アプリケーションプログラム１及びアプリケーションプログラム２の正常実行が相互に監視される。
【００４７】
一方、ステップＳ１００において、ＣＰＵ２０からＲＡＭ起動信号を受信していると判定した場合、ＣＰＵ１０はリプログラミングモード（リプロモード）となり、ステップＳ１４０の処理に進む。ステップＳ１４０では、図８に示すように、ＣＰＵ２０から転送される異常時監視プログラム１ａ、異常時監視プログラム２ａをＲＡＭ１３に書き込む。なお、リプロモードが実行されるときには、ＣＰＵ１０において、上述したフェールセーフ処理が実行され、かつＲＡＭ１３に異常が生じていないとの判定がなされているため、異常時監視プログラム１ａ、異常時監視プログラム２ａを正しくＲＡＭ１３に書き込んで記憶させることができる。
【００４８】
続くステップＳ１５０では、ＲＡＭ１３に記憶された異常時監視プログラム１ａと異常時監視プログラム２ａとを起動する。このＲＡＭ起動が完了すると、ステップＳ１６０において、異常時監視プログラム１ａと異常時監視プログラム２ａとの起動が完了した旨をＣＰＵ２０に通知する。
【００４９】
図５のフローチャートは、起動プログラムｂｏｏｔ１によりＲＯＭ起動が実行された後に、所定時間経過ごとに実行されるＲＯＭチェック処理を示している。このように、ＲＯＭ１２に異常が発生していないかどうかは、起動時のみではなく、起動後も定期的に実行される。なお、定期処理におけるＲＯＭチェックの内容は、起動時のＲＯＭチェック、すなわち、図２のフローチャートのステップＳ１１０〜ステップＳ１３０と実質的に同様であるため、これ以上の説明は省略する。
【００５０】
図６のフローチャートは、ＣＰＵ１０から、ＲＯＭ異常通知もしくはフェールセーフ処理の実行指示通知のいずれかの通知を受信したときに、ＣＰＵ２０において実行される処理を示している。
【００５１】
まず、ステップＳ５００では、受信した通知の種類が、ＲＯＭ異常通知か、フェールセーフ処理の実行指示通知かを判別する。ＲＯＭ異常通知であると判別した場合、ステップＳ５１０に進み、代行用アプリケーションプログラム１ａの実行を開始する。この際、同時に、アプリケーションプログラム２の機能を制限するようにしても良い。
【００５２】
続くステップＳ５２０では、図７に示すように、ＣＰＵ２０からＣＰＵ１０へとリセット信号を出力する。そして、図８に示すように、ステップＳ５３０においてＣＰＵ１０へＲＡＭ起動信号の出力を開始するとともに、ステップＳ５４０においてＣＰＵ１０に対するリセット信号の出力を解除する。さらに、ＣＰＵ２０は、ステップＳ５５０において、ＣＰＵ１０へ異常時監視プログラム１ａ、異常時監視プログラム２ａを自身のフラッシュメモリ２４から読み出して転送する。
【００５３】
これにより、ＣＰＵ１０では、リセット信号の出力が解除されて、起動プログラムｂｏｏｔ１が作動するときに、ＲＡＭ起動信号を受信しているため、リプロモードとなる。この場合、図２のフローチャートを用いて説明したように、ＣＰＵ１０は、ＣＰＵ２０から転送された異常時監視プログラム１ａ、異常時監視プログラム２ａを受信して、ＲＡＭ１３に書き込む。そして、ＲＡＭ１３に記憶された異常時監視プログラム１ａ、異常時監視プログラム２ａを起動する（図８参照）。その起動が完了すると、ＣＰＵ１０は、ＣＰＵ２０へ起動完了通知を出力する。
【００５４】
なお、ＣＰＵ１０のフラッシュメモリ１４に異常時監視プログラム１ａ、異常時監視プログラム２ａが格納されている場合には、ＣＰＵ１０は、自身のフラッシュメモリ１４から異常時監視プログラム１ａ、異常時監視プログラム２ａを読み出して、ＲＡＭ１３に書き込むようにしても良い。
【００５５】
図６のフローチャートのステップＳ５６０では、このＣＰＵ１０からの起動完了通知を受信したか否かにより、ＣＰＵ１０は監視機能を起動したか否かを判定する。未だ監視機能が起動していないと判定すると、起動するまで待機し、監視機能が起動したと判定すると、ステップＳ５７０の処理に進む。
【００５６】
ＣＰＵ１０において、異常時監視プログラム１ａ及び異常時監視プログラム２ａが起動されると、図９に示すように、ＣＰＵ２０において実行されるアプリケーションプログラム２及び代行用アプリケーションプログラム１ａが正常実行されているかどうかは、ＣＰＵ１０において監視されている。このため、ステップＳ５７０では、ＣＰＵ２０は監視プログラム１の実行を停止させ、図６のフローチャートに示す処理を終了する。
【００５７】
一方、ステップＳ５００の判定処理において、受信した通知の種類がフェールセーフ処理の実行指示通知であると判別した場合には、ステップＳ５８０の処理に進む。ステップＳ５８０では、図４のフローチャートのステップＳ３００の処理と同様に、ＣＰＵ２０は、アプリケーションプログラム２及び監視プログラム１に関するフェールセーフ処理を実行する。
【００５８】
以上、本発明の好ましい実施形態について説明したが、本発明は、上述した実施形態になんら制限されることなく、本発明の主旨を逸脱しない範囲において、種々変形して実施することが可能である。
【００５９】
例えば、上述した実施形態では、異常時監視プログラム１ａ及び異常時監視プログラム２ａをＲＡＭ１３、２３に記憶させて実行する例について説明した。このように、一旦、異常時監視プログラム１ａ及び異常時監視プログラム２ａをＲＡＭ１３、２３に記憶させて実行することにより、異常時監視プログラム１ａ及び異常時監視プログラム２ａの読み出し速度を相対的に早く行うことができる。ただし、異常時監視プログラム１ａ及び異常時監視プログラム２ａは、ＲＡＭ１３、２３に記憶させずに、直接、フラッシュメモリ１４、２４から読み出して実行するようにしても良い。この場合、ＲＯＭ１２、２２に加えてＲＡＭ１３、２３に何らかの異常が生じていても、異常時監視プログラム１ａ及び異常時監視プログラム２ａを起動することが可能となる。
【符号の説明】
【００６０】
１０、２０  ＣＰＵ
１１、２１  起動プログラム格納メモリ
１２、２２  ＲＯＭ
１３、２３  ＲＡＭ
１４、２４  フラッシュメモリ
【図１】
2018063599.tif 000003
【図２】
2018063599.tif 000004
【図３】
2018063599.tif 000005
【図４】
2018063599.tif 000006
【図５】
2018063599.tif 000007
【図６】
2018063599.tif 000008
【図７】
2018063599.tif 000009
【図８】
2018063599.tif 000010
【図９】
2018063599.tif 000011