(57)【要約】【課題】  本来実行されるべきでないプログラムが実行されていることを検出した場合に、本来実行されるべきプログラムへ切り換えることができる情報処理装置の提供を目的とする。【解決手段】  所定プログラム以外のプログラムの実行を禁止する設定を行う初期設定処理と、前記所定プログラム以外のプログラムの実行を検出した場合に、実行するプログラムを前記所定プログラムに切り換えるプログラム切換処理と、を実行するように構成された情報処理装置。【選択図】図１
2014085770.tif 000002
【特許請求の範囲】
【請求項１】
所定プログラム以外のプログラムの実行を禁止する設定を行う初期設定処理と、
前記所定プログラム以外のプログラムの実行を検出した場合に、前記初期設定処理により設定された設定情報に基づいて、実行するプログラムを前記所定プログラムに切り換えるプログラム切換処理と、を実行するように構成された情報処理装置。
【請求項２】
メモリ保護部を備え、
前記所定プログラム以外のプログラムの実行は、前記所定プログラム以外のプログラムに係るメモリ領域へのアクセスに基づいて、前記メモリ保護部により検出する、請求項１に記載の情報処理装置。
【請求項３】
不揮発性メモリからなり、前記所定プログラムを含む複数のプログラムが格納された第１記憶装置と、
前記第１記憶装置と同じ不揮発性メモリ又は異なる揮発性メモリからなり、前記複数のプログラムのうちの実行すべき前記所定プログラムを決定するための情報が格納された第２記憶装置と、
メモリ保護部とを備え、
前記第２記憶装置に格納される情報に基づいて、実行するプログラムを決定し、前記決定したプログラムの実行に伴う前記第１記憶装置へのアクセス時に前記メモリ保護部においてメモリ保護違反が発生した場合に、前記決定した実行するプログラムを、前記所定プログラムに切り換える、請求項１又は２に記載の情報処理装置。
【請求項４】
前記プログラム切換処理は、メモリ保護違反の発生時に割り込み処理として実行し、前記初期設定処理により前記メモリ保護部において設定された実行許可領域を参照することで、前記所定プログラムへの切換を実現する、請求項２又は３に記載の情報処理装置。
【請求項５】
前記プログラム切換処理は、メモリ保護違反の発生時に割り込み処理として実行し、メモリ保護違反の発生箇所を判断することで、前記所定プログラムへの切換を実現する、請求項２又は３に記載の情報処理装置。
【請求項６】
前記プログラム切換処理は、メモリ保護違反の発生時に割り込み処理として実行し、メモリ保護違反が発生しなくなるまでプログラムを順次切り換えることで、前記所定プログラムへの切換を実現する、請求項２又は３に記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置に関する。
【背景技術】
【０００２】
従来から、携帯可能電子装置の動作を制御するプログラムが複数のプログラムモジュールで構成されており、あるプログラムモジュールの実行を開始する前に、当該プログラムモジュールの実行可否を判断し、判断の結果、当該プログラムモジュールの実行が不可の場合は当該携帯可能電子装置の動作を停止させる技術が知られている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開2007-115187号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、車両等に実装される制御プログラムに関して、ＥＣＵのソフトウェアを例えば２ＷＤ、４ＷＤなどの制御の異なる車両に対して共通化することがある。この場合、車両情報を他のＥＣＵや車両工場のツール等から受信し、不揮発性メモリに記憶し、その値を参照して動的に動作を切り換えるロジックが組み込まれる。
【０００５】
また、一般的に、マイコンはメモリ保護機能を備え、同じマイコン上で実行される処理（タスク）毎に使用可能なメモリ領域を制限して、他の処理による予期しないメモリアクセスによる干渉を防止している。
【０００６】
しかしながら、ＥＣＵ内に記憶した情報を使って動的にソフトウェアの動作を切り換えると、メモリの破壊やノイズ等に起因して、ＥＣＵ内に記憶した情報が破壊された場合に、誤動作が発生する（例えば、本来実行されるべきでない処理が実行されうる）という問題がある。この点、動的に条件分岐等で処理を切り換えるプログラムの場合、元となる情報を書き込んだメモリ自体を多重化するなどの保護を行ったとしても、動作時に参照する際はレジスタ等の一時的なメモリを使用することになるため、ノイズ等で誤動作する可能性がある。この点、現状のメモリ保護機能は、実装されるべき処理（タスク）間の干渉を防止しているが、本来実行されるべきでない処理の実行までは防止することができない。
【０００７】
そこで、本発明は、本来実行されるべきでないプログラムが実行されていることを検出した場合に、本来実行されるべきプログラムへ切り換えることができる情報処理装置の提供を目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するため、本発明の一局面によれば、所定プログラム以外のプログラムの実行を禁止する設定を行う初期設定処理と、
前記所定プログラム以外のプログラムの実行を検出した場合に、実行するプログラムを前記所定プログラムに切り換えるプログラム切換処理と、を実行するように構成された情報処理装置が提供される。
【発明の効果】
【０００９】
本発明によれば、本来実行されるべきでないプログラムが実行されていることを検出した場合に、本来実行されるべきプログラムへ切り換えることができる情報処理装置が得られる。
【図面の簡単な説明】
【００１０】
【図１】車両制御装置１００の一例を示す構成図である。
【図２】ＥＣＵ１０（マイコン２０）におけるイニシャル処理の一例を示すフローチャートである。
【図３】ＥＣＵ１０（マイコン２０）におけるメイン処理の一例を示すフローチャートである。
【図４】ＥＣＵ１０（マイコン２０）におけるメモリ保護違反割り込み処理（プログラム切換処理）の一例を示すフローチャートである。
【図５】ＥＣＵ１０（マイコン２０）におけるメモリ保護違反割り込み処理（プログラム切換処理）の他の一例を示すフローチャートである。
【図６】ＥＣＵ１０（マイコン２０）におけるメモリ保護違反割り込み処理（プログラム切換処理）の他の一例を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下、図面を参照して、本発明を実施するための最良の形態の説明を行う。
【００１２】
図１は、車両制御装置１００の一例を示す構成図である。車両制御装置１００は、ＥＣＵ１０を含む。ＥＣＵ１０は、任意の車両制御を行うＥＣＵであってよい。例えば、ＥＣＵ１０は、車両の駆動力制御（エンジン制御やトランスミッション制御）を行うＥＣＵであってよい。
【００１３】
ＥＣＵ１０は、例えばCAN（controller area network）などの適切なバス１４を介して、車両内の各種の他のＥＣＵ１２に接続されてよい。他のＥＣＵ１２は、例えば車両のボデー系の電装品を制御するボデーＥＣＵ等を含んでよい。
【００１４】
ＥＣＵ１０のハードウェア構成自体は、任意であり、例えば図１に示すように、例えばＣＡＮドライバ１２を介して、バス１４に接続されるマイコン２０を備える。マイコン２０は、ＣＰＵ２２と、メモリ保護部（保護機能）２４と、フラッシュメモリ２６と、ＲＡＭ２８とを含む。
【００１５】
ここで、本実施例では、車両等に実装される制御プログラムに関して、ＥＣＵのソフトウェアを例えば２ＷＤ、４ＷＤなどの制御の異なる車両に対して共通化しているものとする。即ち、制御プログラムは、複数のバリエーションのプログラム（対象となる制御自体は同じであるが、制御内容が異なるプログラム）を含む。ここでは、制御プログラムは、例えば仕向け国「欧州」向けのバリエーションＡのためのプログラム（バリエーションＡ用プログラム）と、例えば仕向け国「日本」向けのバリエーションＢのためのプログラム（バリエーションＢ用プログラム）とを含む。尚、バリエーションＡ用プログラムと、バリエーションＢ用プログラムとは、対象となる制御自体は同じであるが、制御内容（要求値の算出ロジックなどの制御ロジック）が異なる。例えば、対象となる制御自体は、同じ駆動力制御であるが、バリエーションＡ用プログラムは、例えば２ＷＤ用に設計された駆動力制御プログラムであり、バリエーションＢ用プログラムは、例えば４ＷＤ用に設計された駆動力制御プログラムであるといった具合である。この際、２ＷＤ用に設計された駆動力制御プログラムと、４ＷＤ用に設計された駆動力制御プログラムとは、例えば、ＨＶ（ハイブリッド）制御において、各モータへの要求トルク（配分）の算出ロジックが異なる。
【００１６】
尚、車両に実装される制御プログラムは、多数存在し、それぞれが、複数のバリエーションのプログラムを含みうる。ここでは、複数のバリエーションのプログラムを含む、ある特定の１つの任意の制御プログラムを対象として説明を続ける。
【００１７】
ＣＰＵ２２は、メモリ保護部２４を介してフラッシュメモリ２６やＲＡＭ２８にアクセスし、フラッシュメモリ２６に格納された制御プログラム（バリエーションＡ用プログラム及びバリエーションＢ用プログラム）に基づく各種処理を行う。
【００１８】
メモリ保護部２４は、ある制御プログラムの実行に伴って、禁止領域として指定されたアドレス領域へのアクセス（例えばWrite/Readアクセス）が発生したこと（メモリ保護違反）を検出すると、その旨の情報（アクセス例外）を発生する。禁止領域は、例えばスーパーバイザーモード等のセキュリティ性を確保したアプリケーションにより設定（指定）されてよい。例えばバリエーションＡ用プログラムのみへのアクセスを許可し、バリエーションＢ用プログラムへのアクセスを禁止するとき、バリエーションＢ用プログラムが格納されたアドレス領域が禁止領域となる。このとき、バリエーションＡ用プログラムが格納されたアドレス領域が実行許可領域（実行許可アドレス）となる。
【００１９】
フラッシュメモリ２６は、不揮発性メモリの一例であり、他の同様の類のメモリ（例えば他のＥＥＰＲＯＭ）が使用されてもよい。フラッシュメモリ２６には、バリエーションＡ用プログラム及びバリエーションＢ用プログラムが格納される。
【００２０】
ＲＡＭ２８は、ＳＲＡＭ（Static Random Access Memory）であってよい。ＲＡＭ２８には、フラッシュメモリ２６から一時的に読み出した値等が格納される。ＲＡＭ２８には、例えば後述のバリエーション情報［ＶＡＲＩ］が格納される。
【００２１】
図２は、ＥＣＵ１０（マイコン２０）におけるイニシャル処理の一例を示すフローチャートである。
【００２２】
ステップ２００では、車両情報［ＩＮＦ］が入力される。車両情報は、例えばＣＡＮ通信等の車載ＥＣＵ間通信にて他のＥＣＵ１２（例えばボデーＥＣＵ等）から入力されてよい。この場合、車両情報は、イグニッションスイッチのオン中に定期的に受信されるデータであってよい。また、車両情報は、車両工場のツール等から受信されてもよい。車両情報は、制御プログラムのバリエーションに関する情報（即ち、当該車両に対してどのバリエーションのプログラムが実行されるべきかを示す情報）を含む。ここでは、車両情報は、バリエーションＡ用プログラム及びバリエーションＢ用プログラムのいずれが実行されるべきかを示す情報を含む。例えば、車両情報は、バリエーションＡ用プログラム及びバリエーションＢ用プログラムのいずれが実行されるべきかを間接的に示す情報として、仕向け等を示す情報であってもよい。
【００２３】
ステップ２０２では、上記ステップ２００で入力された車両情報に基づいて、バリエーション情報［ＶＡＲＩ］が確定される。即ち、上記ステップ２００で入力された車両情報に応じたバリエーション情報［ＶＡＲＩ］がＲＡＭ２８（及びフラッシュメモリ２６）に記憶される。例えば、上記ステップ２００で入力された車両情報［ＩＮＦ］が、バリエーションＡ用プログラムを指示する情報を含む場合、バリエーション情報［ＶＡＲＩ］が"Ａ"として確定され、上記ステップ２００で入力された車両情報［ＩＮＦ］が、バリエーションＢ用プログラムを指示する情報を含む場合、バリエーション情報［ＶＡＲＩ］が"Ｂ"として確定される。
【００２４】
ステップ２０４では、上記ステップ２０２で確定されたバリエーション情報［ＶＡＲＩ］に基づいて、即ち、ＲＡＭ２８（及びフラッシュメモリ２６）内に記憶されたバリエーション情報［ＶＡＲＩ］に基づいて、バリエーション情報［ＶＡＲＩ］が"Ａ"であるか否かが判定される。バリエーション情報［ＶＡＲＩ］が"Ａ"であるときは、ステップ２０６に進み、それ以外の場合は、ステップ２０８に進む。
【００２５】
ステップ２０６では、バリエーションＡ用プログラム以外の実行を禁止する設定を行う。即ち、バリエーションＢ用プログラムの実行を禁止する設定を行う。この設定は、例えば、バリエーションＡ用プログラムのみアクセスを許可し、バリエーションＢ用プログラムへのアクセスを禁止するようにユーザアプリケーション（例えばスーパーバイザーモード等のセキュリティ性を確保したアプリケーション）からマイコン２０のメモリ保護部２４のレジスタへ設定値を書き込むことで実現されてよい。
【００２６】
ステップ２０８では、上記ステップ２０２で確定されたバリエーション情報［ＶＡＲＩ］に基づいて、バリエーション情報［ＶＡＲＩ］が"Ｂ"であるか否かが判定される。バリエーション情報［ＶＡＲＩ］が"Ｂ"であるときは、ステップ２１０に進み、それ以外の場合は、そのまま終了する。尚、バリエーションＡ用プログラム及びバリエーションＢ用プログラムの２種類のバリエーションしかない場合は、ステップ２０８を省略し、ステップ２０４で否定判定されたときにステップ２１０に進むこととしてもよい。
【００２７】
ステップ２１０では、上記ステップ２０６と同様、バリエーションＢ用プログラム以外の実行を禁止する設定を行う。即ち、バリエーションＡ用プログラムの実行を禁止する設定を行う。ステップ２１０の処理が終了すると、イニシャル処理が完了となる。
【００２８】
このように図２に示すイニシャル処理によれば、通信等で入力された車両情報を用いて、該当車両では実行すべきでないプログラム領域に対して実行を禁止する設定を行うことができる。
【００２９】
図３は、ＥＣＵ１０（マイコン２０）におけるメイン処理の一例を示すフローチャートである。図３に示すメイン処理は、図２に示したイニシャル処理完了後、イグニッションスイッチがオンの間、所定周期毎に繰り返し実行されてよい。
【００３０】
ステップ３００では、ＲＡＭ２８（又はフラッシュメモリ２６）に格納されているバリエーション情報［ＶＡＲＩ］に基づいて、バリエーション情報［ＶＡＲＩ］が"Ａ"であるか否かが判定される。バリエーション情報［ＶＡＲＩ］が"Ａ"であるときは、ステップ３０２に進み、それ以外の場合は、ステップ３０４に進む。
【００３１】
ステップ３０２では、バリエーションＡ用の関数Ｆｕｎｃ＿Ａ（）が実行される。即ち、バリエーションＡ用プログラムが実行される。
【００３２】
ステップ３０４では、ＲＡＭ２８（又はフラッシュメモリ２６）に格納されているバリエーション情報［ＶＡＲＩ］に基づいて、バリエーション情報［ＶＡＲＩ］が"Ｂ"であるか否かが判定される。バリエーション情報［ＶＡＲＩ］が"Ｂ"であるときは、ステップ３０６に進み、それ以外の場合は、そのままステップ３００に戻る。尚、バリエーションＡ用プログラム及びバリエーションＢ用プログラムの２種類のバリエーションしかない場合は、ステップ３０４を省略し、ステップ３００で否定判定されたときにステップ３０６に進むこととしてもよい。
【００３３】
ステップ３０６では、バリエーションＢ用の関数Ｆｕｎｃ＿Ｂ（）が実行される。即ち、バリエーションＢ用プログラムが実行される。
【００３４】
ここで、図３に示すメイン処理の間に、ＲＡＭ２８（又はフラッシュメモリ２６）に格納されているバリエーション情報が何らかの原因（ノイズ等）で正規の値でない値に動作中に書き換わってしまった場合、ＣＰＵ２２は、その正規でない値に基づいて、本来実行すべきでない方のプログラムの係るメモリ領域（禁止領域）へアクセスを行おうとする。この際、メモリ保護部２４が機能し、当該アクセスを禁止する。従って、制御プログラムの切換（即ちバリエーションＡ用プログラム及びバリエーションＢ用プログラム間の切換）に使用している情報（又はその情報の複製）、即ちＲＡＭ２８（又はフラッシュメモリ２６）に格納されているバリエーション情報が何らかの原因で正規の値でない値に動作中に書き換わってしまった場合でも、メモリ保護部２４の設定により、本来実行すべきでない処理の動作を確実に禁止することができる。
【００３５】
図４は、ＥＣＵ１０（マイコン２０）におけるメモリ保護違反割り込み処理（プログラム切換処理）の一例を示すフローチャートである。図４に示す処理は、例えば、図３に示したメイン処理中に、メモリ保護部２４がアクセス例外を発生したときに割り込み処理として実行されてよい。
【００３６】
ステップ４００では、メモリ保護部２４の設定情報（図２のステップ２０６及びステップ２１０参照）に基づいて、実行許可領域（実行許可アドレス）がバリエーションＡ用プログラムの処理（処理Ａ）であるか否かを判定する。実行許可領域（実行許可アドレス）については、メモリ保護部２４の設定情報を参照することで実現されてよい。実行許可領域が処理Ａである場合は、ステップ４０２に進み、実行許可領域が処理Ａでない場合は、ステップ４０４に進む。
【００３７】
ステップ４０２では、バリエーションＡ用の関数Ｆｕｎｃ＿Ａ（）への復帰が実行される。即ち、バリエーションＡ用プログラムへの切換が実行される。これにより、制御プログラムの切換（即ちバリエーションＡ用プログラム及びバリエーションＢ用プログラム間の切換）に使用しているＲＡＭ２８（又はフラッシュメモリ２６）内のバリエーション情報が何らかの原因で正規の値"Ａ"でない値"Ｂ"に動作中に書き換わってしまった場合でも、本来実行されるべきバリエーションＡ用プログラムへの復帰（切換）を実現することができる。尚、この際、ＲＡＭ２８（又はフラッシュメモリ２６）内のバリエーション情報についても値"Ａ"に書換えすることとしてもよい。
【００３８】
ステップ４０４では、メモリ保護部２４の設定情報（図２のステップ２０６及びステップ２１０参照）に基づいて、実行許可領域（実行許可アドレス）がバリエーションＢ用プログラムの処理（処理Ｂ）であるか否かを判定する。実行許可領域が処理Ｂである場合は、ステップ４０６に進み、実行許可領域が処理Ｂでない場合は、そのまま終了する。尚、バリエーションＡ用プログラム及びバリエーションＢ用プログラムの２種類のバリエーションしかない場合は、ステップ４０４を省略し、ステップ４００で否定判定されたときにステップ４０６に進むこととしてもよい。
【００３９】
ステップ４０６では、バリエーションＢ用の関数Ｆｕｎｃ＿Ｂ（）への復帰が実行される。即ち、バリエーションＢ用プログラムへの切換が実行される。これにより、制御プログラムの切換（即ちバリエーションＡ用プログラム及びバリエーションＢ用プログラム間の切換）に使用しているＲＡＭ２８（又はフラッシュメモリ２６）内のバリエーション情報が何らかの原因で正規の値"Ｂ"でない値"Ａ"に動作中に書き換わってしまった場合でも、本来実行されるべきバリエーションＢ用プログラムへの復帰（切換）を実現することができる。尚、この際、ＲＡＭ２８（又はフラッシュメモリ２６）内のバリエーション情報についても値"Ｂ"に書換えすることとしてもよい。
【００４０】
図4に示す処理によれば、メモリ保護違反発生時の割り込み処理により、本来実行すべきプログラム領域を判別し、本来実行すべきプログラムの実行状態へと復帰させることができる。
【００４１】
具体的には、図３に示すメイン処理の間に、ＲＡＭ２８（又はフラッシュメモリ２６）に格納されているバリエーション情報が何らかの原因（ノイズ等）で正規の値でない値に動作中に書き換わってしまった場合、ＣＰＵ２２は、その正規でない値に基づいて、本来実行すべきでないプログラムの係るメモリ領域（禁止領域）へアクセスを行おうとする。この際、メモリ保護部２４が機能し、上述の如く本来実行すべきでない処理が禁止されると共に、割り込み処理として図４に示す処理が実行される。従って、制御プログラムの切換（即ちバリエーションＡ用プログラム及びバリエーションＢ用プログラム間の切換）に使用しているバリエーション情報が何らかの原因で正規の値でない値に動作中に書き換わることで本来実行すべきでないプログラムが実行されうる状態になった場合でも、本来実行すべきプログラムへの復帰（補正）が可能となる。
【００４２】
尚、図４に示す処理では、制御プログラムがバリエーションＡ用プログラム及びバリエーションＢ用プログラムの２種類であることを前提としているが、制御プログラムが３種類以上であっても同様である。例えば制御プログラムがバリエーションＡ用プログラム、バリエーションＢ用プログラム及びバリエーションＣ用プログラムの３種類である場合、ステップ４０４で否定判定されたときに、メモリ保護部２４の設定情報（図２のステップ２０６及びステップ２１０参照）に基づいて、実行許可領域（実行許可アドレス）がバリエーションＣ用プログラムの処理（処理Ｃ）であるか否かを判定し、実行許可領域が処理Ｃであるときは、バリエーションＣ用の関数Ｆｕｎｃ＿Ｃ（）への復帰が実行されればよい。
【００４３】
図５は、ＥＣＵ１０（マイコン２０）におけるメモリ保護違反割り込み処理（プログラム切換処理）の他の一例を示すフローチャートである。図５に示す処理は、例えば、図３に示したメイン処理中に、メモリ保護部２４がアクセス例外を発生したときに割り込み処理として実行されてよい。
【００４４】
ステップ５００では、メモリ保護違反の違反発生箇所がバリエーションＡ用プログラムの処理（処理Ａ）であるか否かを判定する。例えば、メモリ保護違反発生時のプログラムカウンタの値（アドレス）を参照し、そのプログラムカウンタの値に対応する処理（タスク）がバリエーションＡ用プログラムの処理（処理Ａ）であるか否かを判定してもよい。尚、この場合も、メモリ保護違反は、メモリ保護部２４の設定情報（図２のステップ２０６及びステップ２１０参照）に基づいて発生されるので、メモリ保護違反の違反発生箇所は、メモリ保護部２４の設定情報に基づいて判断されていることになる。違反発生箇所が処理Ａである場合は、ステップ５０２に進み、違反発生箇所が処理Ａでない場合は、ステップ５０４に進む。
【００４５】
ステップ５０２では、バリエーションＢ用の関数Ｆｕｎｃ＿Ｂ（）への復帰が実行される。即ち、バリエーションＢ用プログラムへの切換が実行される。これにより、制御プログラムの切換（即ちバリエーションＡ用プログラム及びバリエーションＢ用プログラム間の切換）に使用しているＲＡＭ２８（又はフラッシュメモリ２６）内のバリエーション情報が何らかの原因で正規の値"Ｂ"でない値"Ａ"に動作中に書き換わってしまった場合でも、本来実行されるべきバリエーションＢ用プログラムへの復帰（切換）を実現することができる。尚、この際、ＲＡＭ２８（又はフラッシュメモリ２６）内のバリエーション情報についても値"Ｂ"に書換えすることとしてもよい。
【００４６】
ステップ５０４では、メモリ保護違反の違反発生箇所がバリエーションＢ用プログラムの処理（処理Ｂ）であるか否かを判定する。違反発生箇所が処理Ｂである場合は、ステップ５０６に進み、違反発生箇所が処理Ｂでない場合は、そのまま終了する。尚、バリエーションＡ用プログラム及びバリエーションＢ用プログラムの２種類のバリエーションしかない場合は、ステップ５０４を省略し、ステップ５００で否定判定されたときにステップ５０６に進むこととしてもよい。
【００４７】
ステップ５０６では、バリエーションＡ用の関数Ｆｕｎｃ＿Ａ（）への復帰が実行される。即ち、バリエーションＡ用プログラムへの切換が実行される。これにより、制御プログラムの切換（即ちバリエーションＡ用プログラム及びバリエーションＢ用プログラム間の切換）に使用しているＲＡＭ２８（又はフラッシュメモリ２６）内のバリエーション情報が何らかの原因で正規の値"Ａ"でない値"Ｂ"に動作中に書き換わってしまった場合でも、本来実行されるべきバリエーションＡ用プログラムへの復帰（切換）を実現することができる。尚、この際、ＲＡＭ２８（又はフラッシュメモリ２６）内のバリエーション情報についても値"Ａ"に書換えすることとしてもよい。
【００４８】
図５に示す処理によれば、同様に、メモリ保護違反発生時の割り込み処理により、メモリ保護違反が発生しないプログラムの実行状態、即ち本来実行すべきプログラムの実行状態へと復帰させることができる。
【００４９】
具体的には、図３に示すメイン処理の間に、ＲＡＭ２８（又はフラッシュメモリ２６）に格納されているバリエーション情報が何らかの原因（ノイズ等）で正規の値でない値に動作中に書き換わってしまった場合、ＣＰＵ２２は、その正規でない値に基づいて、本来実行すべきでないプログラムの係るメモリ領域（禁止領域）へアクセスを行おうとする。この際、メモリ保護部２４が機能し、上述の如く本来実行すべきでない処理が禁止されると共に、割り込み処理として図５に示す処理が実行される。これにより、制御プログラムの切換（即ちバリエーションＡ用プログラム及びバリエーションＢ用プログラム間の切換）に使用しているバリエーション情報が何らかの原因で正規の値でない値に動作中に書き換わることで本来実行すべきでないプログラムが実行されうる状態になった場合でも、本来実行すべきプログラムへの復帰（補正）が可能となる。
【００５０】
尚、図５に示す処理では、制御プログラムがバリエーションＡ用プログラム及びバリエーションＢ用プログラムの２種類であることを前提としているが、制御プログラムが３種類以上であっても同様である。例えば、制御プログラムがバリエーションＡ用プログラム、バリエーションＢ用プログラム、バリエーションＣ用プログラム及びバリエーションＤ用プログラムの４種類である場合、以下の図６に示すようなメモリ保護違反割り込み処理が実行されてもよい。
【００５１】
図６は、ＥＣＵ１０（マイコン２０）におけるメモリ保護違反割り込み処理（プログラム切換処理）の他の一例を示すフローチャートである。図６に示す処理は、例えば、図３に示したメイン処理中に、メモリ保護部２４がアクセス例外を発生したときに割り込み処理として実行されてよい。
【００５２】
ステップ６００では、メモリ保護違反の違反発生箇所がバリエーションＡ用プログラムの処理（処理Ａ）であるか否かを判定する。尚、メモリ保護違反の違反発生箇所は、メモリ保護部２４の設定情報（図２のステップ２０６及びステップ２１０参照）に基づいて判断される。違反発生箇所が処理Ａである場合は、ステップ６０２に進み、違反発生箇所が処理Ａでない場合は、ステップ６０４に進む。
【００５３】
ステップ６０２では、バリエーションＢ用の関数Ｆｕｎｃ＿Ｂ（）への変更が実行される。即ち、バリエーションＢ用プログラムへの切換が実行される。これにより、制御プログラムの切換に使用しているＲＡＭ２８（又はフラッシュメモリ２６）内のバリエーション情報が何らかの原因で正規の値"Ｂ"でない値に動作中に書き換わってしまった場合でも、本来実行されるべきバリエーションＢ用プログラムへの復帰（切換）を実現することができる。尚、この際、ＲＡＭ２８（又はフラッシュメモリ２６）内のバリエーション情報についても値"Ｂ"に書換えすることとしてもよい。ここで、正規の値が"Ｂ"でないときは（例えば正規の値が"Ｄ"のとき）、バリエーションＢ用の関数Ｆｕｎｃ＿Ｂ（）への変更後、再び、メモリ保護部２４からアクセス例外が発生し、図６のメモリ保護違反割り込み処理が再度実行されることになる。この場合、後述のステップ６０４で肯定判定されることになる。
【００５４】
ステップ６０４では、メモリ保護違反の違反発生箇所がバリエーションＢ用プログラムの処理（処理Ｂ）であるか否かを判定する。違反発生箇所が処理Ｂである場合は、ステップ６０６に進み、違反発生箇所が処理Ｂでない場合は、ステップ６０８に進む。
【００５５】
ステップ６０６では、バリエーションＣ用の関数Ｆｕｎｃ＿Ｃ（）への変更が実行される。即ち、バリエーションＣ用プログラムへの切換が実行される。これにより、制御プログラムの切換に使用しているＲＡＭ２８（又はフラッシュメモリ２６）内のバリエーション情報が何らかの原因で正規の値"Ｃ"でない値に動作中に書き換わってしまった場合でも、本来実行されるべきバリエーションＣ用プログラムへの復帰（切換）を実現することができる。尚、この際、ＲＡＭ２８（又はフラッシュメモリ２６）内のバリエーション情報についても値"Ｃ"に書換えすることとしてもよい。ここで、正規の値が"Ｃ"でないときは（例えば正規の値が"Ｄ"のとき）、バリエーションＣ用の関数Ｆｕｎｃ＿Ｃ（）への変更後、再び、メモリ保護部２４からアクセス例外が発生し、図６のメモリ保護違反割り込み処理が再度実行されることになる。この場合、後述のステップ６０８で肯定判定されることになる。
【００５６】
ステップ６０８では、メモリ保護違反の違反発生箇所がバリエーションＣ用プログラムの処理（処理Ｃ）であるか否かを判定する。違反発生箇所が処理Ｃである場合は、ステップ６１０に進み、違反発生箇所が処理Ｃでない場合は、ステップ６１２に進む。
【００５７】
ステップ６１０では、バリエーションＤ用の関数Ｆｕｎｃ＿Ｄ（）への変更が実行される。即ち、バリエーションＤ用プログラムへの切換が実行される。これにより、制御プログラムの切換に使用しているＲＡＭ２８（又はフラッシュメモリ２６）内のバリエーション情報が何らかの原因で正規の値"Ｄ"でない値に動作中に書き換わってしまった場合でも、本来実行されるべきバリエーションＤ用プログラムへの復帰（切換）を実現することができる。尚、この際、ＲＡＭ２８（又はフラッシュメモリ２６）内のバリエーション情報についても値"Ｄ"に書換えすることとしてもよい。ここで、正規の値が"Ｄ"でないときは（例えば正規の値が"Ａ"のとき）、バリエーションＤ用の関数Ｆｕｎｃ＿Ｄ（）への変更後、再び、メモリ保護部２４からアクセス例外が発生し、図６のメモリ保護違反割り込み処理が再度実行されることになる。
【００５８】
ステップ６１２では、バリエーションＡ用の関数Ｆｕｎｃ＿Ａ（）への変更が実行される。即ち、バリエーションＡ用プログラムへの切換が実行される。これにより、制御プログラムの切換に使用しているＲＡＭ２８（又はフラッシュメモリ２６）内のバリエーション情報が何らかの原因で正規の値"Ａ"でない値に動作中に書き換わってしまった場合でも、本来実行されるべきバリエーションＡ用プログラムへの復帰（切換）を実現することができる。
【００５９】
このように図６に示す処理によれば、メモリ保護違反が発生する毎に、メモリ保護違反が発生しなくなるまで順次、制御プログラムが切り換えられる。これにより、制御プログラムの切換（即ちバリエーションＡ用プログラム、バリエーションＢ用プログラム、バリエーションＣ用プログラム、バリエーションＤ用プログラム間の切換）に使用しているバリエーション情報が何らかの原因で正規の値でない値に動作中に書き換わり、本来実行すべきでないプログラムが実行されうる状態になった場合でも、本来実行すべきプログラムへの復帰（補正）が可能となる。
【００６０】
例えば、本来実行すべきプログラムがバリエーションＡ用プログラムであるが（即ちバリエーション情報の正規の値が"Ａ"であるが）、何らかの原因でバリエーション情報の値が"Ｄ"に書き換わった場合を想定する。この場合、ステップ６００、ステップ６０４、ステップ６０８でそれぞれ否定判定され、ステップ６１２でバリエーションＡ用の関数Ｆｕｎｃ＿Ａ（）へ変更されることになる。即ち、本来実行すべきバリエーションＡ用プログラムへの復帰（補正）が実現される。
【００６１】
また、例えば、本来実行すべきプログラムがバリエーションＤ用プログラムであるが（即ちバリエーション情報の正規の値が"Ｄ"であるが）、何らかの原因でバリエーション情報の値が"Ａ"に書き換わった場合を想定する。この場合、先ず、ステップ６００で肯定判定され、ステップ６０２でバリエーションＢ用の関数Ｆｕｎｃ＿Ｂ（）へ変更されることになる。この場合、バリエーションＢ用の関数Ｆｕｎｃ＿Ｂ（）への変更後、再び、メモリ保護部２４からアクセス例外が発生し、図６のメモリ保護違反割り込み処理が再度実行されることになる。次は、ステップ６０４で肯定判定され、ステップ６０６でバリエーションＣ用の関数Ｆｕｎｃ＿Ｃ（）へ変更されることになる。この場合、バリエーションＣ用の関数Ｆｕｎｃ＿Ｃ（）への変更後、再び、メモリ保護部２４からアクセス例外が発生し、図６のメモリ保護違反割り込み処理が再度実行されることになる。次は、ステップ６０８で肯定判定され、ステップ６１０でバリエーションＤ用の関数Ｆｕｎｃ＿Ｄ（）へ変更されることになる。即ち、本来実行すべきバリエーションＤ用プログラムへの復帰（補正）が実現される。
【００６２】
以上説明した本実施例によれば、とりわけ、以下のような優れた効果が奏される。
【００６３】
上述の如く、マイコン２０のメモリ保護部（メモリ保護機能）２４を利用して本来のバリエーションでは使用しないプログラム領域（メモリ領域）へのアクセスを禁止し、アクセス違反発生時（アクセス例外発生時）には本来のバリエーションで使用すべきプログラム領域へ強制的に変更させることができる。これにより、制御プログラムの切換に使用しているバリエーション情報が何らかの原因で正規の値でない値に動作中に書き換わり、本来実行すべきでないプログラムが実行されうる状態になった場合でも、本来実行すべきプログラムの実行状態への復帰（補正）が可能となる。
【００６４】
以上、本発明の好ましい実施例について詳説したが、本発明は、上述した実施例に制限されることはなく、本発明の範囲を逸脱することなく、上述した実施例に種々の変形及び置換を加えることができる。
【００６５】
例えば、上述した実施例において、メモリ保護部２４は、ドメイン（特定の処理を行う機能単位のグループ）毎にメモリ領域へのアクセスを管理（保護）してよい。
【００６６】
また、上述した実施例において、バリエーションＡ用プログラムと、バリエーションB用プログラム（他のバリエーション用プログラムも同様）とは、完全に異なる別々のプログラムであってもよいし、一部に共通部分を有するプログラムであってもよい。後者の場合、例えば、バリエーションＡ用プログラムと、バリエーションB用プログラムとは、共通のタスク群（第１ドメイン）と、バリエーションＡ用プログラムに特有のタスク群（第２ドメイン）と、バリエーションB用プログラムに特有のタスク群（第３ドメイン）とを有してよい。この場合、メモリ保護部２４は、例えば第２ドメイン及び第３ドメインに対してそれぞれのメモリ領域へのアクセスを管理（保護）してよい。
【符号の説明】
【００６７】
１０    ＥＣＵ
１２    他のＥＣＵ
２０    マイコン
２２    ＣＰＵ
２４    メモリ保護部
２６    フラッシュメモリ
２８    ＲＡＭ
１００    車両制御装置
【図１】
2014085770.tif 000003
【図２】
2014085770.tif 000004
【図３】
2014085770.tif 000005
【図４】
2014085770.tif 000006
【図５】
2014085770.tif 000007
【図６】
2014085770.tif 000008