(57)【要約】【課題】データの誤りを検出する機能を備えた電子制御装置及びマイクロコンピュータにおいて、データに誤りが生じた際の誤動作や異常動作を、処理負荷を増大させることなく抑制する。【解決手段】電子制御装置におけるマイクロコンピュータ１００では、予め定められた固定データを記憶するメモリ１７が設けられ、ＲＡＭ１１２から読み出されたデータについてデコーダ１４によって誤りが検出された場合は、ＲＡＭ１１２から読み出されたデータに代え、メモリ１７が記憶する固定データが読み出されて演算に使用される。固定データについて、例えば正常値として扱われるよう定義付けしておくことで、ＲＡＭ１１２から読み出されたデータに誤りが生じていた場合でもマイクロコンピュータ１００及び電子制御装置が正常に動作するようになる。【選択図】図３
2010102686.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵと、
前記ＣＰＵによってデータの読み書きが行われるメモリと、
前記ＣＰＵによって前記メモリから読み出されるデータの異常を検出する異常検出手段と、
を備えた電子制御装置において、
前記ＣＰＵは、前記メモリから読み出したデータについて前記異常検出手段により異常が検出されると、その異常が検出されたデータに代え、予め定められた固定データを用いて演算を実行するようになっていることを特徴とする電子制御装置。
【請求項２】
請求項１に記載の電子制御装置において、
前記固定データを記憶する固定データ記憶手段を備え、
前記ＣＰＵは、前記メモリから読み出したデータについて前記異常検出手段により異常が検出されると、前記固定データ記憶手段から前記固定データを読み出すようになっていることを特徴とする電子制御装置。
【請求項３】
請求項２に記載の電子制御装置において、
出力側が前記ＣＰＵと接続され、入力側が前記メモリ及び前記固定データ記憶手段に接続され、前記メモリから読み出されたデータについて前記異常検出手段により異常が検出されると、そのメモリから読み出されたデータに代え、前記固定データ記憶手段から読み出される前記固定データを前記ＣＰＵに出力するセレクタを備えていることを特徴とする電子制御装置。
【請求項４】
請求項１ないし請求項３の何れか１項に記載の電子制御装置において、
前記ＣＰＵによって前記メモリに書き込まれる書き込み対象のデータに基づき、予め定められたルールで冗長データを生成する書込時冗長データ生成手段を備え、
前記ＣＰＵは、書き込み対象のデータとともに、その書き込み対象のデータに基づき前記書込時冗長データ生成手段により生成された冗長データも前記メモリに書き込むようになっていることを特徴とする電子制御装置。
【請求項５】
請求項４に記載の電子制御装置において、
前記ＣＰＵにより前記メモリから読み出されるデータに基づき、前記ルールと同じルールで冗長データを生成する読込時冗長データ生成手段を備え、
前記異常検出手段は、前記メモリから読み出されたデータである読出データについて、前記書込時冗長データ生成手段により生成された冗長データと前記読込時冗長データ生成手段により生成された冗長データとを比較し、一致するか否かに基づきその読出データの異常を検出することを特徴とする電子制御装置。
【請求項６】
請求項１ないし請求項５の何れか１項に記載の電子制御装置において、
前記ＣＰＵが前記メモリから読み出したデータであって、重要度が所定の度合いより低いデータである低重要データについて、前記異常検出手段により異常が検出された場合、その低重要データに対応して前記固定データ記憶手段から読み出される前記固定データが当該電子制御装置による制御を安全側に動作させるためのフェールセーフ値として扱われるように構成されていることを特徴とする電子制御装置。
【請求項７】
請求項１ないし請求項５の何れか１項に記載の電子制御装置において、
前記ＣＰＵが前記メモリから読み出したデータであって、重要度が所定の度合い以上のデータである高重要データについて、前記異常検出手段により異常が検出された場合、その高重要データに対応して前記固定データ記憶手段から読み出される前記固定データが当該電子制御装置に異常が発生したことを表す異常値として扱われるように構成されていることを特徴とする電子制御装置。
【請求項８】
請求項６に記載の電子制御装置において、
前記ＣＰＵは複数のアプリケーションを実行可能であり、
前記固定データは、前記複数のアプリケーションのそれぞれについてのフェールセーフ値を含み、
アプリケーションの種類に応じて前記固定データの一部又は全部がフェールセーフ値として用いられるように構成されていることを特徴とする電子制御装置。
【請求項９】
請求項７に記載の電子制御装置において、
前記ＣＰＵは複数のアプリケーションを実行可能であり、
前記固定データは、前記複数のアプリケーションのそれぞれについての異常値を含み、
アプリケーションの種類に応じて前記固定データの一部又は全部が異常値として用いられるように構成されていることを特徴とする電子制御装置。
【請求項１０】
請求項１ないし請求項９の何れか１項に記載の電子制御装置において、
前記ＣＰＵは浮動小数点数形式のデータに基づく演算を実行する機能を有し、
前記固定データは、浮動小数点数形式の演算における非数であることを特徴とする電子制御装置。
【請求項１１】
ＣＰＵと、
前記ＣＰＵによってデータの読み書きが行われるメモリと、
前記ＣＰＵによって前記メモリから読み出されるデータの異常を検出する異常検出手段と、
を備えたマイクロコンピュータにおいて、
前記ＣＰＵは、前記メモリから読み出したデータについて前記異常検出手段により異常が検出されると、その異常が検出されたデータに代え、予め定められた固定データを用いて演算を実行するようになっていることを特徴とするマイクロコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データの誤りを検出する機能を備えた電子制御装置及びマイクロコンピュータに関する。
【背景技術】
【０００２】
例えば車載エンジンの制御を司る電子制御装置では、その電子制御装置が備えるマイクロコンピュータが、各種データに基づいて、燃料噴射量の制御、点火時期の制御等のエンジン制御をリアルタイムに行う。
【０００３】
そのようなマイクロコンピュータ或いは電子制御装置においては、データに誤りが生じた場合の障害を防止するため、データの誤りを検出・訂正する機能が搭載される場合がある。尚、データの誤りの検出が可能な機構としてＥＤＣ（Ｅｒｒｏｒ  Ｄｅｔｅｃｔｉｏｎ  Ｃｏｄｅ）機構が知られている。また、データの誤りの検出・訂正が可能な機構として、例えばＥＣＣ（Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｏｎ  Ｃｏｄｅ）機構が知られている。
【０００４】
図８は、マイクロコンピュータの構成の一例を表す図面である。
図８に示すマイクロコンピュータ１００は、プログラムに従い動作するＣＰＵ１１０と、ＣＰＵ１１０の演算結果等を記憶するＲＡＭ１１２と、データ保持用の電源が常時供給されるバックアップＲＡＭ１１４と、ＣＰＵ１１０が実行するプログラム等を記憶するＲＯＭ１１６と、周辺機能回路１２０，１２２，１２４，１２６とを備えている。周辺機能回路１２０〜１２６は、マイクロコンピュータ１００の周辺機能としての例えば通信機能、タイマ機能、入力機能（入力ポート）、出力機能（出力ポート）、などを実現する回路である。
【０００５】
図９は、図８のマイクロコンピュータ１００に実装され得る、データのエラー（誤り）を検出するためのハード構成を表す図である。具体的に、ＲＡＭ１１２或いはバックアップＲＡＭ１１４から読み出されるデータの誤りを検出する構成を表し（図９では、ＲＡＭ１１２についてのみ記載）、前述のＥＤＣ機構に相当する。
【０００６】
図９では、データの誤りを検出するために本来のデータとは別に付加される冗長データ（以下、検出用冗長データとも記載する）を用いて誤りを検出するようになっている。
図９に示すように、ＲＡＭ１１２は、データ領域２０１と、冗長データ領域２０２とを有している。演算に用いられるデータであって、ＲＡＭ１１２に一時的に格納されることとなるデータ（以下、ＷＲＩＴＥデータとも記載する）は、ＲＡＭ１１２のデータ領域２０１に格納される。また、エンコーダ１３２により、ＷＲＩＴＥデータに基づき検出用冗長データが生成されるとともに、その生成された検出用冗長データは、冗長データ領域２０２に格納される。
【０００７】
データ領域２０１に格納されたデータのうち、読み出し対象のデータはそのデータ領域２０１から読み出されてデコーダ１３０に入力されるとともに、その読み出し対象のデータに対応する検出用冗長データが冗長データ領域２０２から読み出されて同じくデコーダ１３０に入力される。
【０００８】
デコーダ１３０では、エンコーダ１３２により検出用冗長データが生成される場合と同じルールで、データ領域２０１から読み出された読み出し対象のデータに基づき冗長データが生成される。そして、その生成された冗長データと、読み出し対象のデータに対応して冗長データ領域２０２から読み出された検出用冗長データとが比較されることによって、誤りが検出される。
【０００９】
具体的に、デコーダ１３０において生成された冗長データと、冗長データ領域２０２から読み出された検出用冗長データとが一致すれば、データ領域２０１から読み出されたデータに誤りが生じていないと判断される。この場合、そのデータ領域２０１から読み出されたデータがそのままＣＰＵ１１０において使用されることとなる（ＲＥＡＤデータとしてＣＰＵ１１０に出力される）。
【００１０】
一方、デコーダ１３０において生成された冗長データと、冗長データ領域２０２から読み出された検出用冗長データとが一致しなければ、データ領域２０１から読み出されたデータに誤りが生じていると判断される。この場合、デコーダ１３０により、データに誤りがあることを表すエラーフラグがセットされる。
【００１１】
図１０に、エンコーダ１３２、デコーダ１３０において実現される冗長データの生成に関わる演算式を示す。
エンコーダ１３２では、図１０に示すようなチェック行列にＷＲＩＴＥデータ（図１０の例では８ビット）がかけ合わされることにより、検出用冗長データが生成される。また、デコーダ１３０では、同じチェック行列にデータ領域２０１から読み出されたデータ（図１０の例では８ビット）がかけ合わされることにより、冗長データが生成される。このように、エンコーダ１３２、デコーダ１３０では、同じチェック行列を用いて冗長データが生成される。なお、ＷＲＩＴＥデータ、或いはデータ領域２０１から読み出されたデータが２バイト（１６ビット）の場合は、そのデータが上位８ビットと下位８ビットとに分けられ、それぞれについて冗長データが生成される。つまり、２つの冗長データが生成される。ＷＲＩＴＥデータ、或いはデータ領域２０１から読み出されたデータが４バイト（３２ビット）の場合は、そのデータが８ビットずつ４分割され、同様にそれぞれについて冗長データが生成される。つまり、４つの冗長データが生成される。
【００１２】
図１１は、図８のマイクロコンピュータ１００に実装され得る、データのエラー（誤り）を検出・訂正するための構成を表す図である。具体的に、ＲＡＭ１１２或いはバックアップＲＡＭ１１４から読み出されるデータの誤りを検出・訂正する構成を表し（図１１では、ＲＡＭ１１２についてのみ記載）、前述のＥＣＣ機構に相当する。
【００１３】
図１１におけるハード構成は、図９と同じである。そして、図１１では、データの誤りを検出・訂正するために本来のデータとは別に付加される冗長データ（以下、訂正用冗長データとも記載する）が用いられて、誤りの検出・訂正が実現されるようになっている。
【００１４】
具体的に、ＷＲＩＴＥデータの書き込み時に、エンコーダ１３２によりそのＷＲＩＴＥデータに基づき訂正用冗長データが生成される。訂正用冗長データは、ＷＲＩＴＥデータに対応付けてＲＡＭ１１２の冗長データ領域２０２に格納される。そして、データ領域２０１からのデータの読み出し時に、そのデータとともに訂正用冗長データが読み出されてデコーダ１３０に入力されるとともに、デコーダ１３０により、エンコーダ１３２が訂正用冗長データを生成するのと同じルールで、データ領域２０１から読み出されたデータに基づき冗長データが生成される。
【００１５】
デコーダ１３０において、そのデコーダ１３０にて生成された冗長データと冗長データ領域２０２から読み出された訂正用冗長データとに基づき、データ領域２０１から読み出されたデータの誤りが検出されるとともに、誤りが検出された場合には誤りが生じたビットが特定され、誤りが訂正される。
【００１６】
そして、訂正後のデータが、ＣＰＵ１１０において使用されることとなる（ＲＥＡＤデータとしてＣＰＵ１１０に出力される）。
このようなＥＣＣ機構では、１ビット分の誤りの訂正が可能とされている。複数ビット分の誤りについては、検出は可能であるが、訂正は確実なものではなく誤った値に訂正される場合もある。尚、データの誤りの検出・訂正の原理については、周知であるためここでは詳しい説明を省略する。
【００１７】
図１２は、ＥＤＣ機構、或いはＥＣＣ機構において、ＣＰＵ１１０が実行する処理を表すフローチャートである。
まず、図１２（Ａ）に示す処理は、ＥＤＣ機構においてＣＰＵ１１０が実行する処理として適用できるものである。ここではＥＤＣ機構に適用した場合について説明するが、ＥＣＣ機構において適用しても良い。
【００１８】
ＣＰＵ１１０は、データをＲＡＭ１１２から読み出す旨の命令が発生すると、Ｓ３１０にて、そのＲＡＭ１１２のデータ領域２０１から読み出し対象のデータを読み出す。この際、その読み出し対象のデータに対応した検出用冗長データもＲＡＭ１１２の冗長データ領域２０２から読み出す。データ領域２０１から読み出されたデータ、及び冗長データ領域２０２から読み出された検出用冗長データは、デコーダ１３０に入力され、デコーダ１３０にて誤りの検出が行われる。
【００１９】
次に、Ｓ３２０にて、ＲＡＭ１１２のデータ領域２０１から読み出したデータが有効であるか否か、言い換えると、データに誤りが生じていないか否かを判定する。より具体的に、データの誤りの有無を表すエラーフラグを確認する。尚、前述のように、エラーフラグはデコーダ１３０によりセットされる。
【００２０】
Ｓ３２０にてデータ領域２０１から読み出したデータが有効である（データに誤りが生じていない）と判定すると（Ｓ３２０：ＹＥＳ）、Ｓ３３０に移行し、その読み出したデータを用いたソフト処理を実行する。そしてその後、当該処理を終了する。
【００２１】
一方、Ｓ３２０にてデータ領域２０１から読み出したデータが有効でない（データに誤りが生じている）と判定すると（Ｓ３２０：ＮＯ）、Ｓ３４０に移行し、エラー処理を実行する。エラー処理としては、例えば、エラーが生じたことを履歴として記録する処理、エラーの発生回数をカウントする処理、異常ランプを点灯させる処理、などがある。エラー処理の後は、当該処理（図１２（Ａ）の処理）を終了する。
【００２２】
このように、ＥＤＣ機構においては、エラーチェック（Ｓ３２０）が実施されるようにすることで、データに誤りが生じた場合にその誤りが生じたデータが所定のソフト処理に使用されないように構成することができる（Ｓ３２０：ＮＯ→Ｓ３４０）。
【００２３】
図１２（Ｂ）に示す処理は、ＥＣＣ機構においてＣＰＵ１１０が実行する処理として適用できるものである。
ＣＰＵ１１０は、データをＲＡＭ１１２から読み出す旨の命令が発生すると、Ｓ４１０にて、そのＲＡＭ１１２のデータ領域２０１から読み出し対象のデータを読み出す。この際、その読み出し対象のデータに対応した訂正用冗長データもＲＡＭ１１２の冗長データ領域２０２から読み出す。データ領域２０１から読み出されたデータ、及び冗長データ領域２０２から読み出された訂正用冗長データは、デコーダ１３０に入力され、デコーダ１３０にて誤りの検出・訂正が行われる。
【００２４】
ＣＰＵ１１０は、デコーダ１３０を介してデータ領域２０１から読み出されたデータを用いて、Ｓ４２０にて所定のソフト処理を実行する。そしてその後、当該処理を終了する。
【００２５】
ＥＣＣ機構では、データ領域２０１から読み出されたデータに誤りが生じていた場合にその誤りが訂正されるため（但し、訂正可能なのは１ビット分）、誤りが訂正されることを前提に図１２（Ａ）のＳ３２０のようなエラーチェックが実施されることなく、ソフト処理が実行されるように構成することができる。
【００２６】
以上、データの誤りを検出・訂正する構成について説明したが、この点については、例えば、特許文献１，２にも記載されている。
【先行技術文献】
【特許文献】
【００２７】
【特許文献１】特開平９−２９２３１２号公報
【特許文献２】特開平４−１２７３４０号公報
【発明の概要】
【発明が解決しようとする課題】
【００２８】
前述のように、例えばＥＤＣ機構において、データの読み出し毎にソフト処理にてエラーチェックを実施することで、誤りが生じたデータが使用されることを回避できる。しかし、この場合、データの読み出し毎にエラーチェックを実施する必要があり、処理負荷が増大してしまう。特に、例えばＲＡＭ１１２において、テンポラリ領域やスタック領域として使用される領域については、データの読み書きの頻度が高くなるため、処理負荷の問題はますます大きくなる。尚、データの読み出し毎にエラーチェックを実施するのではなく、所定の周期でエラーチェックを実施するようにすることで処理負荷を抑えることも考えられるが、この場合、誤りが生じているデータについてエラーチェックが実施されることなく、その誤りが生じたデータがそのまま演算に使用されてしまうことも懸念される。
【００２９】
一方、ＥＣＣ機構では、データに誤りが生じた場合にその誤りが訂正される点に鑑み、誤りが訂正されることを前提にエラーチェックを実施しないように構成し、これにより処理負荷の問題を回避することもできる。しかしながら、ＥＣＣ機構では、１ビット分の誤りは訂正できるものの、データに複数ビット分の誤りが生じた場合には、正しく訂正されない可能性もある。正しく訂正されなければ、誤りが生じたデータがそのまま演算に使用されることとなる。
【００３０】
そして、マイクロコンピュータ１００やそのマイクロコンピュータ１００が搭載されたシステムにおいて、誤りが生じたデータが使用されると、誤動作や異常動作が生じるおそれがある。
【００３１】
例えば車両において、車載エンジンの制御を司る電子制御装置は、リアルタイムに制御を実施するため、誤りが生じたデータが使用され続けてしまうと、車両の異常動作（オーバーランなど）が発生したりする懸念がある。このため、誤りが生じたデータについては、車両の異常動作の要因とならないよう即座にデータの訂正がなされることが重要である。
【００３２】
本発明は、こうした問題に鑑みなされたもので、データの誤りを検出する機能を備えた電子制御装置及びマイクロコンピュータにおいて、データに誤りが生じた際の誤動作や異常動作を、処理負荷を増大させることなくより確実に防止することを目的とする。
【課題を解決するための手段】
【００３３】
上記目的を達成するためになされた請求項１に記載の発明は、ＣＰＵと、ＣＰＵによってデータの読み書きが行われるメモリと、ＣＰＵによってメモリから読み出されるデータの異常を検出する異常検出手段と、を備えた電子制御装置において、ＣＰＵは、メモリから読み出したデータについて異常検出手段により異常が検出されると、その異常が検出されたデータに代え、予め定められた固定データを用いて演算を実行するようになっている。
【００３４】
このような電子制御装置によれば、メモリから読み出されたデータに異常が生じていた場合に、その異常が生じたデータが演算に用いられることを防止し得る。そして、固定データを、例えばその電子制御装置を正常に動作させるようなデータに定義しておけば、メモリから読み出されたデータに異常が生じていた場合でも電子制御装置は固定データを用いて正常に動作し得るようになる。したがって、メモリから読み出されたデータに異常が生じていた場合に、電子制御装置においてその異常が生じたデータが使用されることで誤動作や異常動作が生じてしまうことを回避し、その電子制御装置を正常に動作させることを可能とし得る。しかも、異常が生じたデータに代えて固定データを使用するという簡単な構成により、処理負荷を抑えることができる。また、データに異常が生じた際のアプリケーションによる対応が不要となるため、このことからも処理負荷を抑えることができる。さらに、そのアプリケーションが不要となることから開発コストも抑えることができる。
【００３５】
また、本発明の電子制御装置は、固定データを記憶する固定データ記憶手段を備え、ＣＰＵは、メモリから読み出したデータについて異常検出手段により異常が検出されると、固定データ記憶手段から固定データを読み出すようになっていても良い。
【００３６】
これによれば、メモリから読み出されたデータに異常が生じていた場合に、ＣＰＵによって固定データ記憶手段から固定データを読み出すという簡単な構成で、電子制御装置の誤動作や異常動作を防止することができる。そして、そのような簡単な構成ならば、ＣＰＵの処理負荷を抑えることができる。
【００３７】
また、本発明の電子制御装置は、出力側がＣＰＵと接続され、入力側がメモリ及び固定データ記憶手段に接続され、メモリから読み出されたデータについて異常検出手段により異常が検出されると、そのメモリから読み出されたデータに代え、固定データ記憶手段から読み出される固定データをＣＰＵに出力し得るセレクタを備えていても良い。
【００３８】
尚、異常検出手段を回路として構成し、その異常検出手段を構成する回路を、メモリとセレクタとの間に設けても良い。このような構成によれば、メモリから読み出されたデータについて異常検出手段（回路）により異常が検出された場合に、固定データ記憶手段が記憶する固定データのみがＣＰＵに出力され得るようになる。つまり、メモリ側のデータ（異常が生じたデータ）がＣＰＵに出力されることを防止し得る。これによれば、確実かつ簡単に、メモリから読み出されたデータであって異常が生じたデータに代え、固定データがＣＰＵに出力される（固定データがＣＰＵにおいて演算に用いられる）ようになる。
【００３９】
尚、異常検出手段がメモリから読み出されたデータについて異常を検出した場合に、その異常検出手段が異常を表す信号をセレクタに出力するようにし、セレクタは、異常を表す信号が入力されると、そのメモリから読み出されたデータに代え固定データ記憶手段から読み出されるデータを出力するように構成されていても良い。
【００４０】
また、本発明の電子制御装置は、ＣＰＵによってメモリに書き込まれる書き込み対象のデータに基づき、予め定められたルールで冗長データを生成する書込時冗長データ生成手段を備え、ＣＰＵは、書き込み対象のデータとともに、その書き込み対象のデータに基づき書込時冗長データ生成手段により生成された冗長データもメモリに書き込むようになっていても良い。
【００４１】
これによれば、その冗長データを用いて、メモリに書き込まれたデータ（メモリに書き込まれてその後読み出されたデータ）に異常が生じたか否かをより確実に検出し得るようになる。
【００４２】
つまり、本発明のように、ＣＰＵによりメモリから読み出されるデータに基づき、前記ルールと同じルールで冗長データを生成する読込時冗長データ生成手段を備え、異常検出手段は、メモリから読み出されたデータである読出データについて、書込時冗長データ生成手段により生成された冗長データ（以下、書込時冗長データとも記載する）と、読込時冗長データ生成手段により生成された冗長データ（以下、読込時冗長データとも記載する）とを比較し、一致するか否かに基づきその読出データの異常を検出するよう構成すると良い。
【００４３】
これによれば、メモリから読み出されたデータについて、書込時冗長データと読込時冗長データとが一致すれば、そのメモリから読み出されたデータは正常（データに異常が生じていない）と判別されるようにすることができる。逆に、メモリから読み出されたデータについて、書込時冗長データと読込時冗長データとが一致しなければ、そのメモリから読み出されたデータに異常が生じていると判別されるようにすることができる。つまり、異常を検出し得る。
【００４４】
また、本発明の電子制御装置では、ＣＰＵがメモリから読み出したデータであって、重要度が所定の度合いより低いデータである低重要データについて、異常検出手段により異常が検出された場合、その低重要データに対応して固定データ記憶手段から読み出される固定データが電子制御装置による制御を安全側に動作させるためのフェールセーフ値として扱われるように構成されても良い。
【００４５】
ここで、重要度が所定の度合いよりも低い低重要データとしては、車両の走行自体に直接の影響が無いようなデータを割り当てることが想定され得る。また、制御を安全側に動作させるためのフェールセーフ値とは、電子制御装置による通常の制御を継続させ得るためのデータ値であることを指す趣旨である。
【００４６】
このような電子制御装置によれば、メモリから読み出されたデータであって低重要データに異常が生じ、その異常が生じた低重要データに代えて固定データが演算に用いられた場合に、電子制御装置は、その固定データに基づき安全側に動作し得る（通常の制御を継続し得る）ようになる。換言すると、電子制御装置による制御の緊急停止等を回避し得るようになる。
【００４７】
また、本発明の電子制御装置は、ＣＰＵがメモリから読み出したデータであって、重要度が所定の度合い以上のデータである高重要データについて、異常検出手段により異常が検出された場合、その高重要データに対応して固定データ記憶手段から読み出される固定データが当該電子制御装置に異常が発生したことを表す異常値として扱われるように構成されていても良い。
【００４８】
ここで、重要度が所定の度合い以上の高重要データとしては、車両の走行自体に直接影響するようなデータを割り当てることが想定され得る。また、異常が発生したことを表す異常値とは、電子制御装置による制御を中断（緊急停止）させ得るためのデータ値であることを指す趣旨である。これは、車両の走行自体に直接影響するデータに異常が生じたような場合には、制御を中断したほうがむしろ安全であることを想定したものである。
【００４９】
このような電子制御装置によれば、メモリから読み出されたデータであって高重要データに異常が生じ、その異常が生じた高重要データに代えて固定データが演算に用いられた場合に、電子制御装置における制御が例えば中断（緊急停止）し得るようにすることができる。そして、これにより、安全性がより高いレベルで実現され得るようになる。
【００５０】
また、本発明の電子制御装置は、ＣＰＵが複数のアプリケーションを実行可能に構成され、固定データは、複数のアプリケーションのそれぞれについてのフェールセーフ値を含み、アプリケーションの種類に応じて固定データの一部又は全部がフェールセーフ値として用いられるように構成されても良い。
【００５１】
このような電子制御装置では、アプリケーションの種類に関わらず、メモリから読み出されたデータに異常が生じ、固定データが演算に用いられた場合に、固定データに基づきその電子制御装置が安全側に動作する（通常の制御を継続する）ようになり、汎用性が広がる。換言すると、どのようなアプリケーションにも適用可能となり得る。
【００５２】
また、本発明の電子制御装置は、ＣＰＵが複数のアプリケーションを実行可能に構成され、固定データは、複数のアプリケーションのそれぞれについての異常値を含み、アプリケーションの種類に応じて固定データの一部又は全部が異常値として用いられるように構成されても良い。このような構成によれば、どのようなアプリケーションにも適用可能となり得る。
【００５３】
また、本発明の電子制御装置は、ＣＰＵが浮動小数点数形式のデータに基づく演算を実行する機能を有し、固定データは、浮動小数点数形式の演算における非数として構成されても良い。
【００５４】
浮動小数点数形式の演算において、非数は、演算結果が不正な値（無限大や定義できない値）であることを表すものである。例えば、浮動小数点数形式の演算では、０で除算した場合などに特殊な数値表現（即ち非数）を結果として返し、処理を続行することができる。
【００５５】
このような電子制御装置では、メモリから読み出されたデータに異常が生じた場合に、非数が結果（読み出し結果）として返され、電子制御装置の誤動作や異常動作を生じさせることなく、処理が続行されるようになる。
【００５６】
また、本発明は、ＣＰＵと、ＣＰＵによってデータの読み書きが行われるメモリと、異常検出手段と、を備えたマイクロコンピュータとして構成され得る。
異常検出手段は、ＣＰＵによってメモリから読み出されるデータの異常を検出する。
【００５７】
そして、本発明では、ＣＰＵは、メモリから読み出したデータについて異常検出手段により異常が検出されると、その異常が検出されたデータに代え、予め定められた固定データを用いて演算を実行するようになっている。
【００５８】
このような本発明によれば、メモリから読み出されたデータに異常が生じていた場合に、その異常が生じたデータが演算に用いられることを防止し得る。
つまり、メモリから読み出されたデータに異常が生じていた場合に、その異常が生じたデータが使用されることで誤動作や異常動作が生じてしまうことを回避し、ひいてはマイクロコンピュータを正常に動作させることを可能とし得る。
【００５９】
尚、上述した電子制御装置のそれぞれの特徴及び機能を実現し得るマイクロコンピュータも本発明として構成し得る。
【図面の簡単な説明】
【００６０】
【図１】本実施形態のマイクロコンピュータ１００の構成を表す図である。
【図２】データの読み書きを実現するハード構成を表す図である。
【図３】データの読み書きを実現するハード構成及びソフト処理を表す図である。
【図４】エラーフラグのセット態様及び固定データの読み出し態様を表す図である。
【図５】正常値、異常値の判別に係る定義付けを説明する図である。
【図６】本実施形態の固定データ（浮動小数点数形式）の構成を表す図である。
【図７】本実施形態のマイクロコンピュータ１００が実行する処理を表すフローチャートである。
【図８】マイクロコンピュータの構成の一例を表す図である。
【図９】ＥＤＣ機構を表す図である。
【図１０】冗長データの生成に関わる演算式を表す図である。
【図１１】ＥＣＣ機構を表す図である。
【図１２】マイクロコンピュータのＣＰＵにより実行される処理を表す図である。
【図１３】車両ネットワークシステムの一例を表す図面である。
【図１４】本実施形態の電子制御装置の構成を表す図面である。
【図１５】データの読み書きを実現するハード構成及びソフト処理を表す図である
【図１６】本実施形態の電子制御装置において実行される処理の流れを表すフローチャートである。
【図１７】従来の処理の流れを表すフローチャートである。
【発明を実施するための形態】
【００６１】
以下に、本発明の実施形態を図面に基づき説明する。
［第１実施形態］
図１３は、本実施形態の車両ネットワークシステム２００を表す構成図である。尚、図１３に示す車両ネットワークシステム２００は一例である。
【００６２】
また、以下の説明において、ＥＣＵとは、電子制御装置のことである。
図１３に示す車両ネットワークシステム２００の例では、例えば、エンジン２１０の制御を司るエンジンＥＣＵ２２０、ナビゲーション機能の制御を司るナビゲーションＥＣＵ２３０、ドアのロック／アンロック等のボデー系の制御を司るボデーＥＣＵ２４０、等がネットワーク２９０を介して通信可能に接続される。
【００６３】
図１４は、エンジンＥＣＵ２２０の具体的構成を示す構成図である。
エンジンＥＣＵ２２０は、前述したようにエンジン２１０の制御を司るものであり、マイクロコンピュータ１００と、入力部８１，８２と、出力ドライバ８３，８４，８５と、コネクタ８６とを備えている。入力部８１，８２は、入力回路と、ＡＤ変換回路とから構成される。
【００６４】
エンジンＥＣＵ２２０は、アクセルセンサ７１、スロットルセンサ７２、ノッキングセンサ７３、インジェクタ７４、イグナイタ７５、電子スロットル７６等とコネクタ８６を介して電気的に接続される。
【００６５】
アクセルセンサ７１は、ユーザのアクセル操作を介して制御されるアクセル開度を検出するためのセンサである。
スロットルセンサ７２は、エンジン２１０（図１３参照）への吸入空気量を制御する電子スロットル７６のスロットル開度を検出するためのセンサである。
【００６６】
ノッキングセンサ７３は、エンジン２１０の振動レベルを検出するためのセンサである。
インジェクタ７４は、エンジン２１０の気筒内に燃料を噴射するための装置である。
【００６７】
イグナイタ７５は、エンジン２１０の気筒内の混合気に点火するための装置である。
電子スロットル７６については前述した通りである。
アクセルセンサ７１からのセンサ信号（アナログ信号）は、入力部８１を介してデジタル信号に変換され、マイクロコンピュータ１００に入力される。同様に、スロットルセンサ７２からのセンサ信号（アナログ信号）は、入力部８２を介してデジタル信号に変換され、マイクロコンピュータ１００に入力される。
【００６８】
マイクロコンピュータ１００は、アクセルセンサ７１やスロットルセンサ７２等から入力される信号が表す値を元に演算を行い、インジェクタ７４、イグナイタ７５、電子スロットル７６等の駆動を制御する。具体的には、インジェクタ７４の通電タイミングや通電期間を制御して、燃料噴射タイミングや燃料噴射量の制御を行う。また、イグナイタ７５への通電タイミングを制御して、点火時期の制御を行う。また、電子スロットル７６のスロットル開度を制御する。エンジンＥＣＵ２２０は、このような制御をリアルタイムに行う。
【００６９】
図１は、本実施形態のマイクロコンピュータ１００の構成図である。尚、図１のマイクロコンピュータ１００は、［背景技術］の欄にて説明した図８と同じであるため、ここでは説明を省略することとする。
【００７０】
図２は、ＲＡＭ１１２に対するデータの読み書きを実現するハード構成を表す図面である。尚、ここでは、ＲＡＭ１１２の場合について説明するが、バックアップＲＡＭ１１４についても同様の構成が設けられている。
【００７１】
図２において、デコーダ１４と、エンコーダ１８とを有している点、ＲＡＭ１１２がデータ領域１０及び冗長データ領域１２を有している点は、図９と同じである。
つまり、図２では、図９と同様、ＷＲＩＴＥデータはＲＡＭ１１２のデータ領域１０に書き込まれるとともに、エンコーダ１８によりＷＲＩＴＥデータに基づき検出用冗長データが生成され、その生成された検出用冗長データがＲＡＭ１１２の冗長データ領域１２に書き込まれるようになっている。
【００７２】
また、ＲＡＭ１１２のデータ領域１０から読み込まれたデータ、及びそのデータに対応して冗長データ領域１２から読み込まれた検出用冗長データはデコーダ１４に入力されるとともに、デコーダ１４において、データ領域１０から読み出されたデータについて誤りの検出が実行される。デコーダ１４は、データ領域１０から読み出されたデータについて誤りが検出された場合に、エラーフラグをセットするとともに、異常を表す異常信号を出力するようになっており、この異常信号は、後述するセレクタ１６に入力されるように構成されている。尚、冗長データの生成に際しては、図１０に示す演算式が用いられる。
【００７３】
ここで、本実施形態のマイクロコンピュータ１００は、図２に示すように、セレクタ１６と、予め定められた固定データを記憶するメモリ１７とを備えている。
セレクタ１６は、入力側において、ＲＡＭ１１２のデータ領域１０、及びメモリ１７と信号線を介して接続可能に構成される。そして、セレクタ１６の出力側は、ＣＰＵ１１０と接続される。
【００７４】
このセレクタ１６は、通常は、内部の入力側においてＲＡＭ１１２のデータ領域１０側と接続される。この場合、そのデータ領域１０から読み出されたデータがＲＥＡＤデータとしてＣＰＵ１１０側に出力される（ＣＰＵ１１０により読み出される）。
【００７５】
一方、デコーダ１４から異常信号が入力されると、内部の入力側の接続を、メモリ１７側に切り換える。この場合、そのメモリ１７が記憶する固定データがＲＥＡＤデータとしてＣＰＵ１１０側に出力されるようになる（ＣＰＵ１１０により読み出されるようになる）。
【００７６】
図３を用いて、より具体的に説明する。
図３では、マイクロコンピュータ１００のＣＰＵ１１０において実行される処理を示すとともに、ハード部における作用も示す。尚、図３において、ＣＰＵ１１０が実行する処理は、図１２（Ｂ）に示す処理と同じである。つまり、ＣＰＵ１１０は、読み出したデータのソフト上でのエラーチェックを実行することなく、その読み出したデータを使用するようになっている。
【００７７】
まず、図３におけるフローチャートを説明する。
ＣＰＵ１１０は、データをＲＡＭ１１２から読み出す旨の命令が発生すると、Ｓ１１０にて、読み出し対象のデータの読み出しを行う。続いて、Ｓ１２０にて、読み出したデータを用いて所定のソフト処理を実行する。
【００７８】
ソフト処理において、データが異常値と判別された場合は、システムダウンするようになっている。正常値と異常値との判別は、読み出し対象のアドレス毎（読み出し対象のＲＡＭ値毎）に異なる内容となる。この点については後述する。Ｓ１２０の後は、当該処理を終了する。
【００７９】
次に、ハード構成における作用について説明する。
Ｓ１１０においては、ＲＡＭ１１２におけるデータ領域１０のうち、プログラムによって指示されるアドレスの領域から、データが読み出される。ここでは、アドレス４，５にまたがって２バイトのデータが読み出されるよう指示されているものとする。尚、ＲＡＭ１１２において、各アドレスには１バイト（８ビット）のデータを格納可能である。
【００８０】
アドレス４，５から読み出されたデータについては、前述のように、デコーダ１４において、誤りの検出が行われる。
デコーダ１４にて誤りが検出されなければ、セレクタ１６の内部の入力側はＲＡＭ１１２のデータ領域１０側に接続される。そして、図３において黒の太矢印にてデータの流れを示すように、ＲＡＭ１１２のデータ領域１０から読み出されたデータがセレクタ１６を介してＲＥＡＤデータとして出力され、ＣＰＵ１１０において演算で使用される。
【００８１】
一方、アドレス４，５から読み出されたデータについて、デコーダ１４にて誤りが検出されたならば、デコーダ１４によってエラーフラグがセットされるとともに、セレクタ１６に異常信号が入力される。この場合、セレクタ１６の内部の入力側はメモリ１７側に切り換えて接続される。そして、図３において白抜きの矢印にてデータの流れを示すように、メモリ１７に記憶された固定データ（正確には固定データの一部）がセレクタ１６を介してＲＥＡＤデータとして出力され、ＣＰＵ１１０において演算で使用される。
【００８２】
後述するが、エラーフラグがセットされるレジスタは４ビットからなり、アドレス４，５から読み出されたデータに誤りが生じていたならば、そのアドレス４，５に応じたビット位置にエラーフラグがセットされる。そして、エラーフラグがセットされたビット位置及び読み出し対象のデータのバイト数に応じて、固定データの一部又は全部が読み出されるようになっている。本例では、アドレス４，５にまたがって読み出した２バイトのデータに誤りが生じていた場合、固定データ「０ｘＦＦＦＦ００００」のうち、「０ｘ００００」の部分が読み出される。
【００８３】
Ｓ１２０のソフト処理では、Ｓ１１０で読み出されたデータが、「０ｘ００００」〜「０ｘ９ＦＦＦ」の範囲の値ならそのデータが正常値とみなされて所定の処理が実行される。一方、Ｓ１１０で読み出されたデータが「０ｘＡ０００」〜「０ｘＦＦＦＦ」の範囲の値ならそのデータが異常値とみなされてシステムダウンする。
【００８４】
アドレス４，５にまたがって読み出されたデータに誤りが生じていた場合は、前述のようにメモリ１７が記憶する固定データ「０ｘＦＦＦＦ００００」のうち、「０ｘ００００」が読み出される。その読み出されたデータ「０ｘ００００」はソフト処理にて正常値と認識され、処理が継続される。このように、ＲＡＭ１１２から読み出されたデータに誤りが生じていた場合に、メモリ１７が記憶する固定データが読み出されることによって、マイクロコンピュータ１００が搭載されるシステムがダウンしない（正常動作する）ようになっている。
【００８５】
次に、図４を用いて、エラーフラグのセットについて、及び固定データの読み出しについて具体的に説明する。
図４（Ｂ）に示すが、前述したように、エラーフラグがセットされるレジスタは４ビットからなる。ここでは、各ビットを、ビット０、ビット１、ビット２、ビット３とする。
【００８６】
アドレス値を４で割ったときの余りが３となるアドレス（以下、バイトレーンが「０ｘ０３」であるアドレス、とも記載する）から読み出されたデータに誤りが生じていた場合、ビット３にエラーフラグがセットされる。バイトレーンが「０ｘ０３」であるアドレスとは、具体的に、アドレス３，７，１１，１５，１９，・・・２５１，２５５（図３参照）である。
【００８７】
アドレス値を４で割ったときの余りが２となるアドレス（以下、バイトレーンが「０ｘ０２」であるアドレス、とも記載する）から読み出されたデータに誤りが生じていた場合、ビット２にエラーフラグがセットされる。バイトレーンが「０ｘ０２」であるアドレスとは、具体的に、アドレス２，６，１０，１４，１８，・・・２５０，２５４（図３参照）である。
【００８８】
アドレス値を４で割ったときの余りが１となるアドレス（以下、バイトレーンが「０ｘ０１」であるアドレス、とも記載する）から読み出されたデータに誤りが生じていた場合、ビット１にエラーフラグがセットされる。バイトレーンが「０ｘ０１」であるアドレスとは、具体的に、アドレス１，５，９，１３，１７，・・・２４９，２５３（図３参照）である。
【００８９】
アドレス値を４で割ったときの余りが０となるアドレス（以下、バイトレーンが「０ｘ００」であるアドレス、とも記載する）から読み出されたデータに誤りが生じていた場合、ビット０にエラーフラグがセットされる。バイトレーンが「０ｘ００」であるアドレスとは、具体的に、アドレス０，４，８，１２，１６，・・・２４８，２５２（図３参照）である。
【００９０】
そして、図４（Ａ）に示すが、エラーフラグの位置、及び読み出し対象のデータのバイト数に応じて、メモリ１７から、そのメモリ１７が記憶する固定データの一部又は全部が読み出される。
【００９１】
例えば、ＲＡＭ１１２から読み出された１バイトのデータに誤りが生じていたなら、その読み出されたデータが格納されていたアドレスに応じて、メモリ１７が記憶する固定データ「０ｘＦＦＦＦ００００」は、「０ｘＦＦ」」、「０ｘＦＦ」、「０ｘ００」、「０ｘ００」の何れかに切り出されて読み出される。
【００９２】
また、ＲＡＭ１１２から読み出された２バイトのデータに誤りが生じていたなら、その読み出されたデータが格納されていたアドレスに応じて、メモリ１７が記憶する固定データ「０ｘＦＦＦＦ００００」は、「０ｘＦＦＦＦ」、「０ｘ００００」の何れかに切り出されて読み出される。
【００９３】
また、ＲＡＭ１１２から読み出された４バイトのデータに誤りが生じていたなら、メモリ１７が記憶する固定データ「０ｘＦＦＦＦ００００」はそのまま読み出される。
図４（Ａ）において、バイトリード時の欄は、読み出し対象のデータが１バイトの場合を表し、ハーフワード時の欄は、読み出し対象のデータが２バイトの場合を表し、ワードリード時の欄は、読み出し対象のデータが４バイトの場合を表す。
【００９４】
バイトリード時において（つまり、読み出し対象のデータが１バイトの場合）、ビット３にエラーフラグがセットされたならば、メモリ１７が記憶する固定データ「０ｘＦＦＦＦ００００」のうち、左端２桁分（１バイト分）の「０ｘＦＦ」が読み出される。また、バイトリード時において、ビット２にエラーフラグがセットされたならば、メモリ１７が記憶する固定データ「０ｘＦＦＦＦ００００」のうち、中間の４桁における左寄りの２桁分（１バイト分）の「０ｘＦＦ」が読み出される。また、バイトリード時において、ビット１にエラーフラグがセットされたならば、メモリ１７が記憶する固定データ「０ｘＦＦＦＦ００００」のうち、中間の４桁における右寄りの２桁分（１バイト分）の「０ｘ００」が読み出される。また、バイトリード時において、ビット０にエラーフラグがセットされたならば、メモリ１７が記憶する固定データ「０ｘＦＦＦＦ００００」のうち、右端２桁分（１バイト分）の「０ｘ００」が読み出される。
【００９５】
次に、ハーフワードリード時（つまり、２バイトのデータが読み出される場合）であるが、まず、２バイトのデータがＲＡＭ１１２からどのように読み出されるかについて説明する。
【００９６】
２バイトのデータが読み出される場合は、読み出し対象を２バイトとする旨が指定されるとともに、読み出し先のアドレスとしては、バイトレーンが「０ｘ００」、又は「０ｘ０２」となるアドレスが指定される。つまり、アドレス０，２，４，６，・・・（図３参照）の何れかが指定される。そして、例えばアドレス０が指定されたなら、そのアドレス０、及びそのアドレス０と連続するアドレス１のデータが合わせて読み出される。
【００９７】
つまり、アドレス０が指定されることによってアドレス０，１にまたがって２バイト分のデータが読み出される。アドレス２が指定された場合も同様に、アドレス２，３にまたがって２バイト分のデータが読み出される。
【００９８】
次に、エラーフラグについて説明する。
ＲＡＭ１１２から読み出された２バイトのデータにおいて、バイトレーンが「０ｘ０３」であるアドレスから読み出された部分に誤りが検出されれば、ビット３にエラーフラグがセットされる。同様に、バイトレーンが「０ｘ０２」であるアドレスから読み出された部分に誤りが検出されれば、ビット２にエラーフラグがセットされる。バイトレーンが「０ｘ０１」であるアドレスから読み出された部分に誤りが検出されれば、ビット１にエラーフラグがセットされる。バイトレーンが「０ｘ００」であるアドレスから読み出された部分に誤りが検出されれば、ビット０にエラーフラグがセットされる。
【００９９】
そして、ハーフワードリード時において、ビット３或いはビット２にエラーフラグがセットされたならば、メモリ１７が記憶する固定データ「０ｘＦＦＦＦ００００」のうち、左側４桁分（２バイト分）の「０ｘＦＦＦＦ」が読み出される。また、ハーフワードリード時において、ビット１或いはビット０にエラーフラグがセットされたならば、メモリ１７が記憶する固定データ「０ｘＦＦＦＦ００００」のうち、右側４桁分（２バイト分）の「０ｘ００００」が読み出される。
【０１００】
次に、ワードリード時（つまり、４バイトのデータが読み出される場合）であるが、まず、４バイトのデータがＲＡＭ１１２からどのように読み出されるかについて説明する。
４バイトのデータが読み出される場合は、読み出し対象を４バイトとする旨が指定されるとともに、読み出し先のアドレスとしては、バイトレーンが「０ｘ００」となるアドレスが指定される。つまり、アドレス０，４，８，１２・・・（図３参照）が指定される。そして、例えばアドレス０が指定されたなら、そのアドレス０、及びそのアドレス０から連続するアドレス１〜３までのデータが合わせて読み出される。
【０１０１】
つまり、アドレス０が指定されることによってアドレス０〜３にまたがって４バイト分のデータが読み出される。
次に、エラーフラグについて説明する。
【０１０２】
ＲＡＭ１１２から読み出された４バイトのデータにおいて、バイトレーンが「０ｘ０３」であるアドレスから読み出された部分に誤りが検出されれば、ビット３にエラーフラグがセットされる。同様に、バイトレーンが「０ｘ０２」であるアドレスから読み出された部分に誤りが検出されれば、ビット２にエラーフラグがセットされる。バイトレーンが「０ｘ０１」であるアドレスから読み出された部分に誤りが検出されれば、ビット１にエラーフラグがセットされる。バイトレーンが「０ｘ００」であるアドレスから読み出された部分に誤りが検出されれば、ビット０にエラーフラグがセットされる。
【０１０３】
そして、ハーフワードリード時において、ビット３〜０の何れかでもエラーフラグがセットされたならば、メモリ１７が記憶する固定データ「０ｘＦＦＦＦ００００」がそのまま読み出される。
【０１０４】
このような本実施形態では、メモリ１７から読み出されたデータ（固定データの一部又は全部）がＣＰＵ１１０が実行する処理において正常値とみなされるよう、ＲＡＭマッピングが行われる。より具体的に、ソフトウェアの設計時に、メモリ１７から読み出されるデータが正常値とみなされるような定義付けがなされる。例えば、図３の例では、メモリ１７から読み出されるデータ「０ｘ００００」は正常値とみなされるよう定義付けがなされている（Ｓ１２０参照）。ところで、図３における定義付けは、その図３の場合、即ち、バイトレーンが「０ｘ００」であるアドレスからバイトレーンが「０ｘ０１」であるアドレスにまたがって２バイト分のデータを読み出す場合に限った定義付けである。
【０１０５】
他の定義付けについて、図５に示す。
図５（Ａ）は、バイトリード時（１バイトデータの読み出しの際）であって、読み出し対象のＲＡＭ１１２のアドレスが、バイトレーンが「０ｘ００」、「０ｘ０１」であるアドレスの場合である。この場合、読み出されたデータ（ＲＥＡＤデータ）は、「０ｘ００」〜「０ｘ９Ｆ」の範囲の値なら正常値とみなされ、「０ｘＡ０」〜「０ｘＦＦ」の範囲の値なら異常値とみなされるようになっている。このため、ＲＡＭ１１２から読み出されたデータに誤りが生じていた場合にメモリ１７から読み出されることとなるデータ「０ｘ００」は、正常値として扱われることとなる。
【０１０６】
図５（Ｂ）は、バイトリード時であって、読み出し対象のＲＡＭ１１２のアドレスが、バイトレーンが「０ｘ０２」、「０ｘ０３」であるアドレスの場合である。この場合、ＲＥＡＤデータは、「０ｘ００」〜「０ｘ３Ｆ」の範囲の値なら異常値とみなされ、「０ｘ４０」〜「０ｘＦＦ」の範囲の値なら正常値とみなされるようになっている。このため、ＲＡＭ１１２から読み出されたデータに誤りが生じていた場合にメモリ１７から読み出されることとなるデータ「０ｘＦＦ」は、正常値として扱われることとなる。
【０１０７】
図５（Ｃ）は、図３の例と同じである。
図５（Ｄ）は、ハーフワードリード時（２バイトデータの読み出しの際）であって、データの読み出しの際に指定されるＲＡＭ１１２のアドレスが、バイトレーンが「０ｘ０２」であるアドレスの場合である。この場合、ＲＥＡＤデータは、「０ｘ００００」〜「０ｘ３ＦＦＦ」の範囲の値なら異常値とみなされ、「０ｘ４０００」〜「０ｘＦＦＦＦ」の範囲の値なら正常値とみなされるようになっている。このため、ＲＡＭ１１２から読み出されたデータに誤りが生じていた場合にメモリ１７から読み出されることとなるデータ「０ｘＦＦＦＦ」は、正常値として扱われることとなる。
【０１０８】
図５（Ｅ）は、ワードリード時（４バイトデータの読み出しの際）である。尚、データの読み出しの際に指定されるＲＡＭ１１２のアドレスは、バイトレーンが「０ｘ００」であるアドレスとなる。この場合、ＲＥＡＤデータは、「０ｘ００００００００」〜「０ｘ１０００００００」の範囲の値なら異常値とみなされ、「０ｘ１００００００１」〜「０ｘＦＦＦＦＦＦＦＦ」の範囲の値なら正常値とみなされるようになっている。このため、ＲＡＭ１１２から読み出されたデータに誤りが生じていた場合にメモリ１７から読み出されることとなるデータ「０ｘＦＦＦＦ００００」は、正常値として扱われることとなる。
【０１０９】
以上説明したように、本実施形態においては、マイクロコンピュータ１００において、ＲＡＭ１１２から読み出されたデータに誤りが検出された場合、その誤りが検出されたデータに代え、メモリ１７が記憶する固定データが即座に読み出されて演算に使用されるようになっている。そして、メモリ１７から読み出される固定データは、マイクロコンピュータ１００における演算において、そのマイクロコンピュータ１００、ひいてはエンジンＥＣＵ２２０を正常に動作させる正常値として予め定義されている。ここで、正常値とは、マイクロコンピュータ１００（ひいてはエンジンＥＣＵ２２０）の動作を（正常に）継続させるためのデータであることを指す。
【０１１０】
このような本実施形態においては、ＲＡＭ１１２から読み出されたデータに誤りが生じていた場合に、データに誤りが生じていることによって（誤りが生じているデータが演算に使用されることによって）マイクロコンピュータ１００或いはエンジンＥＣＵ２２０が誤動作してしまったり異常動作してしまったりする、ということを防止することができる。
【０１１１】
ところで、アプリケーションの種類によっては、安全側のフェールセーフ値が、フラグ情報として、「１」のみで表されたり、或いは「０」のみで表されたりする。この点、本実施形態においては、固定データは、その半分が「１」で構成され、残り半分が「０」で構成され、「１」と「０」を同じ割合づつ含んでいる。そして、上記実施形態でも説明したように、例えば、固定データのうち「１」のみから構成される部分のデータ、及び固定データのうち「０」のみから構成される部分のデータ、の何れかが読み出されるように構成できる。このため、フェールセーフ値が「１」のみで表されるアプリケーション、フェールセーフ値が「０」のみで表されるアプリケーションの何れにも対応できる。
【０１１２】
尚、本実施形態において、デコーダ１４が異常検出手段及び読込時冗長データ生成手段に相当し、メモリ１７が固定データ記憶手段に相当し、エンコーダ１８が書込時冗長データ生成手段に相当している。
〈変形例〉
次に、変形例について、図１５〜図１７を用いて説明する。
【０１１３】
本変形例では、車両の制御に使用されるデータ（ＲＡＭ１１２に記憶されるデータ）としては、重要度が所定の度合いよりも低いデータ（以下、低重要データとも記載する）と、重要度が所定の度合い以上のデータ（以下、高重要データとも記載する）と、があることを前提とする。
【０１１４】
データの重要度の高低は、例えばそのデータが車両の走行自体に直接影響するか否かに基づき定められる。
具体的には、車両の走行自体には影響しないデータ（車両の走行の可否を決定づけないデータ）を、低重要データとすることができる。尚、車両の走行性能を改善し得るデータについても、車両の走行自体には影響しないデータであれば、低重要データとしても良い。
【０１１５】
一方、車両の走行自体に影響するデータ（車両の走行の可否を決定づけるデータ）を、高重要データとすることができる。
ここで、図１５に基づき説明すると、本変形例では、ＲＡＭ１１２のデータ領域１０のうち、バイトレーンが「０ｘ００」、「０ｘ０１」であるアドレスに低重要データが記憶されるようになっており、バイトレーンが「０ｘ０２」、「０ｘ０３」であるアドレスに高重要データが記憶されるようになっている。
【０１１６】
低重要データの例、及び高重要データの例とともに、本変形例の作用について以下に説明する。
まず、低重要データの一例としては、例えば学習値などがある。
【０１１７】
車両の走行に関連する学習値は、その車両の走行性能や走行状態を最適化するうえでは有用である。一方で、学習値自体がなくても、初期値或いはデフォルト値を用い、車両の走行は十分に可能である。
【０１１８】
例えば、エンジン２１０における点火時期を最適化するための学習値の一例について説明する。
車両では、ノッキングセンサ７３によりエンジン２１０の振動レベルが検出され、その検出値に基づきノッキングの発生が検出される。エンジンＥＣＵ２２０は、ノッキングが検出されると、エンジン２１０の点火時期を進角又は遅角することでノッキングの発生を抑制する。
【０１１９】
初期状態では、点火時期は最遅角側に設定される。そして、ノッキングセンサ７３の検出値に応じて点火時期の調整量が学習され、その学習値がＲＡＭ１１２等に記憶される。
そして、本変形例において、このような学習値は、低重要データとして、前述のようにバイトレーンが「０ｘ００」、「０ｘ０１」であるアドレスに記憶されるようになっている。
【０１２０】
ＲＡＭ１１２から読み出された学習値について、誤りが検出された場合には、その学習値に代わって、メモリ１７に記憶された固定データが読み込まれて使用される。そして、上記実施形態にて既に述べたように、バイトレーンが「０ｘ００」、「０ｘ０１」であるアドレス（ＲＡＭ１１２のアドレス）と、メモリ１７の右寄り２バイト分の領域とが対応するようになっている。つまり、学習値のように、バイトレーンが「０ｘ００」、「０ｘ０１」であるアドレスに記憶されるデータに対応する固定データは、メモリ１７に記憶されたデータのうち、「０ｘ００００」の部分となる。
【０１２１】
そして、その固定データは、図１５中に示すように、正常値として扱われるように定義されている。
具体的には、図１５の例では、「０ｘ００００」〜「０ｘ９０００」の範囲の値が正常値とみなされ、「０ｘＡ０００」〜「０ｘＦＦＦＦ」の範囲の値が異常値とみなされるようになっている。
【０１２２】
学習値の例において、固定データが表す正常値とは換言すれば初期値のことである。
つまり、学習値に誤りが検出された場合に使用される固定データは、初期値として扱われ、例えば上述の点火時期の例では、その点火時期は初期値にリセットされて最遅角側になることとなる。また、この場合、点火時期の調整に関する学習は再度やり直されることとなる。
【０１２３】
尚、点火時期に関する学習値のみならず、他の学習値についても、車両の走行性能や走行状態を最適化するうえでは有用である一方、車両の走行自体に直接影響するものではない場合が多い。また、学習値については、誤りが検出されたことで初期化（リセット）されても、学習のやり直しにより再度の取得が可能である。
【０１２４】
このため、学習値については、対応する固定データが正常値（初期値）となるように定義しておくことができる。
次に、高重要データの一例を説明する。
【０１２５】
例えば、電子スロットル７６の駆動制御においては、その電子スロットル７６の全閉時にスロットルセンサ７２から検出される検出値（電圧値）を基準として、電子スロットル７６の制御値（目標開度を示す制御値）として出力する。
【０１２６】
このため、電子スロットル７６の全閉時におけるスロットルセンサ７２の検出値（電圧値）を表すデータに誤りが生じると、それに応じた制御値も誤ったものとなってしまう。具体的には、本来の目標開度に対してずれが生じた値となってしまう。制御値が誤ったものとなってしまうと、例えば、エンジン２１０において急激な吹き上がりが生じて車両が急加速したり、逆に急激な減速が生じたりすることも懸念される。
【０１２７】
このため、例えば電子スロットル７６の駆動制御のためのデータ（電子スロットル７６の全閉時におけるスロットルセンサ７５の検出値のデータや、電子スロットル７６の目標開度を示すデータなど）は、車両の走行自体に大きく影響するデータであると言える。このようなデータを、高重要データとすることができる。
【０１２８】
そして、本変形例では、このような高重要データについては、ＲＡＭ１１２のデータ領域１０のうち、バイトレーンが「０ｘ０２」，「０ｘ０３」であるアドレスに記憶されるように構成されている（図１５参照）。
【０１２９】
そして、上記実施形態にて既に述べたように、バイトレーンが「０ｘ０２」，「０ｘ０３」であるアドレス（ＲＡＭ１１２のアドレス）と、メモリ１７の左寄り２バイト分の領域とが対応する。
【０１３０】
図１５に示す例では、ＲＡＭ１１２のデータ領域１０のうち、バイトレーンが「０ｘ０２」，「０ｘ０３」であるアドレスから読み出されたデータ（即ち、高重要データ）に誤りが検出された場合、それに対応して、メモリ１７における左寄りの２バイト分の領域から固定データが読み出される。
【０１３１】
具体的には、図１５において、ＲＡＭ１１２のアドレス６，７にわたって２バイトの高重要データが読み出されたとし、その読み出された高重要データに誤りが生じていた場合には、メモリ１７から、固定データとして、「０ｘＦＦＦＦ」が読み出される。
【０１３２】
そして、固定データとしての「０ｘＦＦＦＦ」という値は、同図中に示すように異常値として認識されるように定義されており、この場合、システムがダウンするようになっている。
【０１３３】
ここで、システムダウン処理の内容は、制御の種類（アプリケーションの種類）に応じて適宜決定され得る。
以下、電子スロットル７６に関するシステムダウン処理の内容について説明する。
【０１３４】
まず、電子スロットル７６の制御において、その電子スロットル７６のバルブを全閉するような処理が行われると、次に説明するように不都合が生じることも懸念される。具体的には、例えば走行中（特に高速走行中）にいきなり電子スロットル７６のバルブが全閉してしまうと、急激なエンジンブレーキ作用による減速ショックが発生する可能性がある。
【０１３５】
このような点に鑑みると、例えば電子スロットル７６の制御においては、システムダウン処理として、次のような処理が行われることが好ましい。
具体的には、バルブの開度を全閉状態に対し若干開いた状態（退避走行モード）とするような処理が、電子スロットル７６に関するシステムダウン処理として好ましい。車両の停止（急激な停止）を防止し、最低限の走行ができるようにするためである。また、その他、ダイアグ記憶や、異常を示す異常ランプを点灯させる等の処理を、システムダウン処理として行う。
【０１３６】
このように、例えば電子スロットル７６の駆動を制御する際に使用されるデータのような高重要データについては、対応する固定データが異常値と認識されるように定義しておくことができる。高重要データが、例えば車両の走行自体に影響するようなデータであることに鑑みれば、その高重要データに誤りが検出された場合には、システム全体をダウンする側に導いたほうが安全と考えられるためである。
【０１３７】
ところで、ＲＡＭ１１２から読み出したデータの全てについてエラーチェックを行っていると処理負荷は高くなる。図１７は、エラーチェックを行う従来の制御例を表すフローチャートである。
【０１３８】
図１７の処理では、まず、Ｓ６１０において、読み出し対象のデータを読み出す。より具体的には、ＲＡＭ１１２におけるデータ領域１０のうち、プログラムによって指示されるアドレスの領域からデータを読み出す。
【０１３９】
次に、Ｓ６２０にて、読み出したデータが有効であるか否か、言い換えると、データに誤りが生じていないか否かを判定する。より具体的には、データの誤りの有無を表すエラーフラグを確認する。
【０１４０】
Ｓ６２０にて、読み出したデータが有効である（データに誤りが生じていない）と判定すると（Ｓ６２０：ＹＥＳ）、Ｓ６４０に移行する。
Ｓ６４０では、データが正常範囲か否かを判定する。Ｓ６４０にてデータが正常範囲であると判定すると（Ｓ６４０：ＹＥＳ）、Ｓ６５０に移行し、通常の制御処理を実行する。そしてその後、当該処理を終了する。
【０１４１】
一方、Ｓ６４０にてデータが正常範囲でないと判定すると（Ｓ６４０：ＮＯ）、Ｓ６６０に移行し、システムダウン処理を実行する。そしてその後、当該処理を終了する。
一方、Ｓ６２０でデータが有効でないと判定すると（Ｓ６２０：ＮＯ）、Ｓ６３０に移行し、データの初期化を行う。
【０１４２】
例えば、エンジン２１０を制御するエンジンＥＣＵ２２０のようにリアルタイムな制御が必要とされる場合に、図１７に示す処理を適用して全てのデータに対してエラーチェックを行うようにしてしまうと、リアルタイムな制御ができなくなるおそれがある。
【０１４３】
そこで、図１６に示すような処理を実行することとしても良い。図１６の処理によれば、エラーチェックを実施しない分だけ処理負荷を抑えることができる。一方、エラーチェックを実施しないとしても、誤りが検出された場合には固定データによって正常／異常の動作が規定されるため、適切かつリアルタイムな制御が可能となる。
【０１４４】
図１６の処理では、まず、Ｓ５１０にて、読み出し対象のデータを読み出す。より具体的には、ＲＡＭ１１２におけるデータ領域１０のうち、プログラムによって指示されるアドレスの領域からデータを読み出す。尚、ＲＡＭ１１２から読み出したデータについて、誤りが検出された場合（デコーダ１４によって誤りが検出された場合）には、代わってメモリ１７の固定データが読み込まれることとなる。尚、ＣＰＵ１００自体が誤りの検出を行うわけではなく、デコーダ１４及びセレクタ１６の構成により、誤りの検出、及び誤りが検出された場合の固定データの読み出しが実現される。
【０１４５】
Ｓ５１０の後はＳ５２０に移行し、読み出したデータが正常範囲か否かを判定する。
Ｓ５２０でデータが正常範囲であると判定すると（Ｓ５２０：ＹＥＳ）、Ｓ５３０に移行し、通常の制御処理を実行する。
【０１４６】
一方、Ｓ５２０でデータは正常範囲でないと判定すると（Ｓ５２０：ＮＯ）、Ｓ５４０に移行し、システムダウン処理を実行する。
尚、Ｓ５２０〜Ｓ５４０からなるＳ５５０の処理が、図３のソフト処理（Ｓ１２０の処理）に対応する。
【０１４７】
ところで、アプリケーションの種類によっては、正常側のフェールセーフ値、或いは異常側の異常値が、フラグ情報として、「１」のみで表されたり、或いは「０」のみで表されたりする。この点、本実施形態（及び変形例）においては、固定データは、その半分が「１」で構成され、残り半分が「０」で構成され、「１」と「０」を同じ割合づつ含んでいる。そして、上記実施形態でも説明したように、例えば、固定データのうち「１」のみから構成される部分のデータ、及び固定データのうち「０」のみから構成される部分のデータ、の何れかが読み出されるように構成できる。このため、フェールセーフ値が「１」のみで表されるアプリケーション、フェールセーフ値が「０」のみで表されるアプリケーションの何れにも対応できる。
［第２実施形態］
次に、第２実施形態として、マイクロコンピュータ１００において浮動小数点数の計算が実行される場合について説明する。本第２実施形態において、マイクロコンピュータ１００のハード構成は第１実施形態と同様とする。
【０１４８】
浮動小数点数の計算において、数値は、±ａ×２b、というように表される。「ａ」は仮数、「ｂ」は指数である。また、２は基数である。
１０進数で例を挙げる。１０進数で０．００２１という数値は、０．２１×１０-2と表すことができるが、この場合において、０．２１の２１の部分を仮数と言い、１０-2の−２を指数と言う。基数は１０である。尚、０．００２１を０．２１×１０-2の形式で表すことを正規化と言う。
【０１４９】
浮動小数点数の計算のための標準規格としてＩＥＥＥ７５４があり、マイクロコンピュータ１００のＣＰＵ１１０においてその標準規格が適用されている。ＩＥＥＥ７５４では、浮動小数点数のデータの表現形式として、例えば、単精度型（３２ビット）、倍精度型（６４ビット）、が規定されている。
【０１５０】
単精度型のデータ及び倍精度型のデータの何れも、符号部、指数部、仮数部の順で構成される。単精度型では、符号部は１ビット、指数部は８ビット、仮数部は２３ビットである。倍精度型では、符号部は１ビット、指数部は１１ビット、仮数部は５２ビットである。
【０１５１】
指数部は、指数＋バイアスの値をとる。
単精度型の場合、指数部は０〜２５５の値をとり、バイアスは１２７である。つまり、単精度型においては、指数は、−１２７〜１２８の値をとる。一方、倍精度型の場合、指数部は０〜２０４７の値をとり、バイアスは１０２３である。つまり、倍精度型においては、指数は、−１０２３〜１０２４の値をとる。
【０１５２】
仮数部は、１以下の２進小数で表される。まず、前提として、仮数は、１の位が１となるように表される。例えば１．１０１０・・・（２進数）のように表される。そして、仮数部は、仮数の１の位の１を取り除いた数値が左詰に入り、余ったビットは全て０で埋められた形で表される。仮数が１．１０１０である上記の例では、仮数部は、小数点以下の１０１０の後ろに０を加え、１０１０００００・・・というように表される。
【０１５３】
ここで、一例として、１０進数の−５８．８７５を浮動小数点数形式で表すことを考える。尚、単精度型（３２ビット）で表すものとする。
（１）まず、−５８．８７５を、符号を除いて２進数に変換する。
【０１５４】
１０進数の５８．８７５は２進数で１１１０１０．１１１と表される。
（２）次に、１１１０１０．１１１を正規化する。
１１１０１０．１１１は１１１０１０．１１１×２0であり、即ち１．１１０１０１１１×２5となる。
（３）符号部（１ビット）を算出する。
【０１５５】
−５８．８７５の符号は−であり、符号部は１となる。尚、符号部において、１は負数を表し、０は正数を表す。
（４）指数部（８ビット）を算出する。
【０１５６】
指数は、２5の５である。５は、２進数で０００００１０１である。これに、バイアス０１１１１１１１（１０進数で１２７）を加算し、指数部は１００００１００と表される。
（５）仮数部（２３ビット）を算出する。
【０１５７】
仮数は、１．１１０１０１１１×２5の１．１１０１０１１１の部分である。そして、仮数部は、仮数の小数点以下の１１０１０１１１に、さらにその後ろに０を挿入した値となる。つまり、仮数部は、１１０１０１１１０００００００００００００００となる。
（６）以上より、１０進数の−５８．８７５を浮動小数点数形式で表すと、１  １００００１００  １１０１０１１１０００００００００００００００  となる。
【０１５８】
ところで、ＩＥＥＥ７５４では、表現可能なデータは、ゼロ（０）、正規化数、非正規化数、無限大、非数（ＮａＮ：Ｎｏｔ  ａ  Ｎｕｍｂｅｒ）の５種類に分類される。
指数部の値が０、仮数部の値が０なら、ゼロ（０）である。
【０１５９】
指数部の値が１〜２５４なら、仮数部の値にかかわらず、正規化数である。
指数部の値が０で、仮数部の値が０以外なら、非正規化数である。
指数部の値が２５５、仮数部の値が０なら、無限大である。尚、符号部の値が０なら正の無限大となり、符号部の値が１なら負の無限大となる。
【０１６０】
指数部の値が２５５で、仮数部の値が０以外なら、非数（ＮａＮ）となる。例えば、ある数値を０で割った結果や、−１の平方根は非数（ＮａＮ）である。
図６に、本実施形態における固定データの構成を示すが、固定データは、前述したように、「０ｘＦＦＦＦ００００」で表される。この固定データを浮動小数点数形式で解釈すると、ビット３１が符号部となり、ビット３０〜２３が指数部となり、ビット２２〜０が仮数部となる。
【０１６１】
固定データの「０ｘＦＦＦＦ００００」は、２進数で「１１１１１１１１１１１１１１１１００００００００００００００００」であり、指数部（ビット３０〜２３）の値は２５５（１０進数）である。また、仮数部（ビット２２〜０）の値は８３２３０７２（１０進数）、即ち０以外の値である。
【０１６２】
そうすると、本実施形態の固定データは、ＩＥＥＥ７５４によれば、浮動小数点数形式において非数として扱われる。
本実施形態において、非数が結果として与えられた場合、図７に示すような形態で処理が実行される。図７の処理は、具体的に、マイクロコンピュータ１００のＣＰＵ１１０が実行するものである。
【０１６３】
図７では、処理Ａ〜Ｃを順次実行することを前提とする。規定のタイミングになって処理が開始されると、まず、Ｓ４１０において処理Ａが実行され、続いて、Ｓ４２０において処理Ｂが実行される。次に、Ｓ４３０において変数Ａを使用する演算を実行するものとし、この変数Ａが、ゼロ（０）、正規化数、非正規化数であれば、そのまま変数Ａを使用する演算が実行される。そしてその後、Ｓ４４０で処理Ｃが実行され、一連の処理が終了する。
【０１６４】
一方、Ｓ４３０における変数Ａが非数であった場合、例外処理（割込処理）が発生する。この場合、その例外処理（割込処理）に移行し、Ｓ５１０にて、フェールセーフ処理が実行される。フェールセーフ処理は、例外処理（割込処理）が中止されるまで継続して実行される。
【０１６５】
このように、浮動小数点数形式の演算において、固定データ「０ｘＦＦＦＦ００００」は非数として扱われ、ＲＡＭ１１２から読み出されたデータに誤りが生じてその固定データが演算に用いられた場合、例外処理（割込処理）が発生してフェールセーフ処理が実行されるようになる。このため、マイクロコンピュータ１００、或いはマイクロコンピュータ１００が搭載されたシステムが誤動作したり異常動作したりすることを防止できる。
【０１６６】
以上、本発明の一実施形態について説明したが、本発明は上記実施形態に限定されるものではなく、本発明の技術範囲内において種々の形態をとることができる。
本実施形態において、固定データは一例であり、上記実施形態における値に何ら限定されるものではない。
【０１６７】
また、上記実施形態において、図３及び図５に示す定義付けは一例であり、定義付けは任意に行うことができる。
また、上記実施形態において、図１０の演算式におけるチェック行列は一例であり、その図１０のチェック行列に何ら限定されるものではない。
【０１６８】
また、上記実施形態において、エラーフラグがセットされるレジスタは１ビットから構成されても良い。つまり、ＲＡＭ１１２から読み出されたデータに誤りが生じていた場合に、その誤りの箇所にかかわらず同じエラーフラグがセットされるようにしても良い。そして、この場合、その誤りの箇所、及び読み出し対象のデータのバイト数にかかわらず、同じ固定データが読み出されるようにし、その読み出された固定データが正常値として認識されるように構成すれば良い。
【０１６９】
また、上記実施形態において、ＲＡＭ１１２から読み出されたデータについて、誤りが生じた箇所がアドレス単位で検出されるようになっているが、ビット単位で検出されるように構成しても良い。例えば、アドレス０から読み出された１バイト（８ビット）のデータについて、誤りが生じた箇所がビット０〜ビット７の何れであるかが検出されるように構成しても良い。
【０１７０】
また、上記変形例において、ＲＡＭ１１２にて低重要データ、及び高重要データに応じて記憶領域が分けられることで、その低重要データ及び高重要データのそれぞれと、固定データとの対応関係がとられるようになっているが、これは一例であり、対応関係をとるにあたっては種々の方法をとることができる。
【符号の説明】
【０１７１】
１０…データ領域、１２…冗長データ領域、１４…デコーダ、１６…セレクタ、１７…メモリ、１００…マイクロコンピュータ、１１０…ＣＰＵ、１１２…ＲＡＭ、１１４…バックアップＲＡＭ１１４、１１６…ＲＯＭ、１２０，１２２，１２４，１２６…周辺機能回路、１３０…デコーダ、１３２…エンコーダ、２０１…データ領域、２０２…冗長データ領域。
【図１】
2010102686.tif 000003
【図２】
2010102686.tif 000004
【図３】
2010102686.tif 000005
【図５】
2010102686.tif 000006
【図６】
2010102686.tif 000007
【図７】
2010102686.tif 000008
【図８】
2010102686.tif 000009
【図９】
2010102686.tif 000010
【図１０】
2010102686.tif 000011
【図１１】
2010102686.tif 000012
【図１２】
2010102686.tif 000013
【図１３】
2010102686.tif 000014
【図１４】
2010102686.tif 000015
【図１５】
2010102686.tif 000016
【図１６】
2010102686.tif 000017
【図１７】
2010102686.tif 000018
【図４】
2010102686.tif 000019