(57)【特許請求の範囲】
【請求項１】
不揮発性メモリ（２６）を有し、前記不揮発性メモリにアクセスするメイン処理を行っている最中に発生するＥＣＣエラーを検出するＥＣＣエラー検出と、前記ＥＣＣエラーの発生時に割り込み処理を行う割り込み処理と、を実行可能なマイクロコントローラ（１０）にであって、
前記割り込み処理の中で、前記ＥＣＣエラー検出によって検出されたＥＣＣエラーの発生原因となった命令を特定し、この特定した命令をスキップして次の命令を実行するようにプログラムカウンタを変更する変更処理を実行し、
前記変更処理後の前記メイン処理において読み出し値が読み出せるように、前記読み出し値の格納先に異常値を格納する異常値格納処理を実行する、ことを特徴とするマイクロコントローラ。
【請求項２】
前記異常値格納処理では、前記変更処理後において前記メイン処理に戻った場合に、前記ＥＣＣエラーが起こっていたか否かを判断するＥＣＣエラー判断を実行し、前記ＥＣＣエラーが起こっていたと判断すると前記格納先に異常値を格納することを特徴とする、請求項１に記載のマイクロコントローラ。
【請求項３】
前記異常値格納処理では、前記変更処理後に前記メイン処理に戻り前記格納先から前記読み出し値を読み出す前に、前記格納先に初期値を異常値として格納することを特徴とする、請求項１に記載のマイクロコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、車両の制御装置として用いることが可能なマイクロコントローラに関する。
【背景技術】
【０００２】
車両の制御装置として用いることが可能なマイクロコントローラとして、例えば下記特許文献１に記載のマイクロコントローラが知られている。このマイクロコントローラは、ＣＰＵと、不揮発性メモリと、揮発性メモリと、を備えている。不揮発性メモリは、ビット誤り検出機能付のメモリモジュールである。このメモリモジュールは、エラー訂正コードＥＣＣ（冗長化データ）を持ち、１ビットの誤りに対しては誤り検出と誤り訂正との双方が可能である。一方、２ビット以上の誤りに対しては、誤り検出はできるものの、誤り訂正を行うことはできないものである。以降、この訂正不能な誤りを検出したことをＥＣＣエラーと称するものとする。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１４−３５７２９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
不揮発性メモリに格納されるデータは、長期にわたって保持されるべきデータであることが多く、ＥＣＣエラーが発生した場合には重大なハードエラーとして考えるのが一般的である。ＥＣＣエラーが発生すると、割り込みハンドラ内でのリセットや、不揮発性メモリの消去を行うことが一般的である。そのため、ＥＣＣエラーが発生すると、マイクロコントローラはデータ処理をそのまま継続することができない。
【０００５】
ところで、ＥＣＣエラーの発生原因としては、不揮発性メモリの故障に加えて、不揮発性メモリへのデータ書き込み中又はデータ消去中の電源遮断により発生する不完全なデータ領域へのアクセスに起因するものがある。マイクロコントローラを自動車のＥＣＵとして用いた場合、キー操作に応じて電源が遮断される。そして、そのキー操作はユーザーが任意に行うことができるので、不揮発性メモリへのデータ書き込み中又はデータ消去中に電源遮断が発生することは通常発生し得るものである。このような通常発生し得る電源遮断に対して、従来のマイクロコントローラはリセットを行ってしまうため動作の継続ができず、自動車に搭載されるＥＣＵとしては好適なものではなかった。
【０００６】
本発明はこのような課題に鑑みてなされたものであり、その目的は、ＥＣＣエラーが発生しても動作を継続し、ＥＣＣエラーが発生した箇所以外からはデータを読み出すことを可能とするマイクロコントローラを提供することにある。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、本発明に係るマイクロコントローラは、不揮発性メモリ（２６）を有し、前記不揮発性メモリにアクセスするメイン処理を行っている最中に発生するＥＣＣエラーを検出するＥＣＣエラー検出と、前記ＥＣＣエラーの発生時に割り込み処理を行う割り込み処理と、を実行可能なマイクロコントローラ（１０）であって、前記割り込み処理の中で、前記ＥＣＣエラー検出によって検出されたＥＣＣエラーの発生原因となった命令を特定し、この特定した命令をスキップして次の命令を実行するようにプログラムカウンタを変更する変更処理を実行し、前記変更処理後の前記メイン処理において読み出し値が読み出せるように、前記読み出し値の格納先に異常値を格納する異常値格納処理を実行する。
【０００８】
本発明によれば、メイン処理を行っている最中にＥＣＣエラーが発生すると、割り込み処理の中で変更処理を実行するので、ＥＣＣエラーの発生原因となった命令をスキップして次の命令を実行することができ、動作の継続を確保することができる。また、読み出し値の格納先に異常値を格納するので、ＥＣＣエラーが発生しても異常値を読み出して処理することが可能となり、ＥＣＣエラーが発生した箇所以外からは通常通りデータを読み出すことが可能となる。
【発明の効果】
【０００９】
本発明によれば、ＥＣＣエラーが発生しても動作を継続し、ＥＣＣエラーが発生した箇所以外からはデータを読み出すことを可能とするマイクロコントローラを提供することができる。
【図面の簡単な説明】
【００１０】
【図１】本実施形態に係るマイクロコントローラの機能的な構成を示すブロック図である。
【図２】図１に示すマイクロコントローラの動作の一例を説明するためのフローチャートである。
【図３】図２に対応させたシーケンスチャートである。
【図４】図１に示すマイクロコントローラの動作の他の例を説明するためのフローチャートである。
【図５】図４に対応させたシーケンスチャートである。
【発明を実施するための形態】
【００１１】
以下、添付図面を参照しながら本発明の実施形態について説明する。説明の理解を容易にするため、各図面において同一の構成要素に対しては可能な限り同一の符号を付して、重複する説明は省略する。
【００１２】
本発明の実施形態に係るマイクロコントローラについて、図１を参照しながら説明する。図１に示されるように、マイクロコントローラ１０は、ＣＰＵ２０と、割り込みコントローラ２１と、Ｉ／Ｏポート２２と、ＲＡＭ２３と、ＲＯＭ２４と、不揮発性メモリコントローラ２５と、不揮発性メモリ２６と、電源２７と、を備えている。
【００１３】
電源２７は、ＣＰＵ２０、割り込みコントローラ２１、Ｉ／Ｏポート２２、ＲＡＭ２３、ＲＯＭ２４、不揮発性メモリコントローラ２５、及び不揮発性メモリ２６を動作させるために電力を供給する電力源である。ＣＰＵ２０は、割り込みコントローラ２１、Ｉ／Ｏポート２２、ＲＡＭ２３、ＲＯＭ２４、及び不揮発性メモリコントローラ２５に、駆動信号を出力して各部を動作させる中央演算装置である。
【００１４】
Ｉ／Ｏポート２２は、外部とのデータのやり取りを行うためのインターフェイス回路である。ＲＡＭ２３は、データを書き込み、データを読み取ることが可能なメモリである。
【００１５】
ＲＯＭ２４は、データの読み取りのみが可能なメモリである。ＲＯＭ２４には、不揮発性メモリドライバソフト２４１と、アプリケーションソフト２４２が格納されている。ＣＰＵ２０は、不揮発性メモリドライバソフト２４１及びアプリケーションソフト２４２を読み出して、後述するような動作を行うものである。
【００１６】
不揮発性メモリコントローラ２５は、不揮発性メモリ２６へのデータの書き込みや、不揮発性メモリ２６からのデータの消去や、不揮発性メモリ２６からのデータの読み出しを行うものである。不揮発性メモリコントローラ２５は、ＥＣＣモジュール２５１と、ＥＣＣエラーの割り込み要因ビット２５２とを有している。ＥＣＣモジュールは、ＥＣＣエラーの検出を行うモジュールである。ＥＣＣエラー発生時、不揮発性メモリコントローラ２５は、ＥＣＣエラーの割り込み要因ビット２５２をＯＮにセットする。
【００１７】
続いて、マイクロコントローラ１０の動作について、図２及び図３を参照しながら説明する。図２に示されるように、メイン処理として、不揮発性メモリ２６に格納されているデータへのアクセス処理が開始される（ステップＳ０１）。
【００１８】
ステップＳ０１に続くステップＳ０２では、ＥＣＣエラー発生の有無を示すフラグをＯＦＦにセットする。このように、フラグを用いてＥＣＣエラーの発生有無を判断しているので、例えば並行して実行される他の処理においてＥＣＣエラーが発生した場合と区別することができ、割り込み処理を確実に実行することができる。
【００１９】
ステップＳ０２に続くステップＳ０３では、不揮発性メモリ２６からデータを読み出す。この読み出し処理が通常通り実行できればステップＳ０４の処理に進む。一方、読み出し処理においてＥＣＣエラーが発生すると、割り込み処理の実行が開始される（ステップＳ１１）。この場合、割り込み発生時に、その時のプログラムカウンタの値がマイクロコントローラ１０により退避される。尚、読み出し命令の実行中に割り込みが発生しているため、プログラムカウンタは読み出し命令を指したままの状態となっている。
【００２０】
ステップＳ１１に続くステップＳ１２では、ＥＣＣエラーの割り込み要因ビットがＯＮになっているか、ＯＦＦになっているか判断する。ＥＣＣエラーの割り込み要因ビットがＯＮになっていればステップＳ１３の処理に進み、ＥＣＣエラーの割り込み要因ビットがＯＦＦになっていればステップＳ１４の処理に進む。
【００２１】
ステップＳ１４では、発生しているエラーがＥＣＣエラーではないので、エラー種別に応じた処置を行い割り込み処理を終了し、ステップＳ０４の処理に戻る。
【００２２】
ステップＳ１３では、ＥＣＣエラーが発生した読み出し命令の命令長を特定する。ステップＳ１３に続くステップＳ１５では、読み出し命令の命令長分だけ、退避されているプログラムカウンタを進める。これによって、割り込み終了後に読み出し命令をスキップした箇所（次の命令）からプログラムを実行することができる。
【００２３】
ステップＳ１５に続くステップＳ１６では、ＥＣＣエラー発生有無フラグをＯＮにセットする。ステップＳ１６に続くステップＳ１７では、ＥＣＣエラーの割り込み要因ビットをＯＦＦにセットする。
【００２４】
メイン処理に戻り、ステップＳ０４では、ＥＣＣエラー発生有無フラグを確認する。ＥＣＣエラー発生有無フラグがＯＮになっていればステップＳ０５の処理に進み、ＥＣＣエラー発生有無フラグがＯＦＦになっていれば処理を終了する。ステップＳ０５では、読み出し値の格納先に異常値をセットし、処理を終了する。
【００２５】
このように、割り込み処理の中で、ＥＣＣエラーの発生原因となった命令を特定し、この特定した命令をスキップしてメイン処理に戻るようにプログラムカウンタを変更する変更処理を実行するので、処理を続行することができる。何らの対策もしなければ不完全領域が解消されないまま読み出し処理が再実行されてしまい、再び割り込み処理に戻ってしまうため、無限ループに陥る。
【００２６】
また、異常値格納処理として、変更処理後においてメイン処理に戻った場合に、ＥＣＣエラーが起こっていたか否かを判断するＥＣＣエラー判断を実行し、ＥＣＣエラーが起こっていたと判断すると格納先に異常値を格納するので、読み出し値が不定となる悪影響を回避することができる。従来の技術のように、起動時に全体のチェックと不完全な領域の修復を行うことも考えられるが、起動時の負荷が高くなり時間もかかるので、素早い起動が求められるシステムの場合等は不適当である。その点、本実施形態では格納先に異常値を格納することで素早い起動性を確保している。
【００２７】
この観点からは、変更処理後のメイン処理において読み出し値が読み出せるように、読み出し値の格納先に異常値を格納する異常値格納処理を実行すればよく、必ずしも上述した方法に限られるものではない。
【００２８】
読み出し値の格納先に初期値を異常値として格納する方法について、図４及び図５を参照しながら説明する。図２に示されるように、メイン処理として、不揮発性メモリ２６に格納されているデータへのアクセス処理が開始される（ステップＳ２１）。
【００２９】
ステップＳ２１に続くステップＳ２２では、読み出し値の格納先に初期値を異常値とみなして格納する。このように初期値を異常値として格納すると、不揮発性メモリ２６からの読み出しが実行されなかった場合には、初期値が格納されたままとなる。
【００３０】
ステップＳ２２に続くステップＳ２３では、不揮発性メモリ２６からデータを読み出す。この読み出し処理が通常通り実行できれば処理を終了する。一方、読み出し処理においてＥＣＣエラーが発生すると、割り込み処理の実行が開始される（ステップＳ３１）。この場合、割り込み発生時に、その時のプログラムカウンタの値がマイクロコントローラ１０により退避される。尚、読み出し命令の実行中に割り込みが発生しているため、プログラムカウンタは読み出し命令を指したままの状態となっている。
【００３１】
ステップＳ３１に続くステップＳ３２では、ＥＣＣエラーの割り込み要因ビットがＯＮになっているか、ＯＦＦになっているか判断する。ＥＣＣエラーの割り込み要因ビットがＯＮになっていればステップＳ３３の処理に進み、ＥＣＣエラーの割り込み要因ビットがＯＦＦになっていればステップＳ３４の処理に進む。
【００３２】
ステップＳ３４では、発生しているエラーがＥＣＣエラーではないので、エラー種別に応じた処置を行い割り込み処理を終了し、メイン処理も終了する。
【００３３】
ステップＳ３３では、ＥＣＣエラーが発生した読み出し命令の命令長を特定する。ステップＳ３３に続くステップＳ３５では、読み出し命令の命令長分だけ、退避されているプログラムカウンタを進める。これによって、割り込み終了後に読み出し命令をスキップした箇所（次の命令）からプログラムを実行することができる。
【００３４】
ステップＳ３５に続くステップＳ３６では、ＥＣＣエラーの割り込み要因ビットをＯＦＦにセットして割り込み処理を終了し、メイン処理も終了する。
【００３５】
このようにＥＣＣエラー発生有無フラグを用いずにＥＣＣエラー発生に対応することができるので、マイクロコントローラ１０のパフォーマンスを高めることができる。しかしながら、このプログラムをＣ言語で記載した場合、コンパイラの最適化によりステップＳ２２で行った初期値の格納が削除されてしまう場合がある。この場合、その部分をアセンブリ言語で記述する方法が考えられるが、Ｃ言語で記述するよりも保守性が低くなる。この保守性低下を抑制するため、不揮発性メモリへのアクセス箇所を関数化することにより、アセンブリ言語での記述箇所を局所化することで対応することができる。しかし、メイン処理が多数繰り返されるような処理の場合は、性能低下が著しく採用することは難しい。一方、図２及び図３を参照しながらした方法では、その懸念がないので保守性と性能の面で優れている。
【符号の説明】
【００３６】
１０：マイクロコントローラ
【図１】
0006304007.tif 000002
【図２】
0006304007.tif 000003
【図３】
0006304007.tif 000004
【図４】
0006304007.tif 000005
【図５】
0006304007.tif 000006