(57)【要約】【課題】自動車等の車両に搭載する電子制御装置において、メモリ診断の効率化を図る。【解決手段】複数の演算装置（１１、１２）と、データを記憶するメモリ（２、３）とを含む電子制御装置（１００）であって、各々の演算装置（１１、１２）は、メモリ（２、３）を複数の領域に分割して所定のメモリ診断をする際、各々の演算装置（１１、１２）の処理能力に基づいて割り振られたメモリ（２、３）の領域を、個別に診断するメモリ診断方法を実行する。【選択図】  図１
2015184796.tif 000002
【特許請求の範囲】
【請求項１】
複数の演算装置と、データを記憶するメモリとを含む電子制御装置であって、
各々の前記演算装置は、前記メモリを複数の領域に分割して所定のメモリ診断をする際、各々の前記演算装置の処理能力に基づいて割り振られた前記メモリの領域を、個別に診断することを特徴とする電子制御装置。
【請求項２】
前記演算装置の前記処理能力は、前記演算装置の動作周波数と処理負荷との少なくとも一方である請求項１に記載の電子制御装置。
【請求項３】
前記メモリ診断の結果が異常であった場合には、該異常を診断した演算装置とは異なる他の演算装置が、前記異常と診断されたメモリの領域に対して前記メモリ診断を再度行う請求項１又は請求項２に記載の電子制御装置。
【請求項４】
電子制御装置の複数の演算装置が、メモリを複数の領域に分割して所定のメモリ診断をする際、各々の前記演算装置の処理能力に基づいて割り振られた前記メモリの領域を、個別に診断する
ことを特徴とするメモリ診断方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、自動車等の車両に搭載する電子制御装置及びそのメモリ診断方法に関する。
【背景技術】
【０００２】
自動車等の車両に搭載する電子制御装置（ＥＣＵ（Electronic Control Unit））等の一部には、システムの起動時にメモリの診断を行う機種がある。そして、複数のプロセッサを用いて、システムの起動時に初期化処理やメモリ診断処理にかかる時間を並列処理により短縮する技術が提案されている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平６−３２５００７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、単に並列処理をしたのでは、プロセッサのスペック等に応じて処理時間に差が生じて終了時間がばらつきやすくなり、待ち時間が発生しやすくなる。
【０００５】
そこで、本発明は、自動車等の車両に搭載する電子制御装置において、メモリ診断の効率化を図ることができる技術を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明による電子制御装置は、複数の演算装置と、データを記憶するメモリとを含む電子制御装置であって、各々の演算装置は、メモリを複数の領域に分割して所定のメモリ診断をする際、各々の演算装置の処理能力に基づいて割り振られたメモリの領域を、個別に診断するメモリ診断方法を実行する。
【発明の効果】
【０００７】
本発明によれば、メモリ診断の効率化を図ることができる技術を提供できる。
【図面の簡単な説明】
【０００８】
【図１】電子制御装置のハード構成例を示す図である。
【図２】従来のマルチコアプロセッサにおけるメモリ診断の一例を説明する図である。
【図３】第１実施形態におけるメモリ診断の処理の一例を説明する図である。
【図４】第１実施形態におけるメモリ診断のタイミングチャートの一例を説明する図である。
【図５】第２実施形態におけるメモリ診断の処理の一例を説明する図である。
【図６】第３実施形態におけるメモリ診断の処理の一例を説明する図である。
【図７】第３実施形態におけるメモリ診断のタイミングチャートの一例を説明する図である。
【図８】第４実施形態におけるメモリ診断のタイミングチャート例を説明する図である。
【図９】第５実施形態におけるメモリ診断の処理の一例を説明する図である。
【図１０】第５実施形態におけるメモリ診断の処理の一例を示すフローチャートである。
【図１１】第５実施形態におけるメモリ診断の処理の一例を示すサブルーチンのフローチャートである。
【図１２】第５実施形態におけるメモリ診断の処理の一例を説明する図である。
【図１３】第５実施形態におけるメモリ診断の処理の一例を示すサブルーチンのフローチャートである。
【図１４】第６実施形態におけるメモリ診断の処理の一例を説明する図である。
【図１５】第６実施形態におけるメモリ診断のタイミングチャートの一例を説明する図である。
【図１６】第６実施形態におけるメモリ診断の処理の一例を示すフローチャートである。
【図１７】第８実施形態におけるメモリ診断の処理の一例を説明する図である。
【発明を実施するための形態】
【０００９】
以下、添付された図面を参照し、本発明を実施するための実施形態について詳述する。
先ず、電子制御装置のハード構成例について、説明する。
図１に示す電子制御装置１００は、例えば、自動車に搭載され、エンジン、自動変速機、燃料ポンプなどを電子制御するデバイスである。
電子制御装置１００は、プロセッサ１と、ＲＯＭ（Read Only Memory）２と、ＲＡＭ（Random Access Memory）３と、バス４とを備える。プロセッサ１、ＲＯＭ２及びＲＡＭ３は、バス４を介して、互いに接続されている。
【００１０】
プロセッサ１は、電子制御装置１００の統括的な制御を行うものである。ここで、プロセッサ１は、１つのＣＰＵのパッケージに複数のＣＰＵコア（例えば第１コア１１、第２コア１２）を搭載しており、物理的にＣＰＵコアの数を増やすことで処理の高速化等を図るマルチコアプロセッサである。図１に示すプロセッサ１では、２つのＣＰＵコアを搭載したデュアルコアを例示しているが、これに限定されず、例えば、３つのＣＰＵコアを搭載したトリプルコア、４つのＣＰＵコアを搭載したクアッドコアであってもよい。また、さらに多くのＣＰＵコアを搭載してもよい。なお、ＣＰＵコア（例えば第１コア１１、第２コア１２）は、演算装置の一例である。
【００１１】
ＲＯＭ２は、例えば、フラッシュＲＯＭ等、電源供給を遮断してもデータが保持される不揮発性の半導体メモリである。また、ＲＯＭ２は、第１コア用領域２１と、第２コア用領域２２とを含む。第１コア用領域２１及び第２コア用領域２２は、例えば、プロセッサ１（第１コア１１、第２コア１２等）の処理能力に応じて、メモリ診断対象のメモリの領域が設定される。
【００１２】
ＲＡＭ３は、例えば、演算処理等に用いられるデータの一時的な作業領域となるメモリであって、電源供給が遮断されると、記憶内容が消える揮発性メモリである。より詳細には、ＲＡＭ３は、アドレス等による番地情報に基づいて、任意の番地のメモリーセルに対して読み出しや書き込みといった操作ができる記憶装置である。なお、ＲＡＭ３は、例えば、ダイナミックＲＡＭやスタティックＲＡＭであってもよい。バス４は、例えば、メモリアクセスバスを含む。
【００１３】
また、電子制御装置１００は、プロセッサ１、ＲＯＭ２、ＲＡＭ３等のハードウェアと、制御プログラム等のソフトウェアとが協働することにより、各種機能を実現する。この制御プログラムには、本実施形態のメモリ診断等の処理を行うプログラムが含まれる。したがって、プロセッサ１は、第１コア１１及び第２コア１２が制御プログラムを実行することで、メモリ診断等の処理が実現される。
【００１４】
[従来例との比較]
ここで、本件に開示する技術をより深く理解するため、従来のマルチコアプロセッサにおけるメモリ診断について簡単に説明する。
図２に示すように、従来のマルチコアプロセッサにおけるメモリ診断では、一例として、メモリ２ａの診断領域を均等に２分割し、マルチコアプロセッサの第１コア１１が第１ＲＯＭ領域２１ａを診断し、マルチコアプロセッサの第２コアが第２ＲＯＭ領域２２ａを診断する。診断の仕方としては、例えばいわゆるチェックサム方式を採用している。チェックサム方式は、一例として、第１ＲＯＭ領域２１ａ、第２ＲＯＭ領域２２ａのブロック毎に算出したチェックサム（合計値）と、予め算出しておいたチェックサム（期待値）とを各々比較する。チェックサム（合計値）とチェックサム（期待値）とが一致すれば、正常であると診断される。
【００１５】
ここで、第１コア１１と第２コア１２とにおいて、例えば、演算処理能力の目安となるクロック周波数（動作周波数）が異なると、メモリの診断等の処理時間にばらつきが生じやすくなるため、上述した通り、先にメモリ診断を終了したコアは、他のコアによるメモリ診断の終了まで無駄な待ち時間が発生することとなる。
【００１６】
そこで、以下に説明する実施形態において、メモリ診断の効率化を図ることができる技術等について説明する。また、例えばメモリ診断の高速化や異常時の処理についても説明する。
【００１７】
[第１実施形態]
図３では、第１実施形態におけるメモリ診断の処理の一例として、ＲＯＭ２の領域を模式的に示している。なお、図３では、図２に示したようなブロック毎のチェックサムにおける期待値の領域の図示を省略している（以下、同様とする）。また、図３では、第２コア１２が診断するメモリのブロックを斜線で例示している。ここで、第１実施形態では、第１コア１１の第１クロック周波数（ｆ１）を、一例として、２４０ＭＨｚとし、第２コア１２の第２クロック周波数（ｆ２）を、一例として、８０ＭＨｚとする。
【００１８】
また、第１実施形態では、説明をわかりやすくするため、ＲＯＭ２のメモリ領域を２０ブロックに分割する（図３参照）。なお、メモリ領域を複数の領域に分割する仕方は一例であって、物理空間に応じて分割してもよく、又は、論理空間に応じて分割してもよい。つまり、メモリ診断の効率化に寄与すれば、メモリ領域を複数の領域に分割する仕方は、特に限定されない。
ここで、一例として２０ブロックに分割した場合、第１コア１１がメモリ診断する領域の比率ｒ１は、
ｒ１＝ｆ１／（ｆ１＋ｆ２）＝２４０ＭＨｚ／（２４０＋８０）ＭＨｚ＝０．７５
となる。
【００１９】
一方、第２コア１２がメモリ診断する領域の比率ｒ２は、
ｒ２＝ｆ２／（ｆ１＋ｆ２）＝８０ＭＨｚ／（２４０＋８０）ＭＨｚ＝０．２５
となる。これにより、第１コア１１がメモリ診断する領域のブロック数Ｂ１は、Ｂ１＝２０×０．７５＝１５ブロックとなる。また、第２コア１２がメモリ診断する領域のブロック数Ｂ２は、Ｂ２＝２０×０．２５＝５ブロックとなる。
なお、上記比率の場合、図１に示す第１コア用領域２１のブロック数が１５ブロックとなり、第２コア用領域２２のブロック数が５ブロックとなる。
したがって、図３に示す通り、クロック周波数が、第２コア１２よりも３倍高い第１コア１１の方が、その分多くのブロックを単位時間当たりで診断することができる。この点に関し、図４を用いてより詳細に説明する。
【００２０】
図４に示すメモリ診断のタイミングチャートにおいて、横軸は、時間軸を表しており、縦軸は、図１に示す第１コア１１及び第２コア１２が実行するブロックの診断時間を模式的に長方形で表している。具体的には、図１では、長方形の面積が大きいほど、診断時間を要することを示している。ここでは、電子制御装置１００の起動時のメモリ診断を例示している。
図４（ａ）は、比較例として、第１コア１１と第２コア１２とで、診断領域を等分（１０ブロックづつ）にした場合を例示している。図４（ｂ）は、図３に示す通り、第１コア１１が１５ブロックを診断し、第２コア１２が５ブロックを診断した場合を例示している。
【００２１】
図４（ａ）の場合、第１コア１１は、第２コア１２と比較して、クロック周波数が３倍高いので、メモリの診断時間が略３分の１の時間で終了することになる。この場合、第１コア１１は、第２コア１２のメモリ診断のジョブが終了しないと、次のジョブを実行できない場合、無駄な待ち時間が発生する。
【００２２】
一方、図４（ｂ）の場合、第１コア１１が１５ブロックを診断し、第２コア１２が５ブロックを診断する。これにより、第１コア１１のメモリ診断の終了時と、第２コア１２のメモリ診断の終了時とが、略一致する。
つまり、第１コア１１と第２コア１２とは、ＲＯＭ２の領域を分割して、予め定められたチェックサム等を利用してメモリ診断をする際、各々のコアのクロック周波数に基づいて割り振られたメモリのブロックを、個別に診断する。したがって、第１実施形態では、クロック周波数によって、メモリ診断の領域の比率を変えることにより、マルチコアプロセッサにおけるメモリ診断の効率化を実現できる。この結果、第１実施形態では、メモリ診断の高速化も実現できる。なお、上記の比率の計算やメモリのブロックの割り振りは、例えば第１コア１１と第２コア１２との何れか一方が行えばよい。
【００２３】
[第２実施形態]
第２実施形態では、各コアの演算処理の負荷（以下「処理負荷」という）に基づいて、診断する領域の比率を決定する。なお、電子制御装置１００の動作時において、第１コア１１、第２コア１２は、各々演算処理にかかる負荷率を管理している。
【００２４】
図５に示すメモリ診断の処理の一例として、具体的には、第１コア１１の負荷率を６０％とし、第２コア１２の負荷率を２０％とする。換言すると、各コアの使用可能な割合を示す余裕率が、第１コア１１の場合、４０％であり、第２コア１２の場合、８０％となる。また、第２実施形態でも、ＲＯＭ２のメモリの領域を２０ブロックに分割する場合について説明する。ここで、第２実施形態では、第１コア１１の余裕率（ｓ１）を、一例として、４０％とし、第２コア１２の余裕率（ｓ２）を、一例として、８０％とする。このようにした場合、第１コア１１がメモリ診断する領域の比率ｒ１は、
ｒ１＝ｓ１／（ｓ１＋ｓ２）＝４０／（４０＋８０）＝０．３３３≒３３％
となる。
【００２５】
一方、第２コア１２がメモリ診断する領域の比率ｒ２は、
ｒ２＝ｓ２／（ｓ１＋ｓ２）＝８０／（４０＋８０）＝０．６６６≒６７％
となる。これにより、第１コア１１がメモリ診断する領域のブロック数Ｂ１は、Ｂ１＝２０×０．３３＝６．６≒７ブロックとなる。また、第２コア１２がメモリ診断する領域のブロック数Ｂ２は、Ｂ２＝２０×０．６７＝１３．４≒１３ブロックとなる。
なお、この場合、図５に示す通り、高負荷（負荷率６０％）の第１コア１１が７ブロックのメモリ診断をし、低負荷（負荷率４０％）の第２コア１２が１３ブロックのメモリ診断を行う。これにより、第２実施形態においても、各コアの処理負荷によって、メモリ診断の領域の比率を変えることにより、メモリ診断の効率化を実現できる。
【００２６】
[第３実施形態]
第３実施形態では、各コアのクロック周波数及び処理負荷を考慮して、メモリ診断を行う。
【００２７】
図６に示す第３実施形態におけるメモリ診断の処理の一例では、第１実施形態と同様、第１コア１１の第１クロック周波数（ｆ１）を、２４０ＭＨｚとし、第２コア１２の第２クロック周波数（ｆ２）を、８０ＭＨｚとする。また、第１コア１１の余裕率を４０％とし、第２コア１２の余裕率を８０％とする。
ここで、各コアのクロック周波数及び処理負荷を考慮するため、第１コア１１の場合、先ず、第１実施形態で算出した７５％と第２実施形態で算出した３３％とを乗算することにより、２４．７５％の値（ｒ３）が得られる。また、第２コア１２の場合、先ず、第１実施形態で算出した２５％と第２実施形態で算出した６７％とを乗算することにより、１６．７５％の値（ｒ４）が得られる。
【００２８】
続いて、第１コア１１がメモリ診断する領域の比率ｒ１は、
ｒ１＝ｒ３／（ｒ３＋ｒ４）＝２４．７５／（２４．７５＋１６．７５）
＝０．５９６３≒６０％となる。
一方、第２コア１２がメモリ診断する領域の比率ｒ２は、
ｒ２＝ｒ４／（ｒ３＋ｒ４）＝１６．７５／（２４．７５＋１６．７５）
＝０．４０３６≒４０％となる。
【００２９】
したがって、図６に示す通り、第１コア１１がメモリ診断する領域のブロック数Ｂ１は、Ｂ１＝２０×０．６０＝１２ブロックとなり、第２コア１２がメモリ診断する領域のブロック数Ｂ２は、Ｂ２＝２０×０．４０＝８ブロックとなる。
図７では、第３実施形態におけるメモリ診断のタイミングチャートの一例を示している。ただし、説明の便宜上、図７では、待ち時間を省略し、太線の鎖線で区切った２０ブロック単位のメモリの診断時間を例示している。具体的には、図７（ａ）は、比較例として、第１コア１１と第２コア１２とにおいて、メモリ診断の領域を等分（１０ブロック）に分割した場合を例示している。図７（ｂ）は、図６に示す通り、第１コア１１が１２ブロックをメモリ診断し、第２コア１２が８ブロックをメモリ診断した場合を例示している。
これにより、第３実施形態では、各コアのクロック周波数及び処理負荷を考慮してメモリ診断の領域の比率を変えることにより、第１、２実施形態よりもさらにメモリ診断を効率化し、また、高速化も実現できる。
【００３０】
[第４実施形態]
第４実施形態では、定周期のジョブの実行中にメモリ診断を実行する。
図８では、第４実施形態におけるメモリ診断のタイミングチャートの一例を示しており、プロセッサ１（第１コア１１、第２コア１２等）は、一例として、実行時間がそれぞれ２ｍｓｅｃ毎のジョブＡと、５ｍｓｅｃ毎のジョブＢと、１０ｍｓｅｃ毎のジョブＣ等のジョブを実行する。なお、ジョブの優先度は、高い順番からジョブＡ、ジョブＢ、ジョブＣとする。また、図８では、斜線のブロックで待ち時間を表している。ただし、図８では、説明の便宜上、ジョブＣの待ち時間とジョブＢの一部の待ち時間を、斜線のブロックであらわしている。また、図８に示す通り、２ｍｓｅｃ毎のジョブＡは、Ａ１、Ａ２、Ａ３、Ａ４、Ａ５、・・・というように、１０ｍｓｅｃの間に５回起動する。また、５ｍｓｅｃ毎のジョブＢは、Ｂ１、Ｂ２、・・・というように、１０ｍｓｅｃの間に２回起動する。また、１０ｍｓｅｃ毎のジョブＣは、Ｃ１、・・・というように、１０ｍｓｅｃの間に１回起動する。
【００３１】
そして、プロセッサ１は、一例として、実行時間が１０ｍｓｅｃ等の定周期のジョブＣの実行中にメモリ診断を行う場合、そのジョブＣの中でメモリ診断の処理を並列に行う。
なお、図８（ａ）において、プロセッサ１は、時間０のタイミングで、ジョブＡ１を起動し、その後、１０ｍｓｅｃ内に、２ｍｓｅｃ毎に起動するジョブＡ２からＡ５を実行する。また、プロセッサ１は、ジョブＢ１を時間０のタイミングで起動するが、待ち時間により、ジョブＡ１の終了後にジョブＢ１を実行する。また、プロセッサ１は、ジョブＢ２を時間軸で５ｍｓｅｃのタイミングで起動するが、途中、ジョブＡ４の起動により待ち時間が発生したため、２回に分けて実行する。
さらに、プロセッサ１は、ジョブＣ１を時間０のタイミングで起動するが、待ち時間により、１０ｍｓｅｃの間に４回に分けて実行する。
【００３２】
図８（ｂ）は、ジョブＡ、Ｂ及びＣの各実行時間の合計を示している。以上より、プロセッサ１は、定周期のジョブの実行中にメモリ診断を行う場合、そのジョブの中でメモリ診断の処理を並列に行うので、メモリ診断の効率化を実現できる。
【００３３】
なお、図８において、単位時間（Ｔ１）、実行時間（Ｔ２）、空き時間（Ｔ３）とした場合、負荷率（％）＝（Ｔ２）／（Ｔ１）となり、余裕率（％）＝（Ｔ１）／（Ｔ２）となる。この場合、プロセッサ１は、実行時間（Ｔ２）＋空き時間（Ｔ３）の期間内の負荷率（又は、余裕率）に基づいて、次の周期でのメモリ診断における比率を決定してもよい。これにより、メモリ診断の効率化がさらに図られる。
【００３４】
[第５実施形態]
第５実施形態では、各コアのクロック周波数及び処理負荷を考慮して、メモリ診断する領域の比率を決定する。
【００３５】
図９に示すメモリ診断の処理の一例において、プロセッサ１は、メモリ診断する領域のブロックの比率を１度決定した場合（図９（ａ）参照）、全領域のメモリ診断が終了するまで、その比率を変えずにメモリ診断をしてもよい（図９（ｂ）、（ｃ）参照）。
具体的には、図９に示す処理において、１０ｍｓｅｃの定周期のジョブでメモリ診断をする場合、プロセッサ１（第１コア１１、第２コア１２等）は、図１０に示すフローチャートの処理（以下「フローの処理」という）を実行する。
【００３６】
ステップＳ１０１：プロセッサ１は、所定の演算処理を実行する。具体的には、プロセッサ１では、例えば、各コアが処理負荷を算出する。
ステップＳ１０２：プロセッサ１は、メモリ診断処理のサブルーチンを実行する。
そして、プロセッサ１は、図１０に示すフローの処理を一旦終了する。そして、プロセッサ１は、再度、１０ｍｓｅｃの定周期のジョブでメモリ診断を行うため、図１０に示すフローの処理を開始する。
【００３７】
次に、図１１に示すメモリ診断処理のサブルーチンについて、説明する。
ステップＳ１０３：プロセッサ１は、ＲＯＭ２内で当該診断対象となるメモリの全領域について診断が終了したか否かを判定する。診断が終了していない場合（ステップＳ１０３：Ｎｏ）、後述するステップＳ１０７に移行する。一方、診断が終了した場合（ステップＳ１０３：Ｙｅｓ）、ステップＳ１０４の処理に移行する。
ステップＳ１０４：プロセッサ１は、各コアのクロック周波数及び処理負荷に基づいて、診断領域の分担を決定する。
ステップＳ１０５：プロセッサ１は、各領域の診断済みの情報を消去する。
ステップＳ１０６：プロセッサ１は、カウンタＸの初期化処理を行う。なお、カウンタＸは、例えば、メモリブロックのカウンタ値である（以下、同様とする）。
ステップＳ１０７：プロセッサ１は、第Ｎコアの分担領域の診断が終了したか否かを判定する。ここでは、図１に示す通り、プロセッサ１は、デュアルコアプロセッサであるので、ここでは、第１コア１１、第２コア１２が対象となる。診断が終了した場合（ステップＳ１０７：Ｙｅｓ）、メモリ診断処理のサブルーチンを終了し、ステップＳ１０２に戻り、図１０に示すフローの処理を一旦終了する。一方、診断が終了していない場合（ステップＳ１０７：Ｎｏ）、ステップＳ１０８の処理に移行する。
ステップＳ１０８：プロセッサ１は、カウンタＸに基づいて、分割したブロックのメモリの領域Ｘを診断する。ここで、カウンタＸとメモリの領域Ｘとは、アドレス番号等で関連付けられている。
ステップＳ１０９：プロセッサ１は、カウンタＸの更新処理を行う。そして、メモリ診断処理のサブルーチンを終了し、ステップＳ１０２に戻り、図１０に示すフローの処理を一旦終了する。
【００３８】
以上より、プロセッサ１は、メモリ診断する領域のブロックの比率を１度決定した場合、全領域のメモリ診断が終了するまで、その比率を変えずにメモリ診断することができる。ただし、メモリ診断の最中に処理負荷が変動した場合、メモリ診断の時間にばらつきが生じるおそれがある。
【００３９】
そこで、図１２において、プロセッサ１は、メモリ診断する領域のブロックの比率を、メモリ診断の周期毎に見直してもよい。具体的には、メモリ診断の開始時には、図１２（ａ）に示す通り、ＲＯＭ２のメモリにおいて、第１コア１１がメモリ診断する領域（第１コア用領域２１）は、６０％であり、第２コア１２がメモリ診断する領域（第２コア用領域２２）は、４０％である。その後、図１２（ｂ）に示す通り、第１コア１１の処理負荷が減った場合、プロセッサ１は、メモリ診断する領域のブロックの比率について、第１コア１１の分担の比率を６０％から７０％に増やし、第２コア１１の分担の比率を４０％から３０％に減らす。そして、プロセッサ１は、メモリ診断を最後まで実行する（図１２（ｃ）参照）。
【００４０】
具体的には、１０ｍｓｅｃの定周期のジョブでメモリ診断を行う場合、プロセッサ１は、上述した図１０に示すフローの処理を行う。ただし、ステップＳ１０２のメモリ診断処理におけるサブルーチンの処理が、上述した図１１に示すサブルーチンと一部異なるので、以下、図１３に示すサブルーチンのフローチャートに基づいて説明する。
【００４１】
ステップＳ２０１：プロセッサ１は、ＲＯＭ２における当該対象のメモリの全領域について診断が終了したか否かを判定する。診断が終了していない場合（ステップＳ２０１：Ｎｏ）、後述するステップＳ２０４に移行する。一方、診断が終了した場合（ステップＳ２０１：Ｙｅｓ）、ステップＳ２０２の処理に移行する。
ステップＳ２０２：プロセッサ１は、各領域の診断済みの情報を消去する。
ステップＳ２０３：プロセッサ１は、カウンタＸの初期化処理を実行する。
ステップＳ２０４：プロセッサ１は、各コアのクロック周波数及び処理負荷に基づいて、診断領域の分担を決定する。
ステップＳ２０５：プロセッサ１は、第Ｎコア（第１コア１１、第２コア１２）の分担領域の診断が終了したか否かを判定する。診断が終了した場合（ステップＳ２０５：Ｙｅｓ）、メモリ診断処理のサブルーチンを終了し、ステップＳ１０１に戻り、図１０に示すフローの処理を一旦終了する。一方、診断が終了していない場合（ステップＳ２０５：Ｎｏ）、ステップＳ２０６の処理に移行する。
ステップＳ２０６：プロセッサ１は、カウンタＸに基づいて、分割したブロックのメモリの領域Ｘを診断する。
ステップＳ２０７：プロセッサ１は、カウンタＸの更新処理を行う。そして、メモリ診断処理のサブルーチンを終了し、ステップＳ１０２に戻り、図１０に示すフローの処理を一旦終了する。
【００４２】
なお、メモリ診断の周期毎に比率を見直す場合、例えば、１０ｍｓｅｃ毎であってもよく、又は、１００ｍｓｅｃ毎であってもよく、メモリ診断に適した時間であれば、任意に設定してよい。
以上より、第５実施形態では、各コアのクロック周波数及び処理負荷を考慮して、メモリ診断する領域のブロックの比率を決定するので、メモリ診断の効率化や高速化を実現できる。
【００４３】
[第６実施形態]
第６実施形態では、メモリ診断する領域のブロックの比率を予め決定せずに、各コアのバックグランド処理により、メモリ診断を行う。つまり、第１コア１１及び第２コア１２は、当該ブロックの診断が終了した場合、次の未診断ブロックを診断する。
【００４４】
図１４に示す第６実施形態におけるメモリ診断の処理の一例において、図１４（ａ）に示す通り、第１コア１１がＲＯＭ２の第１ブロック目（ｎ＝１）の診断を開始し、第２コア１２がＲＯＭ２の第２ブロック目（ｎ＝２）の診断を開始する。なお、説明をわかりやすくするため、図１４（ａ）から図１４（ｃ）において、各ブロックに通し番号を付与している。
ここで、図１４（ｂ）において、第１コア１１が第１ブロック目の診断を終了した場合、第２コア１２が第２ブロック目を診断中であれば、第１コア１１は、次の未診断の第３ブロック目（ｎ＝３）を診断する。また、図１４（ｃ）において、第２コア１２が第２ブロック目の診断を終了した場合、第１コア１１が例えば第６ブロック目（ｎ＝６）を診断中であれば、第２コア１１は、次の未診断の第７ブロック目（ｎ＝７）を診断する。以下、同様に処理をしていく。
【００４５】
なお、診断済みのブロックの判定方法は、例えば、メモリブロック毎に対になるフラグを持つことにより実現できる。診断開始フラグは、診断開始時にセットし、診断終了時に診断終了フラグをセットする。これにより、第１コア１１、第２コア１２は、診断開始フラグがセットされていないブロックを未診断のブロックであると判断できる。
【００４６】
図１５に示す第６実施形態におけるメモリ診断のタイミングチャートの一例において、第１コア１１、第２コア１２は、空き時間（Ｔ３）にメモリ診断の処理を行う。
具体的には、プロセッサ１は、図１６に示すバックグランド処理のフローの処理を行う。なお、図１５は、図８と同様のタイミングチャートであるが、バックグランド処理が追加されている。
【００４７】
ステップＳ３０１：プロセッサ１は、ＲＯＭ２を分割したブロックのメモリの領域Ｘを診断する。
ステップＳ３０２：プロセッサ１は、ＲＯＭ２における当該対象のメモリの全領域について診断が終了したか否かを判定する。診断が終了していない場合（ステップＳ３０２：Ｎｏ）、後述するステップＳ３０５に移行する。一方、診断が終了した場合（ステップＳ３０２：Ｙｅｓ）、ステップＳ３０３の処理に移行する。
ステップＳ３０３：プロセッサ１は、各領域の診断済みの情報を消去する。
ステップＳ３０４：プロセッサ１は、カウンタＸの初期化を行う。そして、図１６に示すフローの処理を終了する。そして、プロセッサ１は、再度バックグランドの処理の実行時に、図１６に示すフローの処理を開始する。つまり、図１６のフローの処理は、終了の指示がない限り、常に繰り返されて実行される。
ステップＳ３０５：プロセッサ１は、カウンタＸの更新処理を行う。
ステップＳ３０６：プロセッサ１は、領域Ｘが末診断であるか否かを判定する。領域Ｘが診断済みである場合（ステップＳ３０６：Ｎｏ）、ステップＳ３０２の処理に戻る。一方、領域Ｘが末診断の場合（ステップＳ３０６：Ｙｅｓ）、図１６に示すフローの処理を終了する。そして、プロセッサ１は、再度バックグランドの処理の実行時に、図１６に示すフローの処理を開始する。
以上より、第６実施形態では、空き時間にバックグランド処理にてメモリ診断を行うことにより、メモリ診断の効率化を実現できる。
【００４８】
[第７実施形態]
第７実施形態では、複数コアにより、相互にメモリ診断を行う。例えば、第１コア１１によるメモリ診断の結果が異常であった場合には、その異常を診断した第１コア１１とは異なる第２コア１２が、異常と診断されたメモリの領域に対してメモリ診断を再度行う。
【００４９】
また、図１において、第１コア１１が第２コア用領域２２のメモリ診断を行い、第２コア１２が第１コア用領域２１のメモリ診断を行うようにしてもよい。また、第７実施形態では、各コアが使用するＲＯＭ２の領域について、そのＲＯＭ２の領域を使用しない他のコアがメモリ診断を行えればよい。
【００５０】
以上より、第７実施形態によれば、例えば、第１コア１１の方に異常が発生した場合、第２コア１２が第１コア用領域２１のメモリ診断することで、正常であれば、第１コア１１の方に異常が発生したことがわかる。したがって、異常が発生した第１コア１１が、その領域を正常と誤診断することを防ぐことができるので、メモリ診断の効率化を実現できる。なお、図１において、第１コア１１、第２コア１２がそれぞれ、第１コア用領域２１及び第２コア領域２２についてクロスチェックを行うようにしてもよい。これにより、メモリ診断の精度を向上させることができる。
【００５１】
[第８実施形態]
第８実施形態では、メモリ診断に関して、ＲＡＭ３で行う。第８実施形態におけるメモリ診断の処理の一例において、図１７に示す第１コア１１と第２コア１２とは、ＲＡＭ３のメモリ診断の領域を例えば均等に２つに分割して、それぞれ、メモリ診断を行う。具体的には、第１コア１１は、第１ＲＡＭ領域３１をメモリ診断し、第２コア１２は、第２ＲＡＭ領域３２をメモリ診断する。この際、第１コア１１と第２コア１２とは、上記実施形態の何れかのメモリ診断方法を適宜適用することができる。
【００５２】
なお、第１コア１１と第２コア１２とは、ＲＡＭ診断の一例として、検査値を読み込んでから読み出して比較するベリファイ方式で行う。図１７から明らかなように、各コアが分担して診断すれば、全領域の診断終了までの時間が短縮できる。さらに、第８実施形態では、上述したＲＯＭ２のメモリ診断と同様、メモリ診断する領域の分担比率を変えることにより、効率的に診断できる。また、第８実施形態では、デュアルコアを例示しているが、これに限定されず、他のマルチコアの構成であってもよい。
以上より、第８実施形態によれば、ＲＡＭ３のメモリ診断においても、上述したＲＯＭ２のメモリ診断と同様の効果が得られる。
【符号の説明】
【００５３】
１…プロセッサ
１１…第１コア
１２…第２コア
２…ＲＯＭ
２１…第１コア用領域
２２…第２コア用領域
３…ＲＡＭ
４…バス
１００…電子制御装置
【図１】
2015184796.tif 000003
【図２】
2015184796.tif 000004
【図３】
2015184796.tif 000005
【図４】
2015184796.tif 000006
【図５】
2015184796.tif 000007
【図６】
2015184796.tif 000008
【図７】
2015184796.tif 000009
【図８】
2015184796.tif 000010
【図９】
2015184796.tif 000011
【図１０】
2015184796.tif 000012
【図１１】
2015184796.tif 000013
【図１２】
2015184796.tif 000014
【図１３】
2015184796.tif 000015
【図１４】
2015184796.tif 000016
【図１５】
2015184796.tif 000017
【図１６】
2015184796.tif 000018
【図１７】
2015184796.tif 000019