(57)【要約】【課題】本発明は、異なる重要度を持つ処理とデータが混在する制御装置において、ある重要度を持ったデータが異常であった場合に、異常の種類を判定する技術を提供する。【解決手段】組み込み制御装置は、少なくとも２つの異なる重要度を持つ処理を実行する処理部と、前記重要度に応じて異なる記憶領域にデータを記憶する記憶部と、前記処理部が実行する処理の前記重要度に応じて、前記記憶部の重要度別の記憶領域に、異なるデータ保証情報を保存する書き込み制御部と、前記記憶部の前記重要度別の記憶領域からデータを読み出すときに、前記重要度に応じて前記データ保証情報による異なるチェック方式を実行し、前記データが正当であるかを判定する読み出し制御部と、を備える。【選択図】図３
2016066236.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも２つの異なる重要度を持つ処理を実行する処理部と、
前記重要度に応じて異なる記憶領域にデータを記憶する記憶部と、
前記処理部が実行する処理の前記重要度に応じて、前記記憶部の重要度別の記憶領域に、異なるデータ保証情報を保存する書き込み制御部と、
前記記憶部の前記重要度別の記憶領域からデータを読み出すときに、前記重要度に応じて前記データ保証情報による異なるチェック方式を実行し、前記データが正当であるかを判定する読み出し制御部と、
を備えることを特徴とする組み込み制御装置。
【請求項２】
請求項１に記載の組み込み制御装置において、
前記読み出し制御部によって異常であると判定されたデータの異常発生原因を判別する異常判別部をさらに備えることを特徴とする組み込み制御装置。
【請求項３】
請求項２に記載の組み込み制御装置において、
前記異常判別部は、
前記異常であると判定されたデータの前記データ保証情報に対するチェック方式とは異なるチェック方式を実行し、
前記異常発生原因が他の重要度の処理による侵害であるか、又は、前記記憶領域の物理的故障であるかを判定することを特徴とする組み込み制御装置。
【請求項４】
請求項３に記載の組み込み制御装置において、
前記異常判別部は、
下位の重要度の処理が上位の重要度の前記記憶領域を侵害したのか、
上位の重要度の処理が下位の重要度の前記記憶領域を侵害したのか、
前記記憶領域が物理的に故障したのか、
を侵害レベルとして判定することを特徴とすることを特徴とする組み込み制御装置。
【請求項５】
請求項３に記載の組み込み制御装置において、
前記異常判別部は、前記異常であると判定されたデータについて全てのチェック方式で異常であると判定された場合、前記記憶領域の物理的故障であると判定することを特徴とする組み込み制御装置。
【請求項６】
請求項４に記載の組み込み制御装置において、
前記処理部は、
前記侵害レベルと前記侵害レベルに対応する処理とが関連付けられた情報を参照し、
前記侵害レベルに対応する処理を実行することを特徴とする組み込み制御装置。
【請求項７】
請求項４に記載の組み込み制御装置において、
前記処理部は、前記侵害レベルに応じて、前記記憶領域のデータを修復するか、又は、フェールセーフ値に固定することを特徴とする組み込み制御装置。
【請求項８】
請求項２に記載の組み込み制御装置において、
前記処理部は、前記異常発生原因に応じて、前記記憶領域のデータを修復するか、又は、フェールセーフ値に固定することを特徴とする組み込み制御装置。
【請求項９】
請求項８に記載の組み込み制御装置において、
前記処理部は、前記データの異常発生回数を記録することを特徴とする組み込み制御装置。
【請求項１０】
請求項９に記載の組み込み制御装置において、
前記処理部は、前記異常発生回数に応じて、前記記憶領域のデータを修復するか、又は、フェールセーフ値に固定することを特徴とする組み込み制御装置。
【請求項１１】
請求項１に記載の組み込み制御装置において、
前記処理部が、前記記憶部の任意の重要度の記憶領域に、当該記憶領域の重要度と異なる重要度のデータを書き込み、
前記読み出し制御部が、前記異なる重要度のデータが書き込まれた前記記憶領域に対して、チェック方式を実行し、前記データが正当であるかを判定することを特徴とする組み込み制御装置。
【請求項１２】
請求項１に記載の組み込み制御装置において、
前記読み出し制御部は、
読み出したデータに対して、前記読み出したデータに対応する記憶領域のチェック方式を実行した結果と、前記読み出したデータに対応する記憶領域の重要度とは異なる重要度の記憶領域のデータに対して、前記読み出したデータに対応する記憶領域のチェック方式を実行した結果から、前記読み出したデータが、対応する記憶領域から正しく読み出されたかを判定することを特徴とする組み込み制御装置。
【請求項１３】
請求項１２に記載の組み込み制御装置において、
前記読み出し制御部は、読み出したデータに対して、前記読み出したデータに対応する記憶領域の重要度とは異なる重要度の記憶領域に対応するチェック方式を実行し、前記読み出したデータが、対応する記憶領域から正しく読み出されたかを判定することを特徴とする組み込み制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶装置を備えるマイクロコンピュータを用いて構成された組み込み制御装置並びに当該装置における、記憶装置へのデータ書込み方法及び記憶装置からのデータ読出し方法に関する。
【背景技術】
【０００２】
車載エンジン制御装置においては、マイクロコンピュータ（以下、マイコンという）を用いて、空燃比制御、燃料噴射制御、点火制御、各種診断など様々なデータを計算するものが広く知られている。車載エンジン制御装置では、運転者の意図しない加速や暴走を防ぐために、安全性に関わる重要なデータと、その演算部を冗長系にして、適切な値の範囲を超えた場合に、エンジン出力を制限することなどを行っている。
【０００３】
これら重要なデータは、安全の観点から通常制御で使用するデータとは別の記憶領域を用意し、不正なデータとならないようなセキュリティが確保された環境に格納されることが望ましい。しかし、制御プログラムやハードウェア、マイコンの機能の複雑さが増すという課題がある。
【０００４】
一方、重要なデータが不正な値となってしまった場合の救済方法として、同じデータを複数の領域に書き込んでバックアップを保持し、一方の領域が不正となった場合に正常なデータをコピーする技術が提案されている。
【０００５】
特許文献１では、相互に同じ内容のデータをそれぞれメモリ１Ａ及び１Ｂに書き込み、メモリ１Ａ及び１Ｂに対するデータチェックを行って双方のメモリの一方に記憶されたデータに異常を検出したとき、他方に記憶されたデータを用いて一方のデータを修正する技術が提案されている。
【０００６】
また、特許文献２では、不揮発性メモリのデータを保証するために、データ領域を３面に持たせてそれぞれの領域に対し同じチェックを行い、エラーが発生した領域のデータを他の正当なデータに上書きする方法が提案されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０００−１４８６０１号公報
【特許文献２】特許第５３６０２１６号
【発明の概要】
【発明が解決しようとする課題】
【０００８】
特許文献１及び特許文献２に記載された例は、同じデータを複数の領域に書き込んでバックアップの役割を果たすものであり、不正なデータを演算に使用させない点でデータの安全性が保たれる。しかし、重要度が高いデータが不正なデータとなった場合に、その不正なデータとなった原因が電気的要因等によるデータの異常なのか、他重要度の演算を実行したことによって書き換えられた（侵害された）のかは考慮されていない。そのため、重要度の高いデータが意図せずに重要度が低い処理によって書き換えられるといった状態が発生したとき、重要度の高いデータを安全に演算できないという懸念がある。
【０００９】
本発明の目的は、異なる重要度を持つ処理とデータが混在する制御装置において、ある重要度を持ったデータが異常であった場合に、異常の種類を判別する技術を提供することにある。
【課題を解決するための手段】
【００１０】
上記課題を解決する為に、例えば特許請求の範囲に記載の構成を採用する。本願は上記課題を解決する手段を複数含んでいるが、その一例をあげるならば、少なくとも２つの異なる重要度を持つ処理を実行する処理部と、前記重要度に応じて異なる記憶領域にデータを記憶する記憶部と、前記処理部が実行する処理の前記重要度に応じて、前記記憶部の重要度別の記憶領域に、異なるデータ保証情報を保存する書き込み制御部と、前記記憶部の前記重要度別の記憶領域からデータを読み出すときに、前記重要度に応じて前記データ保証情報による異なるチェック方式を実行し、前記データが正当であるかを判定する読み出し制御部と、を備える組み込み制御装置が提供される。
【発明の効果】
【００１１】
本発明によれば、異なる重要度を持った処理とデータが混在する制御装置において、複雑な制御ロジックを組み込まずに、ある重要度のデータの異常が発生した際、異常となった原因が電気的要因等によるデータの異常なのか、他重要度の演算を実行したことによって書き換えられた（侵害された）かを判別できる。
【００１２】
本発明に関連する更なる特徴は、本明細書の記述、添付図面から明らかになるものである。また、上記した以外の、課題、構成及び効果は、以下の実施例の説明により明らかにされる。
【図面の簡単な説明】
【００１３】
【図１Ａ】本発明を使用したエンジン制御装置の構成を示すブロック図である。
【図１Ｂ】本発明の制御プログラムの機能ブロック図である。
【図２】本発明におけるデータ重要度別にメモリ領域の分割した様子を示した図である。
【図３】本発明におけるデータ重要度別にデータをメモリ領域に書き込んだ状態を示した図である。
【図４】本発明におけるデータ重要度Ｃのメモリチェックを実施した状態を示した図である。
【図５】本発明におけるデータ重要度Ｂのメモリチェックを実施した状態を示した図である。
【図６】本発明におけるデータ重要度Ａのメモリチェックを実施した状態を示した図である。
【図７】本発明における各重要度のデータを読み出す処理をフローチャートで示した図である。
【図８】本発明における各重要度のデータを異常と判断した時のメモリ故障状態判別処理をフローチャートで示した図である。
【図９】本発明におけるメモリ故障状態判別処理で故障状態を示す侵害レベルと、侵害レベルに応じたデータ処理方法を纏めた図である。
【図１０】本発明における重要度Ａのデータがメモリチェックにて異常と判定される場合の第一の例を示した図である。
【図１１】本発明における重要度Ａのデータがメモリチェックにて異常と判定される場合の第一の例で、記憶領域の正当性を確認するために、重要度Ｂのメモリチェック方法を実施した例を示す図である。
【図１２】本発明における重要度Ａのデータがメモリチェックにて異常と判定される場合の第一の例で、記憶領域の正当性を確認するために、重要度Ｃのメモリチェック方法を実施した例を示す図である。
【図１３】本発明におけるデータ重要度別のメモリチェックを実行し、侵害レベル２と判断された時のデータ異常時の処理を示したフローチャート図である。
【図１４】本発明における重要度Ａのデータがメモリチェックにて異常と判定される場合の第一の例で、侵害レベル別のデータ異常時の処理を実行し、異常データを正常データに修正する様子を示した図である。
【図１５】本発明における重要度Ａのデータがメモリチェックにて異常と判定される場合の第二の例を示した図である。
【図１６】本発明における重要度Ａのデータがメモリチェックにて異常と判定される場合の第二の例で、記憶領域の正当性を確認するために、重要度Ｂのメモリチェック方法を実施した例を示す図である。
【図１７】本発明における重要度Ｃのデータを読み出した結果から、読み出し元の領域が適切な位置であったかを判別できる例を示した図である。
【発明を実施するための形態】
【００１４】
以下、添付図面を参照して本発明の実施例について説明する。なお、添付図面は本発明の原理に則った具体的な実施例を示しているが、これらは本発明の理解のためのものであり、決して本発明を限定的に解釈するために用いられるものではない。また、各図において共通の構成については同一の参照番号が付されている。
【００１５】
以下では、本発明をエンジン制御用の電子制御装置に適用した例を示す。なお、本発明は、エンジン制御用の電子制御装置に限定されず、他の組み込み制御装置にも適用可能である。
【００１６】
＜装置構成＞
図１Ａは、本発明の実施の形態に係る車載制御装置１００を示す構成図である。車載制御装置１００は、制御対象機器２００を制御する装置であり、マイコン１１０と、バッテリ１２０とを備える。マイコン１１０は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１１と、ＲＯＭ（Ｒｅａ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１１２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１１３と、Ｉ／Ｏ１１４とを備える。
【００１７】
ＣＰＵ１１１は、ＲＯＭ１１２に格納されている制御プログラムの指示にしたがって、制御対象機器２００に対する制御演算を実行する演算装置である。ＲＯＭ１１２は、ＣＰＵ１１１が実行する制御プログラムを格納する記憶装置である。ＲＯＭ１１２は、例えば後述の吸気制御プログラム、噴射制御プログラム、点火制御プログラムなどを格納する。ＲＡＭ１１３は、ＣＰＵ１１１が制御プログラムを実行している間に用いる変数などのデータを格納する記憶装置である。Ｉ／Ｏ１１４は、マイコン１１０と制御対象機器２００との間でデータや信号を送受信するインターフェースである。
【００１８】
制御対象機器２００は、任意の機器でよい。以下ではガソリン噴射式内燃機関であることを想定する。制御対象機器２００は、センサ２１０と、アクチュエータ２２０とを備える。センサ２１０は、吸入空気量センサ、エンジン回転数センサ、及び空燃費センサを含む。アクチュエータ２２０は、燃料噴射弁を含む。
【００１９】
車載制御装置１００は、吸入空気量センサから得た吸入空気量情報とエンジン回転数センサから得たエンジン回転数情報とによって算出される燃料噴射量に対し、目標空燃費と空燃費センサ出力の差分から算出した燃料噴射量補正係数を乗算して燃料噴射量とする。そして、車載制御装置１００は、算出された燃料噴射量に基づいて燃料噴射弁の開弁時間を制御する信号を出力する。車載制御装置１００は、動作電源が投入されている間、この処理動作を繰り返し実行する。
【００２０】
図１Ｂは、本発明の制御プログラム３００の機能ブロック図であり、ＲＯＭ１１２に格納された制御プログラムの機能ブロック図を示す。以下では、制御プログラム３００の各機能ブロックの動作を説明するとき、各機能ブロックを主語として説明を行うが、上述した通り、マイコン１１０のＣＰＵ１１１が、ＲＯＭ１１２に格納されている制御プログラム３００を読み出して実行するため、ＣＰＵ１１１を主語とした説明としてもよい。
【００２１】
図１Ｂに示すように、制御プログラム３００は、各種プログラムとして、処理部３０１と、書き込み制御部３０２と、読み出し制御部３０３と、異常判別部３０４とを備える。
【００２２】
処理部３０１は、少なくとも２つの異なる重要度を持つ処理を実行する。以下で説明する例では、処理部３０１は、３つの異なる重要度の処理を実行する。書き込み制御部３０２は、処理部３０１が実行する処理の重要度に応じて、ＲＡＭ１１３の重要度別の記憶領域に、異なるデータ保証情報を保存する。読み出し制御部３０３は、ＲＡＭ１１３の重要度別の記憶領域からデータを読み出すときに、重要度に応じて異なるメモリチェック方式を実行し、読み出すデータが正当であるかを判定する。異常判別部３０４は、異常と判定された記憶領域のデータについて異なるメモリチェック方式を実行し、データ異常の発生原因を判別する。
【００２３】
＜データ領域構成＞
図２は、本発明におけるデータ重要度別にメモリ領域の分割した様子を示した図である。図２では、データの重要度に応じて書き込む領域を分けるデータ表現方法をＲＡＭ１１３に適用し、データの重要度に応じた異なるメモリのチェック方法を実施するためのデータ書き込みの例が示されている。
【００２４】
図２は、ＲＡＭ１１３にデータが書き込まれた状態を表す。ＲＡＭ１１３の１面の記憶領域が、異なる重要度を有する複数の領域に分割されている。図２の例では、記憶領域を３つの重要度（重要度Ａ〜Ｃ）に分割し、重要度Ａ〜重要度Ｃのデータがそれぞれの領域に書き込まれている。ここで、データの重要度は重要度Ａ＞重要度Ｂ＞重要度Ｃとする。重要度が低い重要度Ｂ及び重要度Ｃの領域には、通常制御で使用するデータ（通常制御値）が格納される。重要度Ａの領域には、データが不正となった場合に安全性に影響が及ぶ可能性のあるようなデータ（重要度が高い制御値）が格納される。さらに、図２の例では、重要度Ａの領域が２つの領域に分けられている。例えば、重要度Ａにおける第１の領域Ａ１には、前記重要度が高い制御値が格納され、重要度Ａにおける第２の領域Ａ２には、バックアップ用として第１の領域Ａ１と同じ制御値（ミラーリングデータ）が格納される。
【００２５】
なお、制御プログラム３００は、処理の実行中に、どの重要度が記憶領域のどのアドレスに対応するかを示す情報を保持する。したがって、制御プログラム３００は、当該情報に基づいて、ある重要度のデータをどこの領域に書き込めばよいか判別できる。また、制御プログラム３００は、当該情報に基づいて、読み出すデータがどの重要度のものであるかを、データを読み出すアドレスの位置によって判別できる。
【００２６】
上記説明では、重要度Ａ〜重要度Ｃが、ＲＡＭ１１３の隣接する領域に設定されているが、重要度毎の領域は隣接していてもよいし、離れて設定されてもよい。重要度毎の領域が離れて設定された場合には、後述で説明する別の重要度の処理による侵害のリスクを低減できる。
【００２７】
＜データ書き込み手順＞
図３は、ＲＡＭ１１３に重要度Ａ・重要度Ｂ・重要度Ｃのデータをそれぞれ書き込む手順を説明する図である。具体的には、ＣＰＵ１１１が、ＲＯＭ１１２に格納された制御プログラム３００を読み込み、制御プログラム３００に従って各種処理を実行する。この際、ＣＰＵ１１１が、ＲＡＭ１１３に記憶されたデータを用いて計算したデータをＲＡＭ１１３に格納する際に本手順が用いられる。
【００２８】
本実施例では、各重要度の領域毎に、異なるデータチェック方式を用いる。重要度Ｃの領域では、データブロック（複数のアドレスを１つとして扱ったもの）のサムチェックを用いる。重要度Ｂの領域では、パリティチェックを用いる。また、重要度Ａの領域では、１の補数によるサムチェックと、ミラーリングデータとの一致のチェックとを行う。
【００２９】
図３の（ａ）は、ＣＰＵ１１１が演算した重要度Ｃのデータ“０２”を重要度Ｃの記憶領域であるアドレス“１０００”に書き込む様子を示した図である。処理部３０１が重要度ＣのデータをＲＡＭ１１３に書き込む際は、書き込み制御部３０２が、データ“０２”の他に、データ“０２”を書き込んだアドレスを含むデータブロック（複数のアドレスを１つとして扱ったもの）のサム値を計算して書き込む。
【００３０】
例えば、書き込み制御部３０２が、アドレス“１０００”に書き込まれたデータを読み出す際のチェック用データ（データ保証情報）として、アドレス“１０００”からアドレス“１００３”までに格納されたデータ（データブロック）のサム値を計算し、そのサム値をアドレス“１００４”に格納する。アドレス“１０００”からアドレス“１００３”に格納されたデータが“０２”“０４”“２０”“４０”の場合、これら複数のデータから計算されるサム値は“６６”となる。したがって、（ｂ）のアドレス“１００４”には、サム値“６６”が格納される。
【００３１】
図３の（ｃ）は、ＣＰＵ１１１が演算した重要度Ｂのデータ“ＦＥ”を重要度Ｂの記憶領域であるアドレス“２０００”に書き込む様子を示した図である。処理部３０１が重要度ＢのデータをＲＡＭ１１３に書き込む際は、書き込み制御部３０２が、データ“ＦＥ”の他に、データを読み出す際のチェック用データ（データ保証情報）として、データの偶数パリティ値を計算して書き込む。この偶数パリティ値は、アドレス“２０００”に格納したデータ“ＦＥ”を読み出す際のチェック用の値として格納されるものである。データが“ＦＥ”の場合、“ＦＥ”の偶数パリティ値は１＋１＋１＋１＋１＋１＋１＋０を計算して“０１”となる。（ｄ）のアドレス“２００１”には、偶数パリティ値“０１”が格納される。
【００３２】
図３の（ｅ）は、ＣＰＵ１１１が演算した重要度Ａのデータ“５５”を重要度Ａの記憶領域であるアドレス“３０００”に書き込む様子を示す図である。処理部３０１が重要度ＡのデータをＲＡＭ１１３に書き込む際は、書き込み制御部３０２が、データ“５５”の他に、データを読み出す際のチェック用データ（データ保証情報）として、データの１の補数を計算して書き込む。データが“５５”の場合、書き込み制御部３０２は、アドレス“３０００”に格納したデータ“５５”を読み出す際のチェック用の値として、“５５”の１の補数“ＡＡ”を、（ｆ）に示すアドレス“３００１”に格納する。
【００３３】
さらに、書き込み制御部３０２は、重要度Ａのデータの場合、データ及びそのデータの１の補数のバックアップ用の値として、（ｇ）に示すアドレス“４０００”と“４００１”に、アドレス“３０００”と“３００１”と同じ値をそれぞれ格納する。
【００３４】
なお、上記説明ではチェック対象のデータの次のアドレスにチェック用の値を格納しているが、チェック用の値はチェック対象のデータと隣接していてもよいし、隣接していなくてもよい。
【００３５】
以上のように、データの重要度別にＲＡＭ１１３中の領域にデータとデータチェック用の値を書き込むことで、特徴あるデータ集合体がＲＡＭ１１３上に表現される。
【００３６】
なお、各重要度の領域に対するデータチェック方式は、図３を用いて説明したデータチェック方式に限定されず、他のデータチェック方式を採用してもよい。各重要度の領域に対するデータチェック方式は、少なくとも１つのデータチェック方式が採用され、重要度毎に異なるチェック方式であればよい。また、図３の例において、重要度が高い重要度Ａの領域では、１の補数によるサムチェックと、冗長系としてのミラーリングデータによるチェックとを採用し、二重のチェック方式を採用している。このように、各重要度の領域に対して、複数のチェック方式を組み合わせてもよい。
【００３７】
＜データ読み出し手順１＞
図３で説明したデータを読み出す際は、各重要度に応じたメモリチェック方式を実行し、読み出すデータが正当であるかを確認する。図３の（ａ）で説明した重要度Ｃのデータを読み出す際は、読み出し制御部３０３が、図３の（ｂ）のアドレスに格納されたデータブロック（複数のアドレスのデータ）のサムチェック用データを一緒に読み出してサムチェックを実行する。
【００３８】
図４を用いて、図３の（ａ）のデータ重要度Ｃのデータ読み出し時におけるサムチェック手順を説明する。図４は、図３（ａ）においてＣＰＵ１１１がデータを書き込んだアドレス“１０００”からアドレス“１００３”の重要度Ｃのデータが正当であるかを判定する様子を示したものである。
【００３９】
アドレス“１００４”の値は、アドレス“１０００”から“１００３”のデータブロックのサム値となるべきである。ここで、図４の（ａ）で示すアドレス“１０００”から“１００３”のデータブロックのサム値は“０２”＋“０４”＋“２０”＋“４０”＝“６６”となる。したがって、アドレス“１０００”から“１００３”のデータブロックのサム値と、アドレス“１００４”に格納したチェック用データとが一致する。よって、読み出し制御部３０３は、アドレス“１０００”からアドレス“１００３”のデータが正当であると判定する。もし、データチェック時の計算したサム値と、データ書き込み時に記憶したサム値が一致しない場合、読み出し制御部３０３は、データが不当であると判定する。
【００４０】
＜データ読み出し手順２＞
図３の（ｃ）で説明した重要度Ｂのデータを読み出す際は、読み出し制御部３０３が、図３の（ｅ）のアドレスに格納されたパリティチェック用のデータを一緒に読み出して、パリティチェックを実行する。
【００４１】
図５は、図３においてＣＰＵ１１１がデータを書き込んだアドレス“２０００”の重要度Ｂのデータが正当であるかを判別する様子を示したものである。
【００４２】
アドレス“２００１”の値はアドレス“２０００”に格納したデータの偶数パリティ値である。ここで、図５の（ｃ）のアドレス“２０００”の偶数パリティ値を計算する。“ＦＥ（１６進数）”＝“１１１１１１１０（２進数）”であり、“１”の数を数えると“７”である。“１”の数が奇数であるため、偶数パリティチェック値は“０１”となる。アドレス“２０００”の偶数パリティ値と、（ｄ）のアドレス“２００１”に格納したチェック用データとが一致する。よって、読み出し制御部３０３は、アドレス“２０００”のデータが正当であると判定する。もし、データチェック時に計算した偶数パリティ値と、データ書き込み時に記憶した偶数パリティ値が一致しない場合、読み出し制御部３０３は、データが不当であると判定する。
【００４３】
＜データ読み出し手順３＞
図３の（ｅ）で説明した重要度Ａのデータを読み出す際は、読み出し制御部３０３が、図３の（ｆ）のアドレスに格納された１の補数によるサムチェック用データと、図３の（ｇ）のアドレスに格納されたミラーリングデータとを一緒に読み出して、読み出すデータが正当であるかを判定する。
【００４４】
図６は、図３において処理部３０１が書き込んだアドレス“３０００”の重要度Ａのデータが正当であるかを判別するため、データの１の補数を書き込んだアドレス“３００１”の値と、データのコピーを書き込んだアドレス“４０００”の値と、データの１の補数のコピーを書き込んだアドレス“４００１”の値を使用したチェックを行う様子を示したものである。
【００４５】
ここで、データをＸ、データの１の補数をＹ、データのコピーをＸ’、データの１の補数のコピーをＹ’と表現すると、Ｘ＝“５５”（アドレス“３０００”の値）、Ｙ＝“ＡＡ”（アドレス“３００１”の値）、Ｘ’＝“５５”（アドレス“４０００”の値）、Ｙ’＝“ＡＡ”（アドレス“４００１”の値）となる。
【００４６】
読み出し制御部３０３は、Ｘ＝Ｘ’かつＹ＝Ｙ’かつＸ＝~（Ｙ）かつＸ’＝~（Ｙ’）であることを確認する。読み出し制御部３０３は、前述の式が満たされている場合、アドレス“３０００”の値は正常であると判定し、データを読み出すことができる。図６の例では、Ｙの１の補数を求めると、~Ｙ＝~（ＡＡ）（１６進数）＝~（１０１０１０１０）（２進数）＝（０１０１０１０１）（２進数）＝（５５）（１６進数）となり、Ｘ＝~Ｙが成立する。また、Ｘ＝Ｘ’、Ｙ＝Ｙ’が成立しているため、Ｘ’＝~（Ｙ’）も成立している。Ｘ＝Ｘ’かつＹ＝Ｙ’かつＸ＝~（Ｙ）かつＸ’＝~（Ｙ’）を満たしているため、アドレス“３０００”の値は正常であると判断される。
【００４７】
＜データの判定処理＞
図７は、ＣＰＵ１１１がＲＡＭ１１３から各重要度のデータを読み出す処理をフローチャートとして記載した図である。以下、図７の各ステップについて説明する。
【００４８】
（ステップＳ７０１）
まず、読み出し制御部３０３は、ＲＡＭ１１３からデータを読み出す際に、本フローチャートを起動する。
【００４９】
（ステップＳ７０２）
次に、読み出し制御部３０３は、読み出すデータの重要度を判別する。上述したように、読み出し制御部３０３は、どの重要度が記憶領域のどのアドレスに対応するかを示す情報を用いて、読み出すデータのアドレス位置から、読み出すデータがどの重要度であるかを判別できる。
【００５０】
（ステップＳ７０３）
次に、読み出し制御部３０３は、ステップＳ７０２で算出したデータのデータ重要度に対応するメモリチェック方法を実行する。
【００５１】
（ステップＳ７０４）
次に、読み出し制御部３０３は、ステップＳ７０３を実行した結果として、データが正常であるかを判定する。ここで、データが正常であると判別された場合、ステップＳ７０５に移行し、異常であると判別された場合、ステップＳ７０７に移行する。
【００５２】
（ステップＳ７０５）
ステップＳ７０５に移行した場合、読み出し制御部３０３は、正常と判定されたデータを戻り値として返し、ステップＳ７０６に移行する。
【００５３】
（ステップＳ７０６）
そして、読み出し制御部３０３は、データ読み出し処理を終了する。
【００５４】
（ステップＳ７０７）
ステップＳ７０７に移行した場合、図８に示す、異常判別部３０４によるメモリ故障状態判別処理を実行する。
【００５５】
＜メモリ故障状態判別処理＞
図８は、図７のフローチャートに従いデータを読み出した結果、Ｓ７０４にて読み出したデータが異常であった場合のメモリ故障状態判別処理を示したものである。図８のフローチャートの各ステップを次に説明する。
【００５６】
（ステップＳ８００）
まず、異常判別部３０４は、図７のステップＳ７０３でチェックしたデータの重要度を判別する。
【００５７】
（ステップＳ８０１）
異常判別部３０４は、ステップＳ８００で判別したデータの重要度が重要度Ａである場合、Ｓ８１１に移行する。一方、ステップＳ８００で判別したデータの重要度が重要度Ａ以外のものである場合は、Ｓ８０２に移行する。
【００５８】
（ステップＳ８１１）
ステップＳ８１１に移行した場合、異常判別部３０４は、図７のステップＳ７０３でチェックした重要度Ａのデータに対して、重要度Ｂのデータチェック方法にてデータチェックを実施する。
【００５９】
（ステップＳ８１２）
異常判別部３０４は、ステップＳ８１１で重要度Ａのデータに対して重要度Ｂのデータチェック方法を実行した結果、データとチェック用データとが一致した場合、Ｓ８１３に移行する。一致しない場合はＳ８１４に移行する。
【００６０】
（ステップＳ８１３）
異常判別部３０４は、重要度Ｂの処理が、重要度Ａの記憶領域を侵害したと判定する。
【００６１】
（ステップＳ８１４）
異常判別部３０４は、重要度Ｂのデータチェック方法にてデータとチェック用データとが一致しなかった場合、図７のＳ７０３でチェックした重要度Ａのデータに対して、重要度Ｃのデータチェック方法を実行する。
【００６２】
（ステップＳ８１５）
異常判別部３０４は、ステップＳ８１４で重要度Ａのデータに対して重要度Ｃのデータチェック方法を実行した結果、データとチェック用データとが一致した場合、Ｓ８１６に移行する。一致しない場合はＳ８１７に移行する。
【００６３】
（ステップＳ８１６）
異常判別部３０４は、データ重要度Ｃの処理が、データ重要度Ａの記憶領域を侵害したと判定する。
【００６４】
（ステップＳ８１７）
異常判別部３０４は、重要度Ａの領域が物理的故障であると判定する。
【００６５】
（ステップＳ８０２）
異常判別部３０４は、ステップＳ８００で判別したデータの重要度が重要度Ｂである場合、Ｓ８２１に移行する。一方、ステップＳ８００で判別したデータの重要度が重要度Ｂ以外のもの（すなわち、重要度Ｃ）である場合は、Ｓ８３１に移行する。
【００６６】
（ステップＳ８２１）
ステップＳ８２１に移行した場合、異常判別部３０４は、図７のステップＳ７０３でチェックした重要度Ｂのデータに対して、重要度Ａのデータチェック方法にてデータチェックを実施する。
【００６７】
（ステップＳ８２２）
異常判別部３０４は、ステップＳ８２１で重要度Ｂのデータに対して重要度Ａのデータチェック方法を実行した結果、データとチェック用データとが一致した場合、Ｓ８２３に移行する。一致しない場合はＳ８２４に移行する。
【００６８】
（ステップＳ８２３）
異常判別部３０４は、重要度Ａの処理が、重要度Ｂの記憶領域を侵害したと判定する。
【００６９】
（ステップＳ８２４）
異常判別部３０４は、重要度Ａのデータチェック方法にてデータとチェック用データとが一致しなかった場合、図７のＳ７０３でチェックした重要度Ｂのデータに対して、重要度Ｃのデータチェック方法を実行する。
【００７０】
（ステップＳ８２５）
異常判別部３０４は、ステップＳ８２４で重要度Ｂのデータに対して重要度Ｃのデータチェック方法を実行した結果、データとチェック用データとが一致した場合、Ｓ８２６に移行する。一致しない場合はＳ８２７に移行する。
【００７１】
（ステップＳ８２６）
異常判別部３０４は、重要度Ｃの処理が、重要度Ｂの記憶領域を侵害したと判定する。
【００７２】
（ステップＳ８２７）
異常判別部３０４は、重要度Ｂの領域が物理的故障であると判定する。
【００７３】
（ステップＳ８３１）
異常判別部３０４は、ステップＳ８０２で判別したデータの重要度が重要度Ｃである場合、図７のＳ７０３でチェックした重要度Ｃのデータに対して、重要度Ａのデータチェック方法にてデータチェックを実施する。
【００７４】
（ステップＳ８３２）
異常判別部３０４は、ステップＳ８３１で重要度Ｃのデータに対して重要度Ａのデータチェック方法を実行した結果、データとチェック用データとが一致した場合、Ｓ８３３に移行する。一致しない場合はＳ８３４に移行する。
【００７５】
（ステップＳ８３３）
異常判別部３０４は、重要度Ａの処理が、重要度Ｃの記憶領域を侵害したと判定する。
【００７６】
（ステップＳ８３４）
異常判別部３０４は、重要度Ａのデータチェック方法にてデータとチェック用データとが一致しなかった場合、図７のＳ７０３でチェックした重要度Ｃのデータに対して、重要度Ｂのデータチェック方法を実行する。
【００７７】
（ステップＳ８３５）
異常判別部３０４は、ステップＳ８３４で重要度Ｃのデータに対して重要度Ｂのデータチェック方法を実行した結果、データとチェック用データとが一致した場合、Ｓ８３６に移行する。一致しない場合はＳ８３７に移行する。
【００７８】
（ステップＳ８３６）
異常判別部３０４は、重要度Ｂの処理が、重要度Ｃの記憶領域を侵害したと判定する。
【００７９】
（ステップＳ８３７）
異常判別部３０４は、重要度Ｃの領域が物理的故障であると判定する。
【００８０】
（ステップＳ８０３）
異常判別部３０４は、Ｓ８１３、Ｓ８１６、Ｓ８１７、Ｓ８２３、Ｓ８２６、Ｓ８２７、Ｓ８３３、Ｓ８３６、Ｓ８３７の判定結果から侵害レベルを判定する。具体的には、異常判別部３０４は、図９で示す情報を参照することにより、侵害レベルを決定する。
【００８１】
（ステップＳ８０４）
処理部３０１は、ステップＳ８０３にて決定された侵害レベルに応じた処理を実行する。
【００８２】
以上のように、本実施例では、複数の重要度をもつ処理が同一の揮発性メモリ上に値を記憶する制御装置において、一部の重要度のデータ読み出し時に異常であった場合、異なる重要度のデータチェック方法を実施する。異なる重要度のデータチェック方法での結果を用いることにより、データ異常の発生原因が、他の重要度の処理による侵害か、又は、電気的要因等による物理的な故障かを判別することが可能となる。
【００８３】
図９は、図８のステップＳ８０３で決定された侵害レベル（メモリ故障状態）と、侵害レベル決定後にステップＳ８０４で実行される処理をまとめた表である。図９の表は、例えば、ＲＯＭ１１２に格納されており、ＣＰＵ１１１は、当該表を読み込んで、ステップＳ８０３の処理を実行することができる。
【００８４】
侵害レベルと、侵害レベル決定後の処理とが関連付けられた表について、図９では「テーブル」構造を用いて説明するが、必ずしもテーブルによるデータ構造で表現されていなくても良く、他のデータ構造で表現されていても良い。データ構造に依存しないことを示すために、当該表を、単に「情報」と呼ぶことがある。
【００８５】
図９では、侵害レベルを６段階としており、それぞれの重要度の記憶領域が、他の重要度の処理に侵害されたか、又は、物理的故障であるかに応じて、各重要度のデータをどのようなデータに設定するかを記載している。より詳細には、表９００は、記憶領域の重要度９０１と、メモリ異常の種類９０２と、侵害レベル９０３と、データ異常時の処理９０４とを構成項目として含む。
【００８６】
図９の各レコードと図８で判定される異常の種類との関係を説明すると、図８のＳ８１３、Ｓ８１６は、レコード９１１に対応する。また、図８のＳ８１７は、レコード９１５に対応する。また、図８のＳ８２３は、レコード９１３に対応し、図８のＳ８２６は、レコード９１２に対応する。図８のＳ８２７、Ｓ８３７は、レコード９１６に対応する。図８のＳ８３３、Ｓ８３６は、レコード９１４に対応する。
【００８７】
例えば、レコード９１１は、重要度Ａのデータ記憶領域が下位の重要度（重要度Ｂ又はＣ）の処理から侵害された場合の侵害レベルと処理内容を示す。この場合、侵害レベルは、レベル６である。重要度Ａのデータ記憶領域が他の重要度の処理に侵害されたと判断した場合、重要度Ａ〜Ｃのデータ記憶領域の全てを初期状態にする。なお、図９での「初期化」とは、例えば、処理部３０１が実行する処理を最初から実行し直す（再計算する）ことを意味する。この場合、記憶領域のデータは、処理部３０１が実行する処理の最初の状態（初期状態）まで戻り、再計算により更新されていくことになる。
【００８８】
また、例えば、レコード９１５は、重要度Ａのデータ記憶領域が物理的に故障した場合の侵害レベルと処理内容を示す。この場合、侵害レベルは、レベル２である。重要度Ａのデータ記憶領域が物理的に故障した場合、重要度Ａのデータ記憶領域のデータを修復するか、又は、フェールセーフ値に固定する。ここでのフェールセーフ値は、ＲＯＭ１１２にあらかじめ格納されている。したがって、ＣＰＵ１１１は、当該フェールセーフ値を読み込んで、重要度Ａのデータ記憶領域に設定することができる。
【００８９】
図８の処理と図９の表により、ＲＡＭ１１３の重要度別の記憶領域のデータに異常があった場合、データの異常発生原因をより細かく判別することができ、異常発生原因に応じてより細かくその後の処理を行うことができる。特に、本実施例によれば、下位の重要度の処理が上位の重要度の前記記憶領域を侵害したのか、上位の重要度の処理が下位の重要度の前記記憶領域を侵害したのか、前記記憶領域が物理的に故障したのか、を侵害レベルとして判定することができ、侵害レベルに応じて、その後の処理を実行することができる。なお、図９の表９００は、一例であり、この内容に限定されない。表９００の内容は、重要度の数、異常の種類、及び、それに対応する処理内容を考慮して、適宜変更してよい。
【００９０】
図７〜図９で説明した一連の処理手順を、具体的な例で説明する。図１０は、重要度Ａの領域のアドレス“３０００”に書き込まれたデータを、図６で説明した重要度Ａのデータチェック方法にてチェックする様子を説明する図である。
【００９１】
重要度Ａの処理が重要度Ａのデータを読み出した際、読み出し制御部３０３は、図７のステップＳ７０３にて重要度Ａのデータチェック方法でデータの正当性を確認する。読み出したデータをＸ、データの１の補数をＹ、データのコピーをＸ’、データの１の補数のコピーをＹ’と表現すると、Ｘ＝“５４”（アドレス“３０００”の値）、Ｙ＝“ＡＡ”（アドレス“３００１”の値）、Ｘ’＝“５５”（アドレス“４０００”の値）、Ｙ’＝“ＡＡ”（アドレス“４００１”の値）となる。
【００９２】
図６では、Ｘ＝Ｘ’かつＹ＝Ｙ’かつＸ＝~（Ｙ）かつＸ’＝~（Ｙ’）であることを確認し、前述の式が満たされている場合、アドレス“３０００”の値は正常であると判断することを説明した。図１０では、Ｘ≠Ｘ’、Ｙ＝Ｙ’、Ｘ≠~（Ｙ）、Ｘ’＝~（Ｙ’）となっているため、重要度Ａのデータチェックでエラーとなる。したがって、ステップＳ７０４にてデータ異常と判断されて、ステップＳ７０７のメモリ故障状態判別処理に移行する。
【００９３】
図１０の状態において図８のメモリ故障状態判別処理を実行すると、まず、検査するデータは重要度Ａのデータであるため、ステップＳ８０１からステップＳ８１１の処理に移行する。異常判別部３０４は、Ｓ８１１にて、重要度Ｂのデータチェック方法を実行する。
【００９４】
図１１は、重要度Ａのデータに対して、重要度Ｂのデータチェック方法にてチェックする様子を説明する図である。
【００９５】
重要度Ｂのデータチェック方法は、図５で説明したパリティチェックである。データＸのパリティ値を計算すると“５４（１６進数）”＝“０１０１０１００（２進数）”であり、“１”の数を数えると“３”である。そのためパリティチェック値は“０１”と計算される。アドレス“３００１”に格納されているチェック用データ“ＡＡ”と比較すると不一致であるため、重要度Ｂのデータチェックではデータ異常となる。Ｓ８１１にて重要度Ｂのデータチェックを実行した結果、Ｓ８１２にてデータ異常（不一致）と判定される。したがって、Ｓ８１４に移行し、その後、重要度Ｃのデータチェックを実行する。
【００９６】
図１２は、重要度Ａのデータに対して、重要度Ｃのデータチェック方法にてチェックする様子を説明する図である。
【００９７】
重要度Ｃのデータチェック方法は、図４で説明したデータブロックのサムチェックである。データＸを含む、アドレス“３０００”〜アドレス“３００３”のサム値を計算すると“５４”（１６進数）＋“ＡＡ”（１６進数）＋“ＦＦ”（１６進数）＋“ＦＦ”（１６進数）＝“２ＦＣ”（１６進数）となり、下位１バイトを取って、“ＦＣ”となる。アドレス“３００４”に格納されているチェック用データ“ＦＦ”と比較すると不一致であるため、重要度Ｃのデータチェックではデータ異常となる。Ｓ８１４にて重要度Ｃのデータチェックを実行した結果、Ｓ８１５にてデータ異常（不一致）と判定される。したがって、Ｓ８１７に移行し、重要度Ａの記憶領域の物理的故障と判定される。
【００９８】
Ｓ８１７にてメモリの故障原因が物理的故障と分かったので、Ｓ８０３にて侵害レベルを決定する。重要度Ａのデータの物理的故障であるため、図９の侵害レベルを参照すると、侵害レベルはレベル２である。よって、処理部３０１は、データ異常時の処理として侵害レベル２の処理を選択し、Ｓ８０４で実行する。
【００９９】
侵害レベル２のデータ異常時処理は、データ異常回数に応じて、データを修復するか、又は、フェールセーフ値に固定するものである。この侵害レベル２のデータ異常時の処理を図１３のフローチャートで説明する。
【０１００】
（ステップＳ１３０１）
異常判別部３０４は、Ｓ８１７にて重要度Ａ領域が物理的故障と判定する。
【０１０１】
（ステップＳ１３０２）
処理部３０１は、重要度Ａ領域の過去のデータ異常の発生回数を、例えば所定の記憶領域から読み出す。
【０１０２】
（ステップＳ１３０３）
処理部３０１は、過去のデータ異常発生回数が閾値以上であるかを判定する。データ異常発生回数が閾値以上であった場合はＳ１３０４に移行し、データ異常発生回数が閾値未満であった場合はＳ１３１１に移行する。
【０１０３】
（ステップＳ１３０４）
処理部３０１は、Ｓ１３０３にて過去のデータ異常発生回数が閾値以上であった場合は、ＲＯＭ１１２からフェールセーフ値を読み出して、異常データの代用とする。
【０１０４】
（ステップＳ１３０５）
処理部３０１は、Ｓ１３０４にて重要度Ａの記憶領域の異常データの代用としてフェールセーフ値を使用する。この際、ＣＰＵ１１１の重要度Ａの記憶領域のデータ読み出しを禁止する。
【０１０５】
（ステップＳ１３１１）
処理部３０１は、重要度Ａの記憶領域の異常データが修復可能であるかを判定する。修復可能であると判定された場合、Ｓ１３１２に移行する。ここでの判定は、例えば、重要度Ａの記憶領域の異常データについて図１４で説明する関係が成立しているかで行うことができる。一方、修復不可能と判定された場合は、Ｓ１３０４に移行する。
【０１０６】
（ステップＳ１３１２）
処理部３０１は、Ｓ１３１１で修復可能と判定された場合、データ修復処理を行う。
【０１０７】
（ステップＳ１３１３）
処理部３０１は、所定の記憶領域に記憶されているデータ異常回数のカウント値に１を追加する。
【０１０８】
（ステップＳ１３１４）
処理部３０１は、異常データを正常データに修復後、通常の処理を継続する。
【０１０９】
以上、侵害レベル２の重要度Ａのデータが物理的故障による異常であった際の処理手順について説明した。この構成によれば、過去のデータ異常発生回数に応じて、ＲＡＭ１１３の記憶領域に対して適切な処理を実行することができる。
【０１１０】
ここで、Ｓ１３１２におけるデータ修復処理の実行例を、図１４を用いて説明する。図１４は、図１０の重要度Ａのデータチェックでデータ異常と判定されたデータを修復する様子を示した図である。
【０１１１】
図１０において、Ｘ＝“５４”（アドレス“３０００”の値）、Ｙ＝“ＡＡ”（アドレス“３００１”の値）、Ｘ’＝“５５”（アドレス“４０００”の値）、Ｙ’＝“ＡＡ”（アドレス“４００１”の値）である。図１４に示すように、Ｘ≠Ｘ’、Ｘ≠~（Ｙ）であるが、Ｙ＝Ｙ’、Ｘ’＝~（Ｙ’）が成立している。よって、Ｘ＝~（Ｙ）＝~（Ｙ’）＝Ｘ’であるため、処理部３０１は、元々のＸの値“５４”を破棄し、Ｘ’の値“５５”を正しいデータとしてアドレス“３０００”に設定する。
【０１１２】
データ修復処理は上記例に限らず、例えば、冗長系演算処理を行った結果のコピーを正しいデータとして書き戻すことなどを行ってもよい。また、Ｓ１３０４におけるフェールセーフ値に固定する処理、Ｓ１３０５における重要度Ａの記憶領域からのデータ読み出し禁止処理、Ｓ１３１４におけるデータ修復後の通常処理の継続などの各ステップの処理内容は上記例に限定されるものでなく、様々な処理へ変更が可能である。
【０１１３】
次に、上記例とは別の侵害レベルと判断されるデータ読み出し異常の例を説明する。図１５は、重要度Ａの領域のアドレス“３０００”に書き込まれたデータを、図６で説明した重要度Ａのメモリチェック方法にてチェックする様子を説明する図である。
【０１１４】
読み出したデータをＸ、データの１の補数をＹ、データのコピーをＸ’、データの１の補数のコピーをＹ’と表現すると、Ｘ＝“ＦＥ”（アドレス“３０００”の値）、Ｙ＝“０１”（アドレス“３００１”の値）、Ｘ’＝“５５”（アドレス“４０００”の値）、Ｙ’＝“ＡＡ”（アドレス“４００１”の値）となる。この状態では、Ｘ≠Ｘ’、Ｙ≠Ｙ’、Ｘ＝~（Ｙ）、Ｘ’＝~（Ｙ’）となっているため、重要度Ａのデータチェックでエラーとなり、図７のＳ７０７のメモリ故障状態判別処理に移行する。図８のＳ８０１における重要度はＡであるため、Ｓ８１１の処理に移行し、重要度Ａのデータに対して重要度Ｂのデータチェック方法を実行する。
【０１１５】
図１６は、図１５の重要度Ａのデータに対して、重要度Ｂのデータチェック方法にてチェックする様子を説明する図である。
【０１１６】
重要度Ｂのデータチェック方法は図５で説明したパリティチェックである。データＸのパリティ値を計算すると、“ＦＥ（１６進数）”＝“１１１１１１１０（２進数）”であり、“１”の数を数えると“７”である。“１”の数が奇数であるため、偶数パリティチェック値は“０１”となる。この値と、アドレス“３００１”に格納されているチェック用データ“０１”と比較すると一致するため、重要度Ｂのデータチェック方法では、データ正常と判定される。Ｓ８１１にて重要度Ｂのデータチェックを実行した結果、Ｓ８１２にて一致すると判定されたため、Ｓ８１３に移行する。Ｓ８１３では、重要度Ｂの処理が重要度Ａの領域を侵害したと判定される。
【０１１７】
Ｓ８１３にてデータ異常の原因が判別されたため、Ｓ８０３にて侵害レベルを決定する。図９を確認すると、重要度Ａのデータが下位の処理（重要度Ｂ）からの侵害により異常となった状態であるため、侵害レベルはレベル６と判断される。よって、処理部３０１は、データ異常時の処理として侵害レベル６の処理を選択し、Ｓ８０４で実行する。侵害レベル６のデータ異常時処理は“重要度Ａ〜重要度Ｃのデータをすべて初期化”である。この場合、重要度Ａ〜重要度Ｃの領域のデータが初期状態にセットされる。
【０１１８】
本実施例によれば、異なる重要度を持った処理とデータが混在する車載制御装置１００において、複雑な制御ロジックを組み込まずに、ある重要度のデータの異常が発生した際、異常となった原因が電気的要因等によるデータの異常なのか、他の重要度の演算を実行したことによって書き換えられた（侵害された）かを判別できる。その結果に応じて所定の処理を行う機能を備えることで、致命的な状態に陥ることを回避できる制御コントローラの提供が可能となる。
【０１１９】
より詳細には、本実施例の車載制御装置１００は、データの重要度によって異なるデータチェック方法を使用し、データ重要度で分割された記憶領域においてデータ異常個所の異常原因を検出し、それら原因に応じた異なる処理を実行する。上記実施例では、重要度Ａの領域に重要度Ｂのデータが書き込まれたケースについて説明したが、重要度Ａの領域に重要度Ｃのデータが書き込まれた場合や重要度Ｂの領域に重要度Ｃのデータが書き込まれたケースについても同様に適用が可能である。また、重要度はＡ〜Ｃに限らず、２つ以上の設定であれば制限を受けない。
【０１２０】
ここまで、重要度別にデータが記憶された各領域でデータ異常を検出した際に、データ重要度に応じた処理を実施する説明を行ったが、上記機能が正常動作しているかを確認する処理を行ってもよい。この場合、任意の重要度のデータ領域に対して、意図して異なる重要度の処理によるデータ書き込みを実行し、データ異常と判断されるかを確認すればよい。
【０１２１】
例えば、処理部３０１に指示することによって、車載制御装置１００の起動時に重要度Ａの領域に対して意図して重要度Ｂまたは重要度Ｃのデータ書き込みを行う。次に、読み出し制御部３０３によって、それらデータの書き込み領域に対して重要度Ａのデータチェックを実行する。本発明の機能が正常に動作している場合、重要度Ａのデータチェックを実行した結果、異常判別部３０４によって、図９における侵害レベル６の「下位の処理からの侵害」と判定され、データ異常時の処理として“重要度Ａ〜重要度Ｃのデータをすべて初期化”が選択される。最終的に、処理部３０１によって、重要度Ａ〜重要度Ｃの領域のデータが初期化される。この状態において、ＣＰＵ１１１によって重要度Ａ〜重要度Ｃの記憶領域が正しく初期化されているかを確認すれば、重要度Ａ領域のデータ異常検知の機能が正常動作していることを確認できる。
【０１２２】
このように、任意のタイミングで処理部３０１に対して指示し、意図的にある重要度の領域に対して別の重要度のデータを書き込むことによって、本実施例の機能が正常に動作しているかを確認してもよい。
【０１２３】
［第２実施例］
第１実施例では、ＣＰＵ１１１がＲＡＭ１１３のある重要度の領域からデータを読み込む際に、データが正当であるかどうかを判別するための説明を行ったが、この仕組みを逆にとらえ、ＣＰＵ１１１が演算する際に用いるデータをＲＡＭ１１３から読み出す際に、どの重要度が格納された領域にアクセスしたかを確認するために活用することも考えられる。
【０１２４】
図１７は、重要度Ｃのデータを演算するために、ＣＰＵ１１１がＲＡＭ１１３からデータを取得後に、ＲＡＭ１１３の重要度Ｃのデータ記憶領域から取得したものであるかを確認する様子を示した図である。
【０１２５】
例えば、重要度Ｃのデータを演算するために、重要度Ｃの領域からデータを取得したつもりが、重要度Ａのアドレス“３０００”から“３００３”の値を取得したとする。アドレス“３０００”からアドレス“３００３”のデータはそれぞれ“５５”、“ＡＡ”、“Ｆ０”、“０Ｆ”となっており、第１実施例の図６で説明したように、データとチェック用データの１の補数が連続して並んでいる状態である。この状態で図４に示した、データ重要度Ｃのデータ読み出し時におけるサムチェック手順を実行すると、“５５”＋“ＡＡ”＋“Ｆ０”＋“０Ｆ”＝“１ＦＥ”となり、チェックサムは“ＦＥ”となる。
【０１２６】
また、重要度Ａのアドレス３８００から３８０３に正しく重要度Ａのデータが書き込まれており、その値がそれぞれ“ＦＦ”、“００”、“１１”、“ＥＥ”だとすると、これらのチェックサムは、“ＦＦ”＋“００”＋“１１”＋“ＥＥ”＝“１ＦＥ”で“ＦＥ”となる。したがって、重要度Ａのデータに対して重要度Ｃのデータのメモリチェック方法を実施した場合、結果はすべて“ＦＥ”となる。
【０１２７】
このように、重要度Ｃのデータを演算するために読み込んだ値でチェックサムを計算した結果、“ＦＥ”の値であった場合、重要度Ａのデータを取得した可能性があると推測できる。すなわち、重要度Ｃのデータを演算するために読み込んだ値でチェックサムを計算した結果と、重要度Ａの領域から正しく読み込んだ値でチェックサムを計算した結果とを比較して、重要度Ｃのデータ記憶領域から正しく読み出されたかを判定してもよい。
【０１２８】
この手法では、重要度Ｃのデータを正しく読み込んだにも係らず、チェックサム値が偶発的に“ＦＥ”となってしまった場合に誤判定を起こすことも予想されるが、チェックサム計算結果を２バイトに拡張し、サム値が“１ＦＥ”と一致することをチェックする方法や、チェックサムが“ＦＥ”となった場合に、重要度Ａのデータのメモリチェック時に実行される、データとデータの１の補数による計算を実行することなどで回避できると考えられる。
【０１２９】
上記のようにして、ＣＰＵ１１１が重要度Ｃのデータを演算する過程において、ＲＡＭ１１３中の重要度Ａのデータの記憶領域にアクセスしたと判断した場合、重要度Ａのデータ記憶領域から読み出される全ての値をＲＯＭ１１２に格納されたフェールセーフ値にする等の処理を実行するように制御装置を構成してもよい。
【０１３０】
本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。上記実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることもできる。また、ある実施例の構成に他の実施例の構成を加えることもできる。また、各実施例の構成の一部について、他の構成を追加・削除・置換することもできる。
【０１３１】
例えば、上記実施例では、データ保証情報を用いたチェック方式として、サム値、パリティチェック、補数計算のデータチェック方法を用いた例を紹介したが、この他にＣＲＣやハッシュ関数などの誤り検出・訂正符号技術が適用可能である。また、１つの重要度の記憶領域のデータチェックに、それらを組み合わせて使用する形態も考えられる。
【０１３２】
上記各構成、機能、処理部等は、それらの一部や全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリ、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ Ｓｔａｔｅ Ｄｒｉｖｅ）等の記録装置、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に格納することができる。
【符号の説明】
【０１３３】
１００      ：車載制御装置
１１０      ：マイコン
１１１      ：ＣＰＵ
１１２      ：ＲＯＭ
１１３      ：ＲＡＭ
１１４      ：Ｉ／Ｏ
１２０      ：バッテリ
２００      ：制御対象機器
２１０      ：センサ
２２０      ：アクチュエータ
３００      ：制御プログラム
３０１      ：処理部
３０２      ：書き込み制御部
３０３      ：読み出し制御部
３０４      ：異常判別部
【図１Ａ】
2016066236.tif 000003
【図１Ｂ】
2016066236.tif 000004
【図２】
2016066236.tif 000005
【図３】
2016066236.tif 000006
【図４】
2016066236.tif 000007
【図５】
2016066236.tif 000008
【図６】
2016066236.tif 000009
【図７】
2016066236.tif 000010
【図８】
2016066236.tif 000011
【図９】
2016066236.tif 000012
【図１０】
2016066236.tif 000013
【図１１】
2016066236.tif 000014
【図１２】
2016066236.tif 000015
【図１３】
2016066236.tif 000016
【図１４】
2016066236.tif 000017
【図１５】
2016066236.tif 000018
【図１６】
2016066236.tif 000019
【図１７】
2016066236.tif 000020