(57)【要約】【課題】マルチコアマイコンにおいて、プログラムメモリの使用量を減少させる。【解決手段】複数の演算プロセッサであるコア０〜２と、各コア０〜２が実行するプログラムが格納されたＲＯＭ１１と、を備えるマイコン２３において、各コア０〜２は、自身に固有のＩＤ（識別情報）が格納された格納部１７を内蔵しており、ＲＯＭ１１には、各コア０〜２が共通に実行する共通プログラムが少なくとも格納されている。そして、その共通プログラムは、コア０〜２が自身の格納部１７からＩＤを読み出す読み出し処理を行うように構成されていると共に、コア０〜２が実施する処理の一部の内容が、前記読み出し処理で読み出されたＩＤに応じて変わるように構成されている。例えば、コアのＩＤに応じて、コア０〜２がビット反転させる監視用ＲＡＭ１４におけるアクセス先（ビット位置）が変わる。【選択図】図１
2015121953.tif 000002
【特許請求の範囲】
【請求項１】
複数の演算プロセッサであるコア（０〜２）と、前記各コアが実行するプログラムが格納されたプログラムメモリ（１１）と、を備えるマイクロコンピュータ（２３）において、
前記各コアは、自身に固有の識別情報が格納された格納部（１７）を内蔵しており、
前記プログラムメモリには、前記各コアが共通に実行する共通プログラム（３１）が少なくとも格納されており、
前記共通プログラムは、
前記コアが自身の前記格納部から前記識別情報を読み出す読み出し処理（Ｓ２３０）を行うように構成されていると共に、前記コアが実施する処理の一部の内容が、前記読み出し処理で読み出された識別情報に応じて変わるように構成されていること、
を特徴とするマイクロコンピュータ。
【請求項２】
請求項１に記載のマイクロコンピュータにおいて、
前記複数のコアがアクセス可能なＲＡＭ（１３）を備え、
前記識別情報に応じて変わる内容は、少なくとも前記ＲＡＭにおけるアクセス先であること、
を特徴とするマイクロコンピュータ。
【請求項３】
請求項２に記載のマイクロコンピュータにおいて、
前記ＲＡＭには、前記複数のコア毎に固有の更新領域（１４−０〜１４−２）が設けられており、
前記共通プログラムは、
前記コアが、前記読み出し処理（Ｓ２３０）と、前記各更新領域のうち、前記読み出し処理で読み出された識別情報と所定の規則で対応付けされた更新領域にアクセスして、その更新領域の記憶内容を更新履歴が判るように更新する更新処理（Ｓ２６０）と、を行うように構成されており、
前記各コアが、前記共通プログラムを周期的に実行し、
前記複数のコアのうちの一つであるマスタコア（０）が、前記各更新領域の記憶内容の更新状況に基づいて全ての前記コアが正常か否かを判定する判定処理（Ｓ１１０）を行うこと、
を特徴とするマイクロコンピュータ。
【請求項４】
請求項３に記載のマイクロコンピュータにおいて、
前記マスタコアは、前記判定処理による判定結果を当該マイクロコンピュータの外部へ出力する（Ｓ１２０）こと、
を特徴とするマイクロコンピュータ。
【請求項５】
請求項４に記載のマイクロコンピュータと、
前記マイクロコンピュータから出力される前記判定結果に基づいて、前記マイクロコンピュータが異常であることを検知すると、前記マイクロコンピュータをリセットする監視手段（２５）と、
を備えることを特徴とする電子制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロコンピュータ及び電子制御装置に関する。
【背景技術】
【０００２】
マイクロコンピュータ（以下、マイコンという）として、同一パッケージ内に演算プロセッサを複数備えたものがある。そのようなマイコンは、内蔵の演算プロセッサがコアと呼ばれることから、マルチコアマイコンと呼ばれる。
【０００３】
マルチコアマイコンにおいて、例えば、コアの異常（暴走）を監視する技術として、以下のようなものがある（例えば特許文献１参照）。
ＲＡＭには、コア毎に固有の更新領域が設けられている。各コアは、自身に対応する更新領域の記憶内容を、一定時間毎に更新する。１つの特定コアが、全コアの更新領域の記憶内容が正しく更新されているか否かを確認し、正しく更新されていなければ、マイコン外部の監視部への信号反転を停止して、その監視部からマイコンにリセット信号が与えられるようにする。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−３３４７５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上記技術において、各コアは、自身に固有の更新領域にアクセス（ライトアクセス）する。このため、各コアが更新領域の記憶内容を更新するために実行するプログラムとして、コア毎に異なるプログラムを実装する必要がある。よって、プログラムを記憶するプログラムメモリの使用量が多くなってしまう。
【０００６】
そこで、本発明は、マルチコアマイコンにおいて、プログラムメモリの使用量を減少させることを目的としている。
【課題を解決するための手段】
【０００７】
第１発明のマイコンは、複数の演算プロセッサであるコアと、各コアが実行するプログラムが格納されたプログラムメモリと、を備える。
各コアは、自身に固有の識別情報が格納された格納部を内蔵している。
【０００８】
プログラムメモリには、各コアが共通に実行する共通プログラムが少なくとも格納されている。そして、その共通プログラムは、コアが自身の格納部から識別情報を読み出す読み出し処理を行うように構成されている。更に、共通プログラムは、コアが実施する処理の一部の内容が、前記読み出し処理で読み出された識別情報に応じて変わるように構成されている。
【０００９】
このため、各コアが、同一の共通プログラムを実行することで、コア毎に異なる内容の処理を実施することができる。よって、プログラムメモリに格納しなければならないプログラムの量（プログラムを成すデータの量）を少なくすることができる。つまり、プログラムメモリの使用量を減少させることができる。また、コア数の増減に対して、共通プログラムの変更は不要となるため、プログラムの開発効率が良い。
【００１０】
なお、特許請求の範囲に記載した括弧内の符号は、一つの態様として後述する実施形態に記載の具体的手段との対応関係を示すものであって、本発明の技術的範囲を限定するものではない。
【図面の簡単な説明】
【００１１】
【図１】実施形態の電子制御装置の構成を表す構成図である。
【図２】ＲＯＭの記憶内容を説明する説明図である。
【図３】マスタコアが実行するタイマ割込処理を表すフローチャートである。
【図４】各コアが共通に実行するプログラムによる更新処理を表すフローチャートである。
【図５】実施形態の作用を説明する説明図である。
【発明を実施するための形態】
【００１２】
本発明が適用された実施形態の電子制御装置(以下、ＥＣＵという）について説明する。
図１に示すように、本実施形態のＥＣＵ２１は、例えば車両におけるエンジン等の制御対象を制御するための処理を行うマイコン２３と、マイコン２３を監視する監視ＩＣ２５と、を備える。
【００１３】
監視ＩＣ２５には、マイコン２３から出力されるウォッチドッグタイマクリア信号（以下、ＷＤＣ信号という）が入力される。
監視ＩＣ２５は、ＷＤＣ信号のレベル変化エッジ（立ち下がりエッジ及び立ち下がりエッジ）によってクリアされるウォッチドッグタイマ（図示省略）を備える。そして、監視ＩＣ２５は、ＷＤＣ信号がレベル反転しない連続時間が規定時間Ｔｏｖを超えると、ウォッチドッグタイマがオーバーフローして、マイコン２３が異常であることを検知することとなり、マイコン２３をリセットして異常を解消するために、マイコン２３へリセット信号を出力する。
【００１４】
マイコン２３は、複数（この例では３つ）のコア（演算プロセッサ）０，１，２と、全てのコア０〜２がアクセス可能なＲＯＭ１１及びＲＡＭ１３と、少なくともコア０がアクセス可能なタイマ１５と、を備える。この例では、マイコン２３を監視することに関して、コア０〜２のうちのコア０が、マスタコアとなっている。
【００１５】
各コア０〜２は、自身に固有の識別情報として、そのコアのＩＤ（アイデンティティ）のデータ（以下単に、ＩＤという）が格納された、格納部１７を内蔵している。この例では、コア０のＩＤは「０」で、コア１のＩＤは「１」で、コア２のＩＤは「２」である。また、格納部１７は不揮発性のメモリからなる。
【００１６】
また、図１における点線枠内に示すように、ＲＡＭ１３における所定アドレス（この例では「ａｄＭ」）の各ビット領域のうち、先頭からコア０〜２の数と同数のビット領域（この例では０ビット目１４−０から２ビット目１４−２までの３ビットの領域）は、異常監視のために、各コア０〜２に割り当てられている。その３ビットの領域は、各コア０〜２が自身に割り当てられたビットを反転させるための記憶領域（以下、監視用ＲＡＭという）１４になっている。監視用ＲＡＭ１４では、０ビット目１４−０がコア０に、１ビット目１４−１がコア１に、２ビット目１４−２がコア２に、それぞれ割り当てられている。監視用ＲＡＭ１４の０ビット目１４−０〜２ビット目１４−２は、コア０〜２毎に固有の更新領域に相当する。
【００１７】
プログラムメモリとしてのＲＯＭ１１には、各コア０〜０が実行するプログラムが格納されている。ＲＯＭ１１内のプログラムとしては、コア０〜２毎に異なるプログラムだけでなく、図２に示すように、各コア０〜２が共通に実行する共通プログラムとしての更新処理プログラム３１もある。
【００１８】
本実施形態において、更新処理プログラム３１は、各コア０〜２が、後述する図４の更新処理を行うためのプログラムである。更新処理は、各コア０〜２が、自身が正常であることを示すために行う処理であり、監視用ＲＡＭ１４において自身に対応するビット位置の値を一定時間Ｔ毎に更新する（この例では反転させる）ための処理である。
【００１９】
また、図２に示すように、ＲＯＭ１１において、所定のアドレス（この例では「ａｄＪ」）から連続する３つのアドレス（「ａｄＪ＋０」〜「ａｄＪ＋２」）の記憶領域は、各コア０〜２に関して、プログラムジャンプのジャンプ先を示すベクタ領域になっている。この例では、アドレス＝「ａｄＪ＋０」の記憶領域（以下単に、「ａｄＪ＋０」という）に、コア０に対応するジャンプ先アドレス（Ｊｍｐ０）が記憶されている。同様に、アドレス＝「ａｄＪ＋１」の記憶領域（以下単に、「ａｄＪ＋１」という）に、コア１に対応するジャンプ先アドレス（Ｊｍｐ１）が記憶され、アドレス＝「ａｄＪ＋２」の記憶領域（以下単に、「ａｄＪ＋２」という）に、コア２に対応するジャンプ先アドレス（Ｊｍｐ２）が記憶されている。
【００２０】
マイコン２３において、タイマ１５は、上記一定時間Ｔ毎に、コア０に対するタイマ割込要求を発生させる。尚、一定時間Ｔは、前述のウォッチドッグタイマがオーバーフローする規定時間Ｔｏｖよりも短い時間であり、例えば５ｍｓである。
【００２１】
そして、コア０は、タイマ１５によるタイマ割込要求が発生する毎に、図３のタイマ割込処理を行う。そのタイマ割込処理のプログラムは、コア０〜２のうちのコア０だけが実行するプログラムとして、ＲＯＭ１１に格納されている。
【００２２】
図３に示すように、コア０は、タイマ割込処理では、まずＳ１１０にて、監視用ＲＡＭ１４の全てのビット（０ビット目１４−０〜２ビット目１４−２）が、前回値から更新されているか否かを判定する。この例では、監視用ＲＡＭ１４の全てのビットが前回値から反転している（反対の値になっている）か否かを判定する。前回値とは、当該タイマ割込処理を前回に実施したときの値である。また、マイコン２３が起動してから最初の当該タイマ割込処理におけるＳ１１０では、全てのビットが反転していると肯定判定する。
【００２３】
コア０は、Ｓ１１０にて、監視用ＲＡＭ１４の全てのビットが反転している（更新されている）と肯定判定した場合には、正常と判断してＳ１２０に進み、マイコン２３から監視ＩＣ２５へのＷＤＣ信号の出力レベルを反転させる。そして、コア０は、次のＳ１３０にて、他のコア１，２へ割込要求信号（図１参照）を発行し、その後、当該タイマ割込処理を終了する。
【００２４】
また、コア０は、Ｓ１１０にて、監視用ＲＡＭ１４のビットのうちの１つでも反転していない（更新されていない）と判定した場合には、異常と判断して、ＷＤＣ信号の出力レベルを反転させることなく、そのままＳ１３０に進む。そして、Ｓ１３０にて、他のコア１，２へ割込要求信号を発行した後、当該タイマ割込処理を終了する。尚、このように異常と判断される状態が継続して、ＷＤＣ信号がレベル反転しない連続時間が規定時間Ｔｏｖを超えると、前述したように、監視ＩＣ２５からマイコン２３へリセット信号が出力されることとなる。
【００２５】
コア１，２は、コア０によって発行される割込要求信号を受けると、前述の更新処理プログラム３１を実行する。また、コア０も、図３のタイマ割込処理を終了すると、更新処理プログラム３１を実行する。このようにして、全てのコア０〜２は、一定時間Ｔ毎に、且つ、コア０が図３のタイマ割込処理におけるＳ１１０の判定を行ってから次に同じＳ１１０の判定を行うまでの間毎に、更新処理プログラム３１を実行することとなる。
【００２６】
各コア０〜２は、共通の更新処理プログラム３１を実行することで、図４の更新処理を行う。
図４に示すように、各コア０〜２は、更新処理では、まずＳ２１０にて、全コア０〜２に共通の自己診断処理（以下、共通自己診断処理という）を行う。共通自己診断処理としては、例えば、自身（処理を行うコア自身のことであり、以下、自コアともいう）におけるスタック領域がオーバーフローしたか否かを判定する処理がある。また、共通自己診断処理の判定結果は、例えば自コアに内蔵された所定のレジスタに書き込まれる。
【００２７】
そして、各コア０〜２は、次のＳ２２０にて、共通自己診断処理の判定結果が「正常」であるか否かを判定し、「正常」であれば、Ｓ２３０に進む。
各コア０〜２は、Ｓ２３０では、自身の格納部１７から自身のＩＤを読み出すための読み出し処理（以下、ＩＤ読み出し処理という）を行う。ＩＤ読み出し処理の命令は、例えば、「Ｘ＝Ｒｅａｄ ＩＤ（）；」という命令であり、その命令が実行されることにより、格納部１７からＩＤが読み出されて、そのＩＤが自コアに内蔵されたレジスタＸに書き込まれる。
【００２８】
そして、各コア０〜２は、次のＳ２４０にて、コア毎に固有の自己診断処理（以下、固有自己診断処理という）を行う。
固有自己診断処理は、一例を挙げると、例えば、自コアが実行する制御演算のプログラムに、入力データとして、予め定められたテストデータを与え、そのテストデータに対する制御演算の結果と、予め用意されている期待値とを比較して、結果と期待値とが一致していれば「正常」、不一致ならば「異常」と判定する処理である。
【００２９】
固有自己診断処理は、コア０〜２毎に内容が異なる処理であるため、その固有自己診断処理を行うためのプログラムは、コア０〜２毎に異なるプログラムである。このため、コア０〜２毎の固有自己診断処理のプログラムは、ＲＯＭ１１の異なる記憶領域にそれぞれ格納されている。
【００３０】
本実施形態では、前述のベクタ領域（「ａｄＪ＋０」〜「ａｄＪ＋２」）のうち、「ａｄＪ＋０」に記憶されているアドレス（Ｊｍｐ０）が、コア０の固有自己診断処理のプログラムが格納されている記憶領域の先頭アドレスになっている。同様に、「ａｄＪ＋１」に記憶されているアドレス（Ｊｍｐ１）が、コア１の固有自己診断処理のプログラムが格納されている記憶領域の先頭アドレスになっており、「ａｄＪ＋２」に記憶されている先アドレス（Ｊｍｐ２）が、コア２の固有自己診断処理のプログラムが格納されている記憶領域の先頭アドレスになっている。
【００３１】
このため、各コア０〜２は、Ｓ２４０では、「Ｙ＝Ｒｅａｄ ＪｕｍｐＡｄ（ａｄＪ，Ｘ）；」というアドレス取得命令と、「Ｊｕｍｐ（Ｙ）；」というジャンプ命令を行うことにより、自身が実行すべき固有自己診断処理のプログラムへジャンプする。
【００３２】
上記アドレス取得命令は、「ａｄＪ」にレジスタＸの値（即ち、自コアのＩＤの値）を加えたアドレスから、データ（即ちジャンプ先アドレス）を読み出し、その読み出したデータを、自コアに内蔵されたレジスタＹに書き込む、という命令である。上記ジャンプ命令は、レジスタＹに記憶されているアドレスへジャンプする、という命令である。
【００３３】
このため、コア０であれば、ＩＤが「０」であるため、「ａｄＪ＋０」に記憶されているアドレス（Ｊｍｐ０）へジャンプして、コア０の固有自己診断処理のプログラムを実行することとなる。また、コア１であれば、ＩＤが「１」であるため、「ａｄＪ＋１」に記憶されているアドレス（Ｊｍｐ１）へジャンプして、コア１の固有自己診断処理のプログラムを実行することとなる。同様に、コア２であれば、ＩＤが「２」であるため、「ａｄＪ＋２」に記憶されているアドレス（Ｊｍｐ２）へジャンプして、コア２の固有自己診断処理のプログラムを実行することとなる。また、各コア０〜２において、固有自己診断処理の判定結果は、例えば自コアに内蔵された所定のレジスタ（レジスタＸ以外のレジスタ）に書き込まれる。
【００３４】
そして、各コア０〜２は、固有自己診断処理のプログラムを実行し終えると、更新処理プログラム３１を実行する状態に戻り、Ｓ２５０に進む。
各コア０〜２は、Ｓ２５０では、固有自己診断処理の判定結果が「正常」であるか否かを判定し、「正常」であれば、自コアの状態は正常であると判断して、Ｓ２６０に進む。
【００３５】
各コア０〜２は、Ｓ２６０では、監視用ＲＡＭ１４における更新対象ビット（即ち、自コアに割り当てられているビット）の値を反転させる。
本実施形態では、各コア０〜２は、例えば、「ＢｉｔＩｎｖｅｒｔ（ａｄＭ，Ｘ）；」というビット反転命令を実行することにより、更新対象ビットを反転させる。
【００３６】
そのビット反転命令は、監視用ＲＡＭ１４のビット（ＲＡＭ１３における「ａｄＭ」というアドレスのビット）のうち、レジスタＸの値（即ち、自コアのＩＤの値）と同じビット位置のビットを反転させる、という命令である。
【００３７】
このため、コア０であれば、ＩＤが「０」であるため、監視用ＲＡＭ１４の０ビット目１４−０を反転させることとなる。また、コア１であれば、ＩＤが「１」であるため、監視用ＲＡＭ１４の１ビット目１４−１を反転させることとなり、コア２であれば、ＩＤが「２」であるため、監視用ＲＡＭ１４の２ビット目１４−２を反転させることとなる。
【００３８】
そして、各コア０〜２は、Ｓ２６０の処理を行った後、当該更新処理を終了する。
また、各コア０〜２は、Ｓ２２０にて、共通自己診断処理の判定結果が「異常」であると判定した場合、あるいは、Ｓ２５０にて、固有自己診断処理の判定結果が「異常」であると判定した場合には、Ｓ２６０の処理（更新対象ビットの反転）を行うことなく、そのまま当該更新処理を終了する。
【００３９】
次に、ＥＣＵ２１の作用について、図５を用い説明する。
図５に示すように、各コア０〜２は、正常であれば、監視用ＲＡＭ１４のビットのうち、自身に割り当てられている更新対象ビットを、一定時間Ｔ毎に反転させる。また、コア０は、一定時間Ｔ毎に、監視用ＲＡＭ１４の全てのビットが反転されているかを確認し、全てのビットが反転されていれば、監視ＩＣ２５へのＷＤＣ信号をレベル反転させる。
【００４０】
よって、マイコン２３の各コア０〜２が正常であれば、ＷＤＣ信号が規定時間Ｔｏｖ以内にレベル反転して、監視ＩＣ２５からマイコン２３へのリセット信号の出力が阻止される。
【００４１】
また例えば、各コア０〜２のうちのコア１に異常が発生して、そのコア１が、更新処理プログラム３１を実行しなくなった場合や、更新処理プログラム３１を実行しても、Ｓ２６０のビット反転命令を実行しなくなった場合には、監視用ＲＡＭ１４における１ビット目１４−１の反転が停止する。すると、コア０は、その１ビット目１４−１が反転しないことを検出して、ＷＤＣ信号のレベル反転を停止する。
【００４２】
そして、ＷＤＣ信号がレベル反転しない連続時間が規定時間Ｔｏｖを超えると、監視ＩＣ２５からマイコン２３にリセット信号が出力される。マイコン２３は、リセット信号によってリセットされることにより、初期状態に戻り、その後、再起動する。
【００４３】
以上のようなＥＣＵ２１において、マイコン２３のＲＯＭ１１に格納されたプログラムのうち、各コア０〜２に共通の更新処理プログラム３１は、各コア０〜２が自身の格納部１７から自身のＩＤを読み出すＩＤ読み出し処理（Ｓ２３０）を行うように構成されている。そして更に、更新処理プログラム３１は、コア０〜２が当該プログラム３１を実行することで実施する処理の一部の内容が、ＩＤ読み出し処理で読み出されたＩＤに応じて変わるように構成されている。上記実施形態の例では、ＩＤに応じて、監視用ＲＡＭ１４のビットのうち、自コアが反転させる更新対象ビットの位置（つまり、ＲＡＭ１３におけるビット反転のためのアクセス先）が変わる。また、ＩＤに応じて、固有自己診断処理のプログラムのジャンプ先が変わることにより、実施される固有自己診断処理の内容も変わる。
【００４４】
このため、各コア０〜２は、同一の更新処理プログラム３１を実行することで、コア０〜２毎に異なる内容の処理を実施することができる。例えば、ＲＡＭ１３におけるビット反転のためのアクセス先と、固有自己診断処理の内容とが、コア０〜２毎に異なるからといって、コア０〜２毎に異なる更新処理プログラムを設ける必要がない。
【００４５】
よって、ＲＯＭ１１に格納しなければならないプログラムの量（プログラムを成すデータの量）を少なくすることができ、ＲＯＭ１１の使用量を減少させることができる。
また、マイコン２３におけるコア数の増減に対して、更新処理プログラム３１の変更は不要となるため、プログラムの開発効率が良い。例えば、コア数が増加した場合に、増加したコア用の更新処理プログラムを追加しなくても良いし、コア数が減少した場合に、減少したコアに対応する更新処理プログラムを削除する、という工程も不要となる。コア数が増減した場合には、マスタコアとしてのコア０が監視用ＲＡＭ１４の何ビット分を監視するか、ということを変更するだけで済む。
【００４６】
また、更新処理プログラム３１は、各コア０〜２が、ＩＤ読み出し処理（Ｓ２３０）と、監視用ＲＡＭ１４のビットのうち、ＩＤ読み出し処理で読み出されたＩＤと所定の規則で対応付けされたビットにアクセスして、そのビットの記憶内容を更新履歴が判るように更新する更新処理（Ｓ２６０）と、を行うように構成されている。尚、上記例において、所定の規則は、ＩＤ読み出し処理で読み出されたＩＤの値と同じビット位置、という規則であり、ビットの記憶内容を更新履歴が判るように更新する更新処理は、ビットの値を反転する処理である。
【００４７】
そして、各コア０〜２が、更新処理プログラム３１を周期的に実行し、マスタコアとしてのコア０が、監視用ＲＡＭ１４の各ビットの更新状況に基づいて全てのコア０〜２が正常か否かを判定する判定処理（Ｓ１１０）を行うようになっている。
【００４８】
このため、１つのコア０によって、全てのコア０〜２が正常か否かを監視することができる。
また、コア０は、全てのコア０〜２が正常か否かの判定結果を、ＷＤＣ信号のレベル変化の有無として、マイコン２３の外部へ出力する。このため、全てのコア０〜２が正常か否かを、マイコン２３の外部の装置（上記例では監視ＩＣ２５）にて判定することができる。
【００４９】
また、監視ＩＣ２５は、マイコン２３から出力される判定結果としてのＷＤＣ信号のレベル変化に基づいて、マイコン２３が異常であることを検知すると、マイコン２３にリセット信号を出力して該マイコン２３をリセットする。このため、コア０〜２の何れかが暴走した場合に、その異常なコアを正常復帰させる（つまり、マイコン２３を正常復帰させる）ことができる。
【００５０】
尚、コアのＩＤが、０，１，２，…というような、０から始まるシーケンシャルな番号ではない場合、更新処理プログラム３１は、ＩＤ読み出し処理で読み出されたＩＤを所定の計算式に代入した計算結果が、監視用ＲＡＭ１４における更新対象ビットの位置（ビット反転のためのアクセス先）を示すように構成すれば良い。例えば、コアのＩＤが、１０，１１，１２，…というような値の場合、更新処理プログラム３１は、各コア０〜２が、監視用ＲＡＭ１４のビットのうち、ＩＤ読み出し処理で読み出された自身のＩＤから「１０」を引いた値と同じビット位置のビットを反転させる、というように構成すれば良い。つまり、更新処理プログラム３１は、そのプログラム３１を実行するコアのＩＤに基づいて、そのコアがアクセスすべき監視用ＲＡＭ１４のビット位置（そのコアに固有の更新領域）が特定される、というように構成すれば良い。
【００５１】
また、このような変形は、コアのＩＤに応じてプログラムのジャンプ先が変わるようにすることについても同様である。また、プログラムのジャンプ先については、例えば、監視用ＲＡＭ１４における更新対象ビットの位置情報（０，１，２，…）を用いて、ジャンプ先が決まるように構成しても良い。そのように構成しても、コアのＩＤに応じてジャンプ先が変わることになる。
【００５２】
また、コア０〜２毎に固有の更新領域としては、監視用ＲＡＭ１４におけるビットに限らず、例えば、ＲＡＭ１３における何れかのアドレスの記憶領域（ｎバイトの記憶領域：ｎは１以上の整数）でも良い。その場合、図４のＳ２６０（更新処理）では、例えば、各コア０〜２が、自コアのＩＤによって特定されるｎバイトの更新領域の全ビットを反転させたり、その更新領域の値を所定値ずつ増加させたりするように構成しても良い。更新処理としては、更新領域の記憶内容が更新されたこと（更新履歴）が判る処理であれば、どのような処理でも良い。
【００５３】
また、コア０は、図３のＳ１１０にて異常と判断した場合には、監視用ＲＡＭ１４のビットのうち、前回値から反転していないビットを特定することにより、異常となっているコアを特定することができる。また、コア０が異常なコアを特定する場合、コア０〜２のうち、コア０によって異常と特定されたコアだけが、コア０又は監視ＩＣ２５によってリセットされるように構成することもできる。
【００５４】
以上、本発明の実施形態について説明したが、本発明は上記実施形態に限定されることなく、種々の形態を採り得る。また、前述の数値も一例であり他の値でも良い。
例えば、マイコン２３におけるコアの数は、２でも良いし４以上でも良い。また、マイコン２３とは別のマイコンに、監視ＩＣ２５と同様の役割をさせても良い。
【００５５】
また、上記実施形態における１つの構成要素が有する機能を複数の構成要素として分散させたり、複数の構成要素が有する機能を１つの構成要素に統合させたりしてもよい。また、上記実施形態の構成の少なくとも一部を、同様の機能を有する公知の構成に置き換えてもよい。また、上記実施形態の構成の一部を、課題を解決できる限りにおいて省略してもよい。なお、特許請求の範囲に記載した文言によって特定される技術思想に含まれるあらゆる態様が本発明の実施形態である。
【００５６】
また、上述したＥＣＵの他、当該ＥＣＵを構成要素とするシステム、マイコンが実行するプログラム、このプログラムを記録した媒体、プログラム作成方法など、種々の形態で本発明を実現することもできる。
【符号の説明】
【００５７】
０〜２…コア、１１…ＲＯＭ（プログラムメモリ）、１７…格納部、２３…マイコン、３１…更新処理プログラム（共通プログラム）
【図１】
2015121953.tif 000003
【図２】
2015121953.tif 000004
【図３】
2015121953.tif 000005
【図４】
2015121953.tif 000006
【図５】
2015121953.tif 000007