(57)【要約】【課題】一方のコアから他方のコアに割込みによりイベントを通知する際、イベントの誤通知を検知できるマイコンを提供すること。【解決手段】第１のコア５２と第２のコア５３間で通信する通信手段４３と、第１のコアと第２のコアが共有する共有メモリ５１と、外部信号を取得して第１の処理を実行し、第１の処理毎に所定情報を共有メモリに書き込む第１の処理手段５５と、通信手段を介して第２のコアに処理要求を出力する処理要求手段３３と、処理要求をトリガーに第２の処理を実行する第２の処理手段５６と、を有するマイコン１００において、第２のコアは、処理要求を受け付けた場合、共有メモリから最新の所定情報と前回の所定情報を読み出し、最新の所定情報と前回の所定情報に規定された関係がある場合のみ、第２の処理手段に第２の処理の実行を許可する比較手段５７、を有する。【選択図】図２
2012108786.tif 000002
【特許請求の範囲】
【請求項１】
第１のコア及び第２のコアと、
前記第１のコアと前記第２のコア間の通信を可能にする通信手段と、
前記第１のコアと前記第２のコアが共有する共有メモリと、
前記第１のコアが備える、外部信号を取得する毎に繰り返し第１の処理を実行し、前記第１の処理毎に所定情報を前記共有メモリに書き込む第１の処理手段と、
前記第１の処理毎に前記通信手段を介して前記第２のコアに処理要求を出力する処理要求手段と、
前記第２のコアが備える、前記処理要求をトリガーに第２の処理を実行する第２の処理手段と、を有するマイコンであって、
前記第２のコアは、前記処理要求を受け付けた場合、前記共有メモリから最新の前記所定情報と前回の前記所定情報を読み出し、最新の前記所定情報と前回の前記所定情報に規定された関係がある場合のみ、前記第２の処理手段に前記第２の処理の実行を許可する比較手段、を有することを特徴とするマイコン。
【請求項２】
前記比較手段は、最新の前記所定情報と前回の前記所定情報に規定された関係がない場合、前記処理要求が誤通知であると判定する、
ことを特徴とする請求項１記載のマイコン。
【請求項３】
前記比較手段は、最新の前記所定情報と前回の前記所定情報に規定された関係がある場合、前記共有メモリの最新の前記所定情報を前回の前記所定情報にコピーする、
ことを特徴とする請求項１又は２記載のマイコン。
【請求項４】
前記規定された関係は、最新の前記所定情報と前回の前記所定情報が異なることである、ことを特徴とする請求項１〜３いずれか１項記載のマイコン。
【請求項５】
前記第１の処理手段は、前記第１の処理毎に数値が大きくなる前記第１の処理の処理結果を前記所定情報として前記共有メモリに記憶し、
前記規定された関係は、最新の前記所定情報が前回の前記所定情報よりも大きいことである、ことを特徴とする請求項４記載のマイコン。
【請求項６】
前記第１の処理手段を備えた第３のコアと、
前記第２の処理手段及び前記比較手段を備えた第４のコアと、を有し、
前記第２のコアと前記第４のコアの前記比較手段は、最新の前記所定情報と前回の前記所定情報に規定された関係がなかった回数をそれぞれカウントして、
２つの前記回数の違いが閾値を超えた場合、前記回数が多い方の前記第１のコアと前記第２のコア又は前記第３のコアと前記第４のコアが有する、前記第１の処理手段、前記第２の処理手段及び前記比較手段を停止する、
ことを特徴とする請求項１〜５いずれか１項記載のマイコン。
【請求項７】
前記第２の処理手段及び前記比較手段を備えた第３のコアを有し、
前記第２のコアと前記第３のコアの前記比較手段は、最新の前記所定情報と前回の前記所定情報に規定された関係がなかった回数をそれぞれカウントし、
前記第２のコアの前記第２の処理手段は、前記第３のコアの前記第２の処理手段の処理結果が自己の前記第２の処理手段の処理結果と略一致する場合に処理結果を制御に用い、
前記第３のコアの前記第２の処理手段の処理結果が自己の前記第２の処理手段の処理結果と略一致しない場合、
前記第２のコアの前記第２の処理手段は、自己の前記回数が前記第３のコアの前記回数よりも少ない場合に前記第３のコアの前記第２の処理手段及び前記比較手段を停止し、
自己の前記回数が前記第３のコアの前記回数よりも多い場合に自己の前記第２の処理手段及び前記比較手段を停止する、
ことを特徴とする請求項１〜５いずれか１項記載のマイコン。
【請求項８】
前記第１の処理はクランク角をカウントする処理であり、前記第２の処理は、イグナイタの通電タイミングの決定及びイグナイタの点火開始タイミングの決定、又は、インジェクタによる燃料噴射量の決定及び燃料噴射タイミングの決定である、
ことを特徴とする請求項１〜７いずれか１項記載のマイコン。
【請求項９】
複数のコアを有するマイコンの処理同期方法であって、
第１のコアの第１の処理手段が、外部信号を取得する毎に繰り返し第１の処理を実行し、前記第１の処理毎に所定情報を前記第１のコアと第２のコアが共有する前記共有メモリに書き込むステップと、
前記第１のコアの処理要求手段が、前記第１のコアと前記第２のコア間の通信を可能にする通信手段を介して前記第１の処理毎に前記第２のコアに処理要求を出力するステップと、
前記第２のコアの比較手段が、前記処理要求を受け付けた場合、前記共有メモリから最新の前記所定情報と前回の前記所定情報を読み出し、最新の前記所定情報と前回の前記所定情報に規定された関係がある場合のみ、第２の処理手段に第２の処理の実行を許可するステップと、
前記第２のコアの前記第２の処理手段が前記処理要求をトリガーに前記第２の処理を実行するステップと、
を有する処理同期方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のコアが同期しながら処理を実行するマイコンに関し、特に、同期の誤検知を検出できるマイコンに関する。
【背景技術】
【０００２】
車両のエンジンは電子制御装置により種々の制御が行われている。例えば、燃焼室への燃料噴射タイミングの決定、イグナイタの点火タイミング、燃料噴射量の決定などは電子制御装置が演算やマップ引きなどにより行っている。このようなエンジン制御はクランク角に応じた適切なタイミングで行うことが好ましく、電子制御装置はＮＥセンサの信号の入力に基づきエンジン制御に付随する処理を開始する。
【０００３】
ここで、電子制御装置においてもＣＰＵのマルチコア化が図れるようになってきたため、エンジン制御に関する種々の制御を複数のコアで分担する技術が考案されている（例えば、特許文献１参照。）。特許文献１には、エンジン制御のための処理に関する割り込み要求をマスターコアがスレーブコアに対して行い、スレーブコアが割り込み要求に応じたエンジン制御のための処理を行えない場合、エンジン制御のための処理に関する優先度を高く設定するマルチコアプロセッサが開示されている。
【０００４】
このように、エンジン制御のための処理を複数のコアで分担する場合、コア同士が処理を同期できるように、一方のコアが他方のコアに処理のタイミングを割込みにより通知することがある。
【０００５】
しかしながら、コア間の割込み要求を処理開始のタイミングとすると、割込みの誤通知が生じることがある。
図１は、割込みの誤通知を説明する図の一例である。時刻ｔ１にマスターコアがスレーブコアに割込みを利用したイベントを通知し、マスターコアとスレーブコアが並行にクランク同期処理を行っている。しかし、時刻ｔ２では、マスターコアがスレーブコアに割込みを利用してイベントを通知していないのに、スレーブコアが誤通知を受け付けている。このような誤通知は、外部からの攻撃的な手法（電気的なノイズ、割込み信号線の接触不良やショートなど）により極めて希であるが生じてしまうことがある。誤通知が生じると、スレーブコアは正しくないタイミングでクランク同期処理を行ってしまう。
【０００６】
ここで、コア間でデータの送信タイミングを通知する技術が考案されている（例えば、特許文献２参照。）。特許文献２には、メインＣＰＵはイベントデータを読み出した後、メモリに前回書き込んだ値と異なるデータを書き込み、サブＣＰＵはメモリを常時監視して、読み出した時に値が前回読み出した値と比較して変化がある場合、メモリからデータを読み出すマルチプロセッサが開示されている。特許文献２の技術であれば、割込みの代わりにデータの監視により、処理の開始を通知することができる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１０−１１３４１９号公報
【特許文献２】特開平０５−３４６９０８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、特許文献２に開示されたデータの送信タイミングの通知方法では、サブＣＰＵが定期的にメモリにアクセスする必要があるため、サブＣＰＵの処理負荷が大きいという問題がある。また、サブＣＰＵが常時監視するのでなく、メインＣＰＵがデータを書き込む定期的な周期でサブＣＰＵがメモリを監視すれば、サブＣＰＵの処理負荷を低減できる。しかしこの場合は、サブＣＰＵがタイマなどの不具合によりメモリにアクセスするタイミングを逸するおそれが生じる。
【０００９】
したがって、コア間の処理を同期させるには、割込みを利用しながら、処理のタイミングを正確に検出することが好ましいと考えられる。
【００１０】
本発明は、上記課題に鑑み、一方のコアから他方のコアに割込みによりイベントを通知する際、イベントの誤通知を検知できるマイコンを提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記課題に鑑み、本発明は、第１のコア及び第２のコアと、前記第１のコアと前記第２のコア間の通信を可能にする通信手段と、前記第１のコアと前記第２のコアが共有する共有メモリと、前記第１のコアが備える、外部信号を取得する毎に繰り返し第１の処理を実行し、前記第１の処理毎に所定情報を前記共有メモリに書き込む第１の処理手段と、前記第１の処理毎に前記通信手段を介して前記第２のコアに処理要求を出力する処理要求手段と、前記第２のコアが備える、前記処理要求をトリガーに第２の処理を実行する第２の処理手段と、を有するマイコンにおいて、前記第２のコアは、前記処理要求を受け付けた場合、前記共有メモリから最新の前記所定情報と前回の前記所定情報を読み出し、最新の前記所定情報と前回の前記所定情報に規定された関係がある場合のみ、前記第２の処理手段に前記第２の処理の実行を許可する比較手段、を有することを特徴とする。
【発明の効果】
【００１２】
一方のコアから他方のコアに割込みによりイベントを通知する際、イベントの誤通知を検知できるマイコンを提供することができる。
【図面の簡単な説明】
【００１３】
【図１】割込みの誤通知を説明する図の一例である。
【図２】電子制御装置の特徴部を模式的に説明する図の一例である。
【図３】電子制御装置により制御されるエンジンの概略構成図の一例である。
【図４】電子制御装置のハードウェア構成図の一例である。
【図５】電子制御装置の機能ブロック図の一例である。
【図６】電子制御装置の動作手順を示すフローチャート図の一例である。
【図７】スレーブコアが正常なイベント通知を取得した場合のシーケンス図の一例である。
【図８】スレーブコアがイベントの誤通知を取得した場合のシーケンス図の一例である。
【図９】電子制御装置の機能ブロック図の一例である（実施例２）。
【図１０】誤通知回数に基づく演算の停止処理を説明する図の一例である。
【図１１】電子制御装置の機能ブロック図の一例である（実施例３）。
【図１２】演算結果と誤通知回数に基づく演算処理の停止処理を説明する図の一例である。
【図１３】ハイブリッドＥＣＵと車載ＬＡＮを介して接続された電子制御装置を示す図の一例である。
【発明を実施するための形態】
【００１４】
以下、本発明を実施するための形態について図面を参照しながら説明する。
【実施例１】
【００１５】
図２は、本実施形態の電子制御装置の特徴部を模式的に説明する図の一例である。図２（ａ）はイベントの誤通知が生じていない場合のマスターコアとスレーブコアの処理手順を示す。
（Ａ１）マスターコアはＮＥセンサからの信号入力を取得すると処理（例えば、クランクカウンタ操作処理）を行い、処理結果を共有ＲＡＭの今回値に書き込む。
（Ａ２）マスターコアは処理が終わるとスレーブコアに割込みによるイベント通知を行う。
（Ａ３）スレーブコアはイベント通知をトリガーに、共有ＲＡＭの前回値と今回値を比較する。今回値は、（１）のマスターコアの書き込みが正常に終了していれば、必ず前回値と異なる。
（Ａ４）スレーブコアは今回値と前回値が異なっているはずであるという前提を利用して、今回値と前回値が異なっていれば、今回値を前回値に複写する。これにより、前回値と今回値が等しくなる（図ではどちらも３０になる）。
【００１６】
マスターコアからスレーブコアに正常にイベント通知が出力される場合には、（Ａ１）〜（Ａ４）が繰り返される。スレーブコアは、今回値と前回値が異なっている場合、処理（例えば、クランク同期処理）を実行する。
【００１７】
図２（ｂ）はイベントの誤通知が生じた場合のマスターコアとスレーブコアの処理手順を示す。
（Ｂ１）マスターコアがイベント通知する前に、イベントの誤通知がスレーブコアに出力される。この場合、マスターコアはＮＥセンサからの信号入力に基づく処理も今回値の更新も行っていないので、前回値と今回値が同じ状態のままである。
（Ｂ２）スレーブコアはイベントの誤通知をトリガーに、共有ＲＡＭの前回値と今回値を比較する。
（Ｂ３）しかし、前回値と今回値が同じなので、スレーブコアはイベント通知は誤通知であったことを検出できる。イベントの誤通知を検出したスレーブコアは処理（例えば、クランク同期処理）を実行しないので、正常でないタイミングの処理を行うことを防止できる。
【００１８】
〔構成〕
図３は、電子制御装置１００により制御されるエンジン２００の概略構成図の一例を示す。エンジン２００は、ピストン１７の往復運動を回転運動に変換するレシプロエンジンである。図では気筒が１つだが通常のエンジン２００は直列又はＶ時方向に複数の気筒を有し、各気筒のコネクティングロッド１８が１つのクランクシャフト２０に接続されている。
【００１９】
気筒内には、コネクティングロッド１８と連結されたピストン１７が収容され、気筒の内周面とピストン１７によって燃焼室が形成される。燃焼室には、燃料を噴射するインジェクタ１６、燃焼室で空気と燃料との混合気に点火するイグナイタ１３とが設けられている。燃焼室には、吸気バルブ１５で仕切られた吸入空気を供給する吸気通路１４と、燃焼後の排気が排出される排気バルブ１２で仕切られた排気通路１１が接続されている。
【００２０】
クランクシャフト２０の一端にはクランクシャフトタイミングロータ１９が同軸に固定されており、クランクシャフトタイミングロータ１９の外縁に対向してクランクポジションセンサ（以下、ＮＥセンサという）２１が配置されている。ＮＥセンサ２１の原理はどのようなものでもよいが、例えば、クランクシャフトタイミングロータ１９の円周に等間隔に突起部を設けておき、クランクシャフト２０の回転により突起部が移動することで生じる突起部とＮＥセンサ２１のエアギャップの変化を利用する。ＮＥセンサ２１はコイルを有しておりエアギャップの変化により起電力を検出できるので、起電力の周期的な変化からクランクシャフト２０の回転角を検出できる。
【００２１】
また、クランクシャフトタイミングロータ１９の突起部は一箇所だけ欠けており、ＮＥセンサ２１はこれよりクランクシャフト２０の基準角度（クランクシャフトが１回転したこと）を検出できるようになっている。クランクシャフトタイミングロータ１９は欠損部がピストン１７の上死点に一致するように取り付けられている。
【００２２】
ピストン１７が下死点付近まで移動するとタイミングベルトとカムの作用で吸気バルブ１５が開き、燃焼室に空気が吸気される。この時、電子制御装置（ＥＣＵ）１００は、クランク角に基づきピストン１７の位置を検出して、インジェクタ１６に燃料を噴射させる。その後、ピストン１７が上死点付近まで移動すると、電子制御装置１００は、クランク角に基づきピストン１７の位置を検出して、イグナイタ１３を通電し燃焼室の混合気に点火する。この燃焼工程によりピストン１７が上死点から下死点まで移動し再度、上死点方向に移動を始めると、タイミングベルトとカムの作用で排気バルブ１２が開き、燃焼室の燃焼ガスが排気される。このようなピストン１７の往復運動に伴い、クランクシャフト２０が回転し、車両の駆動輪に伝達される。
【００２３】
図４は、電子制御装置１００のハードウェア構成図の一例を示す。電子制御装置１００はプロセッサを備えたマイコンであればよい。電子制御装置１００は、マルチレイヤーバス３６を介して接続されたコア（区別する場合コア１、コア２という）３１、ＤＭＡＣ３５、ＳＤＲＡＭ３７、Ｉ／Ｏブリッジ３８及びＲＯＭ３９を有する。２つのコア３１は、それぞれＣＰＵ３２，ＩＮＴ３３及びＲＡＭ３４を有する。
【００２４】
ＣＰＵ３２は、ＩＦＵ（Instruction  Fetch  Unit）、ＤＥＣ（DECoder）、ＲＦ（Register  Fetch）、ＲＥＧ（REGister）、ＬＳＵ（Load  Store  Unit）、ＳＨ（ＳＨｉｆｔｅｒ）、ＡＬＵ、ＭＵＬ及びＦＰＵ等の演算回路を有し、パイプライン制御により１クロックで１命令を実行する。
【００２５】
ＲＡＭ１はコア１に専用のメモリ（一次キャッシュ）であり、ＲＡＭ２はコア２に専用のメモリ（一次キャッシュ）である。本実施形態のコア３１では、コア１がマスターコア、コア２がスレーブコアに割り当てられるが、出荷後に、コア１、２とマスターコアとスレーブコアの関係を適宜切り替え可能としてもよい。  
ＩＮＴ１とＩＮＴ２は、通信線４３を介してＣＰＵ間割り込みを制御すると共に、コア１からコア２又はコア２からコア１に、パラメータ等の送受信を制御する。また、ＩＮＴ１，ＩＮＴ２は、ＲＡＭ１、ＲＡＭ２、又は、ＳＤＲＡＭ３７を共有の通信用メモリ（共有メモリ）にしてパラメータ等を送受信することもできる。
【００２６】
ＤＭＡＣ３５は、コア１及びコア２から要求を受けてプログラム４０をＳＤＲＡＭ３７、ＲＡＭ１、ＲＡＭ２に読み込んだり、周辺機器からのメモリアクセス要求を調停すると共に、Ｉ／Ｏブリッジ３８からＳＤＲＡＭ３７へ、又は、ＳＤＲＡＭ３７からＩ／Ｏブリッジ３８への、コア１、コア２を介することなくデータを転送する。ＳＤＲＡＭ３７は、コア１及びコア２にプログラム４０又はデータを提供するためのメモリ（二次キャッシュ）である。ＳＤＲＡＭ３７の少なくとも一部はコア１とコア２により共有される。
【００２７】
ＲＯＭ３９には後述するプログラム４０や、ＯＳやデバイスドライバ（プラットフォーム）も記憶されている。
【００２８】
Ｉ／Ｏブリッジ３８は、マルチレイヤーバス３６とＩ／Ｏバス４２の間で相互に周波数や電圧値などを変換する。Ｉ／Ｏバス４２には種々のＩ／Ｏ４１が接続されている。Ｉ／Ｏ４１は電子制御装置１００と外部の機器を接続するインタフェースであり、例えば、上記のＮＥセンサ２１、ＣＡＮコントローラ、各種のアクチュエータ、センサ、スイッチ等が接続される。
【００２９】
図５は、電子制御装置１００の機能ブロック図の一例を示す。図５では説明上、重要な部品についてのみ図示した。共有ＲＡＭ５１はＲＡＭ１，ＲＡＭ２又はＳＤＲＡＭ３７のいずれかでよく、マスターコア５２とスレーブコア５３は２つのコア１、コア２のいずれかである。なお、コア１とコア２は同様のハードウェア構造としているが、マスターコア５２とスレーブコア５３のハードウェア構造が異なっていてもよい。
【００３０】
マスターコア５２は、ＣＰＵ３２がプログラム４０を実行して実現するクランク同期処理部５４及びクランクカウンタ操作処理部５５を有し、スレーブコア５３はクランク同期処理部５６及びクランク同期処理実行可否判定処理部５７を有する。
【００３１】
まず、クランクカウンタ操作処理部５５は、ＮＥセンサ２１から入力されるＮＥセンサ信号に基づいて、エンジン回転角をカウントしたり、エンジン回転数を算出したりする。以下、これらの処理をクランクカウンタ操作処理と称する。ＮＥセンサ２１は突起部とのエアギャップにより形成される電圧波形をパルスに整形し、パルスの立ち上がりエッジと立ち下がりエッジの各検出時点（両方を区別せずにＮＥセンサ信号という）を示す信号をマスターコア５２に供給する。
【００３２】
クランクカウンタ操作処理部５５は、パルスの立ち上がりエッジの検出後、立ち下がりエッジが検出されると、クランクカウンタを１つ大きくする。クランクカウンタにより、１〜３６に分けられるクランクのステージと、エンジン回転角が示される。また、クランクカウンタ操作処理部５５は、パルスの立ち上がりエッジから立ち下がりエッジが検出されるまでの時間を計測して記憶しておき、次に、パルスの立ち上がりエッジから立ち下がりエッジが検出されるまでの時間と比較する。２つの時間は同程度であるが、１周に1回、突起部の欠損により２つの時間の比が倍以上（又は１／２以下）程度になる。この時、クランクシャフト２０が1回転したことになるので、２つの時間の比が最後に倍以上になった時から次に倍以上になるまでの時間からエンジン回転速度を求める。また、クランクカウンタ操作処理部５５は、２つの時間の比が倍以上となると、クランクカウンタの値を初期化する。本実施形態ではクランクカウンタの値を今回値としてクランクカウンタ操作処理部５５が共有ＲＡＭ５１に書き込むものとする。
【００３３】
従来からのクランク同期処理は、クランクカウンタに応じたイグナイタ１３の通電タイミングの決定、イグナイタ１３の点火開始タイミングの決定、及び、インジェクタ１６による燃料噴射タイミングの決定、等である。また、燃料噴射タイミングの決定の前に燃料噴射量も決定される。
【００３４】
本実施形態のように電子制御装置１００がマルチコアを有することで、クランク同期処理をマスターコア５２とスレーブコア５３で負荷分散することができ、より精緻なエンジン制御を可能とすることができる。例えば、従来ではクランクカウンタを２４のステージに区分していた場合でも、負荷分散することでより短いステージ間隔（３６ステージ）のクランク同期処理が可能になっている。
【００３５】
本実施形態では、マスターコア５２とスレーブコア５３がどのようなクランク同期処理を受け持つか設計できるが、例えば、マスターコア５２のクランク同期処理部５４がイグナイタ１３の通電タイミングの決定とイグナイタ１３の点火開始タイミングの決定を行い、スレーブコア５３のクランク同期処理部５６がインジェクタ１６による燃料噴射量の決定と燃料噴射タイミングの決定を行うとする。
【００３６】
クランクカウンタ操作処理部５５はクランクカウンタ操作処理の後、スレーブコア５３に割り込みする。スレーブコア５３の割り込みハンドラはこの割り込みをトリガーにクランク同期処理実行可否判定処理部５７を起動する。クランク同期処理実行可否判定処理部５７について詳細は後述するが、クランク同期処理実行可否判定処理部５７は、
（ａ）共有ＲＡＭ５１の今回値と前回値と比較する。
（ｂ）今回値と前回値が同じ場合、イベントの誤通知と判定してクランク同期処理部５６を呼び出さない。
（ｃ）今回値と前回値が異なる場合、正しいイベント通知と判定して、
(c-1)  共有ＲＡＭ５１の今回値を前回値にコピーする。
【００３７】
(c-2)  クランク同期処理部５６を呼び出す(実行する)。
【００３８】
この処理により、スレーブコア５３のクランク同期処理部５６は、イベントが正常に通知された場合にのみクランク同期処理を実行することができる。
【００３９】
〔動作手順〕
図６は、本実施例の電子制御装置１００の動作手順を示すフローチャート図の一例である。
まず、ＮＥセンサ２１がＮＥセンサ信号をマスターコア５２に送信する（Ｓ１０）。ＤＭＡＣ３５がＩ／Ｏブリッジ３８からマスターコア５２のＲＡＭ１に送信するとしてもよいし、不図示のＩＮＴＣ（割り込みコントローラ）がＮＥセンサ２１の割込み要求をＣＰＵに通知することで、マスターコア５２がＤＭＡＣ３５にＲＡＭ１にＮＥセンサ信号を記憶させてもよい。
【００４０】
次に、マスターコア５２はＮＥセンサ信号を受信する（Ｓ２０）。ＮＥセンサ信号を受信すると、クランクカウンタ操作処理部５５がクランクカウンタ操作処理を実行する（Ｓ３０）。クランクカウンタ操作処理を終えるとクランクカウンタ操作処理部５５はクランクカウンタを算出するので、クランクカウンタの今回値を共有ＲＡＭ５１に上書きする（Ｓ４０）。従来から、マスターコア５２はクランクカウンタ同期処理のためクランクカウンタを算出して共有ＲＡＭ５１に書き込む処理を行っているので、クランクカウンタ操作処理に大きな変更はなくコスト増を抑制できる。
【００４１】
なお、電子制御装置１００の起動直後、クランクカウンタ操作処理部５５は前回値を初期化しておく（例えば最大値（0xff）を設定）。電子制御装置１００の起動直後、クランクカウンタ操作処理部５５が今回値（例えばゼロ）を書き込んでも、必ず前回値と今回値を異ならせることができる。
【００４２】
次に、クランクカウンタ操作処理部５５はＩＮＴ１と通信線４３を介してスレーブコア５３に割り込みする（Ｓ５０）。この後、マスターコア５２ではクランク同期処理部５４がクランク同期処理を行う（Ｓ６０）
スレーブコア５３は割込みの受け付け処理を行う（Ｓ１００）。割込みの受け付け処理は主にＩＮＴ３３が受け持つが、この処理は、例えば、実行中の処理と割込み要求の優先度の判定、割込みを受け付けると判定した場合の実行中の処理のコンテキスト（レジスタの値、演算結果、スタックポインタの値等）の記憶等である。割込みを受け付けると、スレーブコア５３はクランク同期処理実行可否判定処理部５７を起動させる。
【００４３】
クランク同期処理実行可否判定処理部５７は、共有ＲＡＭ５１の前回値と今回値を比較する（Ｓ１１０）。すなわち、共有ＲＡＭ５１の今回値と前回値が記憶されたアドレスから今回値と前回値を読み出し比較する。今回値と前回値が記憶される共有ＲＡＭ５１のアドレスは予め決まっている。
【００４４】
今回値と前回値が一致する場合（Ｓ１２０のＹｅｓ）、クランク同期処理実行可否判定処理部５７はイベントの誤通知と判定する（Ｓ１３０）。この場合、スレーブコア５３はクランク同期処理を実行することなく、処理を終了する。
【００４５】
今回値と前回値が一致しない場合（Ｓ１２０のＮｏ）、クランク同期処理実行可否判定処理部５７は正常なイベント通知と判定する（Ｓ１４０）。なお、クランクカウンタは徐々に増えるのでイベント通知が正常であれば今回値と前回値は一致しないが、換言すると、今回値と前回値が一致しない情報であれば、マスターコア５２のクランクカウンタ操作処理部５５はどのような情報（数値、フラグ、記号、文字等）を共有メモリ５１の今回値に記録してもよいことになる。クランクカウンタ以外の情報を記録する場合、クランクカウンタ操作処理部５５は少なくとも連続して同じ値とならない情報を記録する。
【００４６】
次に、クランク同期処理実行可否判定処理部５７は、すでに読み出している今回値を共有ＲＡＭ５１の前回値にコピーする（Ｓ１５０）。
【００４７】
なお、共有メモリ５１に所定数（１０個程度）のクランクカウンタを記憶できるリングバッファを設けることで、クランク同期処理実行可否判定処理部５７が今回値を前回値にコピーすることを省略できる。この場合、クランク同期処理実行可否判定処理部５７はイベント通知に連動して増えるポインタ（今回値のアドレスを示す）を備えておき、ポインタの値に応じてリングバッファの隣接した２つのクランクカウンタを読み出せばよい。
【００４８】
次に、クランク同期処理実行可否判定処理部５７はクランク同期処理部５４を呼び出すので、クランク同期処理部５４はクランク同期処理を実行する（Ｓ１６０）。
【００４９】
以上のような処理により、スレーブコア５３は、外部から生じさせられた電気的なノイズ、割込み信号線の接触不良やショートによるイベントの誤通知を正常な通知と誤判定して、クランク同期処理を実行してしまうことを防止できる。
【００５０】
〔シーケンス〕
図７は、スレーブコア５３が正常なイベント通知を取得した場合のシーケンス図の一例である。
時刻ｔ１：マスターコア５２がＮＥセンサ信号を受信し、クランクカウンタ操作処理を実行する。
時刻ｔ２：マスターコア５２が今回値を共有ＲＡＭ５１に書き込む。
時刻ｔ３：マスターコア５２がスレーブコア５３にイベントを通知する。この後、マスターコア５２はクランク同期処理を実行する。
時刻ｔ４：スレーブコア５３が今回値と前回値を読み出し、イベントの誤通知か否かを判定する。イベントの誤通知でない場合、スレーブコア５３は今回値を前回値にコピーする。スレーブコア５３はクランク同期処理を実行する。
【００５１】
以降はＮＥセンサ２１がＮＥセンサ信号を出力する度に、一連の処理が繰り返される。
【００５２】
図８は、スレーブコア５３がイベントの誤通知を取得した場合のシーケンス図の一例である。時刻ｔ１〜ｔ４までの処理は図７と同様なので説明を省略する。
時刻ｔ５：ノイズなどによりスレーブコア５３がイベントの誤検知を取得する。スレーブコア５３は今回値と前回値を読み出すが、図示するように今回値と前回値は同じままなので、イベントの誤通知と判定する。この場合、スレーブコア５３は今回値を前回値にコピーせず、時刻６にてクランク同期処理を実行することもない。
【００５３】
以上説明したように、本実施例の電子制御装置１００は、一方のコアから他方のコアに割込みによりイベントを通知する際、イベントの誤通知を検知することができる。スレーブコア５３の処理負荷は従来よりも若干、増大するが、共有メモリを常に監視する場合と比べれば格段に小さい処理負荷に過ぎない。
【実施例２】
【００５４】
実施例１では２つのコアのみの存在を前提にマスターコア５２とスレーブコア５３の処理を説明したが、本実施例ではコアが４つある場合の、マスターコア５２とスレーブコア５３の処理を説明する。
【００５５】
図９は、電子制御装置１００の機能ブロック図の一例を示す。図９において図５と同一部の説明は省略する。図９の電子制御装置１００はマスターコア（区別するためマスターコアＡ、Ｂという）５２を２つ、スレーブコア（区別するためスレーブコアＡ、Ｂという）５３を２つそれぞれ有している。マスターコアＡとマスターコアＢは同じ機能を有し、スレーブコアＡとスレーブコアＢは同じ機能を有するが、エンジン２００は１つなので電子制御装置１００はいずれかの組の演算結果によりエンジン２００を制御すればよい。例えば、ＩＧ（イグニッション）・ＯＮの度に使用するマスターコアとスレーブコアの組を切り替えること、又は、常に２組のマスターコアとスレーブコアにより同じ演算を行い演算結果が一致する場合にエンジン制御を行うこと、などの利用態様がある。
【００５６】
本実施例のスレーブコアＡ、Ｂはクランク同期処理実行可否判定処理部５７が実施例１と同様のクランク同期処理の実行可否を判定するが、さらに以下の機能を有する。
・イベントの誤検知を検知する毎に、共有ＲＡＭ５１の誤通知回数を１つ大きくする。
・ＩＧ・ＯＦＦ時には共有ＲＡＭ５１の２つの誤通知回数Ａ、Ｂを不揮発メモリに退避する。
【００５７】
スレーブコアＡとスレーブコアＢのクランクカウンタ操作処理部５５は、誤通知を検知する度に、ＩＧ・ＯＮなどの起動時又は定期的に、２つの誤通知回数Ａ，Ｂを比較する。２つの誤通知回数Ａ，Ｂの差が所定値以上になると、誤通知回数の大きい方のスレーブコア５３が小さい方のスレーブコア５３に対し、処理停止要求を通知する。こうすることで、イベントの誤検知が多いスレーブコア５３とマスターコア５２の組の演算処理を回避することができ、演算結果の信頼性を向上させることができる。
【００５８】
図１０は、誤通知回数に基づく演算の停止処理を説明する図の一例である。図１０では、スレーブコアＡがイベントの誤通知を検出した後からの処理を説明するが、スレーブコアBがイベントの誤検知を検出した場合もスレーブコアＡとＢの処理が逆になるだけで処理の流れは同じである。
【００５９】
ステップＳ１３０でイベントの誤通知を検出したスレーブコアＡのクランク同期処理実行可否判定処理部５７は、誤通知回数をカウントアップする（Ｓ２１０）。本実施例では誤通知の検出をしたタイミングで、クランク同期処理実行可否判定処理部５７が２つの誤通知回数Ａ，Ｂを比較する（Ｓ２２０）。
【００６０】
クランク同期処理実行可否判定処理部５７は、誤通知回数Ａと誤通知回数Ｂの差の絶対値が閾値を超えたか否かを判定する（Ｓ２３０）。誤通知回数Ａと誤通知回数Ｂは同程度になるはずなので、この閾値は有意な差として、例えば誤通知回数Ａと誤通知回数Ｂのうち大きい方の２０〜３０％とする。
【００６１】
誤通知回数Ａと誤通知回数Ｂの差の絶対値が閾値を超えていない場合（Ｓ２３０のＮｏ）、クランク同期処理実行可否判定処理部５７は何もせず図のフローを終了する。
【００６２】
誤通知回数Ａと誤通知回数Ｂの差の絶対値が閾値を超えている場合（Ｓ２３０のＹｅｓ）、誤通知回数が多い方のスレーブコア５３とマスターコア５２の組は信頼性が低下するおそれがあるので、クランク同期処理実行可否判定処理部５７は、誤通知回数が多い方のスレーブコア５３とマスターコア５２の組の処理を停止させる。
・誤通知回数Ａ−誤通知回数Ｂ＞閾値
クランク同期処理実行可否判定処理部５７は自身のマスターコアＡとスレーブコアＡの演算を停止させる。
・誤通知回数Ｂ−誤通知回数Ａ＞閾値
クランク同期処理実行可否判定処理部５７は他方のマスターコアＢとスレーブコアＢの演算を停止させる。
【００６３】
このため、クランク同期処理実行可否判定処理部５７は、停止指示又は停止通知を他方のスレーブコアＢに通知する（Ｓ２４０）。スレーブコアＢのクランク同期処理実行可否判定処理部５７は停止指示又は停止通知を受信する（Ｓ２５０）。
【００６４】
停止指示の場合、スレーブコアＢのクランク同期処理実行可否判定処理部５７はマスターコアＢと通信するなどして、停止のための処理（制御中のアクチュエータなどの退避、設定の保存等）を行い、停止可能になると停止指示を受け付けたことをスレーブコアＡに通知する（Ｓ２６０）。
【００６５】
スレーブコアＡが停止する場合（停止通知の場合）、スレーブコアＢのクランク同期処理実行可否判定処理部５７は停止通知を受け付けたことをスレーブコアＡに通知する（Ｓ２６０）。
【００６６】
これにより、スレーブコアＡとＢは停止指示又は停止に必要な処理を行う（Ｓ２７０、Ｓ２８０）。停止する側のスレーブコア５３とマスターコア５２は、演算を継続するスレーブコア５３とマスターコア５２に必要な変数などがあれば共有メモリに書き出して、電力供給をオフにする。停止しない側のスレーブコア５３とマスターコア５２は、演算を停止するスレーブコア５３とマスターコア５２から必要な変数などがあれば共有メモリから読み出して、そのまま演算を継続する。
【００６７】
以上説明したように、本実施例ではコアが４つあることを利用して、イベントの誤検知が多いマスターコアとスレーブコアを停止させるので、演算結果の信頼性を向上させることができる。
【実施例３】
【００６８】
実施例２では誤検知回数からマスターコア５２とスレーブコア５３の組の信頼性の低下を検出したが、本実施例では２つの演算結果が一致する場合にエンジン制御する電子制御装置１００において、演算結果が一致しない場合に誤通知回数を利用してスレーブコア５３の信頼性の低下を検出する電子制御装置１００について説明する。
【００６９】
すなわち、誤通知回数が多いスレーブコア５３はノイズなどの影響を受けやすく正しい演算結果が得られにくいと推測して、スレーブコア５３の信頼性の低下を検出することができる。
【００７０】
図１１は、電子制御装置１００の機能ブロック図の一例を示す。図１１において図５と同一部の説明は省略する。図１１の電子制御装置１００は１つのマスターコア５２と、２つのスレーブコア５３（スレーブコアＡ、Ｂ）を有している。スレーブコアＡとスレーブコアＢは同じ機能を有するが、本実施例ではスレーブコアＢは演算結果をエンジン制御に利用することなく、共有メモリ５１に書き出すものとする。そして、スレーブコアＡのクランク同期処理部５６は、共有メモリ５１から演算結果を読み出し、自己の演算結果と比較して、略一致するかどうかによりスレーブコアＡとスレーブコアＢの信頼性を検証する。
【００７１】
なお、スレーブコアＡが演算結果を共有メモリ５１に書き出してスレーブコアＢが自己の演算結果と比較してもよいし、スレーブコアＡとスレーブコアＢが共に演算結果を共有メモリに書き出して、不図示のスレーブコアＣが演算結果を比較することもできる。
【００７２】
スレーブコアＡは、演算結果が例えば所定回数以上異なった場合、誤通知回数Ａと誤通知回数Ｂの大きい方のスレーブコア５３に異常があると推定し、その後の演算を中止させる。こうすることで、誤通知回数の大小だけでなく、演算結果を利用して、異常が生じている可能性の高いスレーブコア５３や通信線ン４３の断線やショートを特定することができる。また、実施例２では誤通知回数Ａ、Ｂの差の絶対値が閾値を超える必要があったが、本実施例では誤通知回数Ａ、Ｂの差の絶対値が閾値を超えなくても異常のある可能性の高いスレーブコア５３を特定できる。
【００７３】
図１２は、演算結果と誤通知回数に基づく演算処理の停止処理を説明する図の一例である。図１２では、スレーブコアＡ、Ｂがクランク同期処理を開始する時以降の手順を説明する。
【００７４】
まず、スレーブＢのクランク同期処理部５６がクランク同期処理の演算結果を共有メモリに書き込む（Ｓ３１０）。書き込んだ場合、クランク同期処理部５６はスレーブコアＡに割込みやコア間通信により通知することが好ましい。
【００７５】
スレーブコアＡのクランク同期処理部５６もほぼ同時期にクランク同期処理を終了させる（Ｓ３２０）。クランク同期処理部５６は共有メモリ５１の演算結果を読み出して、自身の演算結果と一致するか否かを判定する（Ｓ３３０）。なお、演算結果の有効桁数や丸め方にもよるが、どちらのスレーブコアＡ，Ｂも正常だが演算結果が完全には一致しないことがあるので、一致したと見なせる範囲（例えば、数％〜１０％程度の違い）を設けて、一致判定する。
【００７６】
２つの演算結果が一致した場合（Ｓ３３０のＹｅｓ）、スレーブコアＡのクランク同期処理部５６は自己の演算結果を用いてエンジン２００を制御する（Ｓ３４０）。
【００７７】
２つの演算結果が一致しない場合（Ｓ３３０のＮｏ）、スレーブコアＡのクランク同期処理部５６は、誤通知回数Ａと誤通知回数Ｂを共有メモリ５１から読み出し、比較する（Ｓ３５０）。そして、クランク同期処理部５６は誤通知回数の大小に応じて停止指示又は停止の処理を実行する（Ｓ３６０）。
【００７８】
・誤通知回数Ａ＞誤通知回数Ｂの場合
スレーブコアＡのクランク同期処理部５６は、スレーブコアＢにクランク同期処理を依頼する。これにより、以降は、スレーブコアＢのクランク同期処理部５６がクランク同期処理の演算結果を用いてエンジン２００を制御することができる。なお、以降は、スレーブコアＢのクランク同期処理部５６は共有メモリ５１に演算結果を書き出さなくてよい。
【００７９】
・誤通知回数Ａ＜誤通知回数Ｂの場合、
スレーブコアＡのクランク同期処理部５６は、スレーブコアＢにクランク同期処理の停止を依頼する。これにより、以降は、スレーブコアＢのクランク同期処理部５６はクランク同期処理を行わず、共有メモリ５１に演算結果を書き出すこともしない。また、スレーブコアＡのクランク同期処理部５６は、自己のクランク同期処理の演算結果によりエンジン２００を制御する。
【００８０】
・誤通知回数Ａ＝誤通知回数Ｂの場合、
この場合、演算結果が一致しないことがイベントの誤検知とは異なる原因の可能性もあるので、例えば、マスターコア５２にスレーブコア５３のクランク同期処理を依頼し、スレーブコアＡとスレーブコアＢの演算結果のどちらが正しいかを検証する、又は、第４のコアにスレーブコア５３のクランク同期処理を依頼し、スレーブコアＡとスレーブコアＢの演算結果のどちらが正しいかを検証する、ことができる。スレーブコアＡとスレーブコアＢの演算結果のどちらが正しいかが分かれば、正しくない方のスレーブコア５３にクランク同期処理の停止を依頼する。
【００８１】
以上説明したように、本実施例の電子制御装置１００は、誤通知回数が多いスレーブコア５３はノイズなどの影響を受けやすく正しい演算結果が得られにくいと推定して、スレーブコア５３の信頼性の低下を検出することができる。
【実施例４】
【００８２】
本実施例ではハイブリッド車両に電子制御装置１００が搭載された場合に、イベントの誤通数を検出することを停止する電子制御装置１００について説明する。
【００８３】
図１３は、ハイブリッドＥＣＵ１０１と車載ＬＡＮを介して接続された電子制御装置（エンジンＥＣＵ）１００を示す図の一例である。ハイブリッドＥＣＵ１０１は、バッテリ残量、アクセルペダルの踏み込み量、車速等に基づき、パワーモード、エコモード、又は、ＥＶモードの３つのモードに切り替えることができる。このうちＥＶモードは電気モータだけで走行するモードでエンジン２００は強制的に停止される。
【００８４】
ＥＶモードにおいても電子制御装置１００には電力が供給され、ＮＥセンサ２１がＮＥセンサ信号を出力すれば、クランクカウンタ操作処理やクランク同期処理が実行され得る状態にある。しかし、ＥＶモードでは、エンジン２００が停止しているためＮＥセンサ信号が出力されるはずがなく、マスターコア５２からスレーブコア５３にイベント通知が出力されるはずがない。
【００８５】
したがって、本実施例のようにハイブリッド車に搭載された電子制御装置１００は、ＥＶモードであることを検出すると、クランク同期処理実行可否判定処理部５７が、イベントの通知を受け付けただけでそれが誤通知であることを検出できる。したがって、今回値と前回値の比較をしてイベントの誤通知を検出する必要がない。
【００８６】
また、誤通知回数の差に基づき停止するマスターコア５２とスレーブコア５３を決定する場合、及び、複数のスレーブコア５３がクランク同期処理を実行して演算結果が一致した場合にエンジン制御する場合、ＥＶモードにおける誤通知回数をカウントしておけば、信頼性の高いスレーブコア５３を特定しやすくなる。
【００８７】
本実施例の電子制御装置１００は、ハイブリッド車に搭載された場合、ＥＶモードを利用してイベントの誤検知を容易に検出することができる。
【符号の説明】
【００８８】
２１      ＮＥセンサ
５１      共有メモリ
５２      マスターコア
５３      スレーブコア
５４、５６      クランク同期処理部
５５      クランクカウンタ操作処理部
５７      クランク同期実行可否判定処理部
１００    電子制御装置
２００    エンジン
【図１】
2012108786.tif 000003
【図２】
2012108786.tif 000004
【図３】
2012108786.tif 000005
【図４】
2012108786.tif 000006
【図５】
2012108786.tif 000007
【図６】
2012108786.tif 000008
【図７】
2012108786.tif 000009
【図８】
2012108786.tif 000010
【図９】
2012108786.tif 000011
【図１０】
2012108786.tif 000012
【図１１】
2012108786.tif 000013
【図１２】
2012108786.tif 000014
【図１３】
2012108786.tif 000015