マイコン、処理同期方法
【課題】一方のコアから他方のコアに割込みによりイベントを通知する際、イベントの誤通知を検知できるマイコンを提供すること。
【解決手段】第1のコア52と第2のコア53間で通信する通信手段43と、第1のコアと第2のコアが共有する共有メモリ51と、外部信号を取得して第1の処理を実行し、第1の処理毎に所定情報を共有メモリに書き込む第1の処理手段55と、通信手段を介して第2のコアに処理要求を出力する処理要求手段33と、処理要求をトリガーに第2の処理を実行する第2の処理手段56と、を有するマイコン100において、第2のコアは、処理要求を受け付けた場合、共有メモリから最新の所定情報と前回の所定情報を読み出し、最新の所定情報と前回の所定情報に規定された関係がある場合のみ、第2の処理手段に第2の処理の実行を許可する比較手段57、を有する。
【解決手段】第1のコア52と第2のコア53間で通信する通信手段43と、第1のコアと第2のコアが共有する共有メモリ51と、外部信号を取得して第1の処理を実行し、第1の処理毎に所定情報を共有メモリに書き込む第1の処理手段55と、通信手段を介して第2のコアに処理要求を出力する処理要求手段33と、処理要求をトリガーに第2の処理を実行する第2の処理手段56と、を有するマイコン100において、第2のコアは、処理要求を受け付けた場合、共有メモリから最新の所定情報と前回の所定情報を読み出し、最新の所定情報と前回の所定情報に規定された関係がある場合のみ、第2の処理手段に第2の処理の実行を許可する比較手段57、を有する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、複数のコアが同期しながら処理を実行するマイコンに関し、特に、同期の誤検知を検出できるマイコンに関する。
【背景技術】
【0002】
車両のエンジンは電子制御装置により種々の制御が行われている。例えば、燃焼室への燃料噴射タイミングの決定、イグナイタの点火タイミング、燃料噴射量の決定などは電子制御装置が演算やマップ引きなどにより行っている。このようなエンジン制御はクランク角に応じた適切なタイミングで行うことが好ましく、電子制御装置はNEセンサの信号の入力に基づきエンジン制御に付随する処理を開始する。
【0003】
ここで、電子制御装置においてもCPUのマルチコア化が図れるようになってきたため、エンジン制御に関する種々の制御を複数のコアで分担する技術が考案されている(例えば、特許文献1参照。)。特許文献1には、エンジン制御のための処理に関する割り込み要求をマスターコアがスレーブコアに対して行い、スレーブコアが割り込み要求に応じたエンジン制御のための処理を行えない場合、エンジン制御のための処理に関する優先度を高く設定するマルチコアプロセッサが開示されている。
【0004】
このように、エンジン制御のための処理を複数のコアで分担する場合、コア同士が処理を同期できるように、一方のコアが他方のコアに処理のタイミングを割込みにより通知することがある。
【0005】
しかしながら、コア間の割込み要求を処理開始のタイミングとすると、割込みの誤通知が生じることがある。
図1は、割込みの誤通知を説明する図の一例である。時刻t1にマスターコアがスレーブコアに割込みを利用したイベントを通知し、マスターコアとスレーブコアが並行にクランク同期処理を行っている。しかし、時刻t2では、マスターコアがスレーブコアに割込みを利用してイベントを通知していないのに、スレーブコアが誤通知を受け付けている。このような誤通知は、外部からの攻撃的な手法(電気的なノイズ、割込み信号線の接触不良やショートなど)により極めて希であるが生じてしまうことがある。誤通知が生じると、スレーブコアは正しくないタイミングでクランク同期処理を行ってしまう。
【0006】
ここで、コア間でデータの送信タイミングを通知する技術が考案されている(例えば、特許文献2参照。)。特許文献2には、メインCPUはイベントデータを読み出した後、メモリに前回書き込んだ値と異なるデータを書き込み、サブCPUはメモリを常時監視して、読み出した時に値が前回読み出した値と比較して変化がある場合、メモリからデータを読み出すマルチプロセッサが開示されている。特許文献2の技術であれば、割込みの代わりにデータの監視により、処理の開始を通知することができる。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特開2010−113419号公報
【特許文献2】特開平05−346908号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
しかしながら、特許文献2に開示されたデータの送信タイミングの通知方法では、サブCPUが定期的にメモリにアクセスする必要があるため、サブCPUの処理負荷が大きいという問題がある。また、サブCPUが常時監視するのでなく、メインCPUがデータを書き込む定期的な周期でサブCPUがメモリを監視すれば、サブCPUの処理負荷を低減できる。しかしこの場合は、サブCPUがタイマなどの不具合によりメモリにアクセスするタイミングを逸するおそれが生じる。
【0009】
したがって、コア間の処理を同期させるには、割込みを利用しながら、処理のタイミングを正確に検出することが好ましいと考えられる。
【0010】
本発明は、上記課題に鑑み、一方のコアから他方のコアに割込みによりイベントを通知する際、イベントの誤通知を検知できるマイコンを提供することを目的とする。
【課題を解決するための手段】
【0011】
上記課題に鑑み、本発明は、第1のコア及び第2のコアと、前記第1のコアと前記第2のコア間の通信を可能にする通信手段と、前記第1のコアと前記第2のコアが共有する共有メモリと、前記第1のコアが備える、外部信号を取得する毎に繰り返し第1の処理を実行し、前記第1の処理毎に所定情報を前記共有メモリに書き込む第1の処理手段と、前記第1の処理毎に前記通信手段を介して前記第2のコアに処理要求を出力する処理要求手段と、前記第2のコアが備える、前記処理要求をトリガーに第2の処理を実行する第2の処理手段と、を有するマイコンにおいて、前記第2のコアは、前記処理要求を受け付けた場合、前記共有メモリから最新の前記所定情報と前回の前記所定情報を読み出し、最新の前記所定情報と前回の前記所定情報に規定された関係がある場合のみ、前記第2の処理手段に前記第2の処理の実行を許可する比較手段、を有することを特徴とする。
【発明の効果】
【0012】
一方のコアから他方のコアに割込みによりイベントを通知する際、イベントの誤通知を検知できるマイコンを提供することができる。
【図面の簡単な説明】
【0013】
【図1】割込みの誤通知を説明する図の一例である。
【図2】電子制御装置の特徴部を模式的に説明する図の一例である。
【図3】電子制御装置により制御されるエンジンの概略構成図の一例である。
【図4】電子制御装置のハードウェア構成図の一例である。
【図5】電子制御装置の機能ブロック図の一例である。
【図6】電子制御装置の動作手順を示すフローチャート図の一例である。
【図7】スレーブコアが正常なイベント通知を取得した場合のシーケンス図の一例である。
【図8】スレーブコアがイベントの誤通知を取得した場合のシーケンス図の一例である。
【図9】電子制御装置の機能ブロック図の一例である(実施例2)。
【図10】誤通知回数に基づく演算の停止処理を説明する図の一例である。
【図11】電子制御装置の機能ブロック図の一例である(実施例3)。
【図12】演算結果と誤通知回数に基づく演算処理の停止処理を説明する図の一例である。
【図13】ハイブリッドECUと車載LANを介して接続された電子制御装置を示す図の一例である。
【発明を実施するための形態】
【0014】
以下、本発明を実施するための形態について図面を参照しながら説明する。
【実施例1】
【0015】
図2は、本実施形態の電子制御装置の特徴部を模式的に説明する図の一例である。図2(a)はイベントの誤通知が生じていない場合のマスターコアとスレーブコアの処理手順を示す。
(A1)マスターコアはNEセンサからの信号入力を取得すると処理(例えば、クランクカウンタ操作処理)を行い、処理結果を共有RAMの今回値に書き込む。
(A2)マスターコアは処理が終わるとスレーブコアに割込みによるイベント通知を行う。
(A3)スレーブコアはイベント通知をトリガーに、共有RAMの前回値と今回値を比較する。今回値は、(1)のマスターコアの書き込みが正常に終了していれば、必ず前回値と異なる。
(A4)スレーブコアは今回値と前回値が異なっているはずであるという前提を利用して、今回値と前回値が異なっていれば、今回値を前回値に複写する。これにより、前回値と今回値が等しくなる(図ではどちらも30になる)。
【0016】
マスターコアからスレーブコアに正常にイベント通知が出力される場合には、(A1)〜(A4)が繰り返される。スレーブコアは、今回値と前回値が異なっている場合、処理(例えば、クランク同期処理)を実行する。
【0017】
図2(b)はイベントの誤通知が生じた場合のマスターコアとスレーブコアの処理手順を示す。
(B1)マスターコアがイベント通知する前に、イベントの誤通知がスレーブコアに出力される。この場合、マスターコアはNEセンサからの信号入力に基づく処理も今回値の更新も行っていないので、前回値と今回値が同じ状態のままである。
(B2)スレーブコアはイベントの誤通知をトリガーに、共有RAMの前回値と今回値を比較する。
(B3)しかし、前回値と今回値が同じなので、スレーブコアはイベント通知は誤通知であったことを検出できる。イベントの誤通知を検出したスレーブコアは処理(例えば、クランク同期処理)を実行しないので、正常でないタイミングの処理を行うことを防止できる。
【0018】
〔構成〕
図3は、電子制御装置100により制御されるエンジン200の概略構成図の一例を示す。エンジン200は、ピストン17の往復運動を回転運動に変換するレシプロエンジンである。図では気筒が1つだが通常のエンジン200は直列又はV時方向に複数の気筒を有し、各気筒のコネクティングロッド18が1つのクランクシャフト20に接続されている。
【0019】
気筒内には、コネクティングロッド18と連結されたピストン17が収容され、気筒の内周面とピストン17によって燃焼室が形成される。燃焼室には、燃料を噴射するインジェクタ16、燃焼室で空気と燃料との混合気に点火するイグナイタ13とが設けられている。燃焼室には、吸気バルブ15で仕切られた吸入空気を供給する吸気通路14と、燃焼後の排気が排出される排気バルブ12で仕切られた排気通路11が接続されている。
【0020】
クランクシャフト20の一端にはクランクシャフトタイミングロータ19が同軸に固定されており、クランクシャフトタイミングロータ19の外縁に対向してクランクポジションセンサ(以下、NEセンサという)21が配置されている。NEセンサ21の原理はどのようなものでもよいが、例えば、クランクシャフトタイミングロータ19の円周に等間隔に突起部を設けておき、クランクシャフト20の回転により突起部が移動することで生じる突起部とNEセンサ21のエアギャップの変化を利用する。NEセンサ21はコイルを有しておりエアギャップの変化により起電力を検出できるので、起電力の周期的な変化からクランクシャフト20の回転角を検出できる。
【0021】
また、クランクシャフトタイミングロータ19の突起部は一箇所だけ欠けており、NEセンサ21はこれよりクランクシャフト20の基準角度(クランクシャフトが1回転したこと)を検出できるようになっている。クランクシャフトタイミングロータ19は欠損部がピストン17の上死点に一致するように取り付けられている。
【0022】
ピストン17が下死点付近まで移動するとタイミングベルトとカムの作用で吸気バルブ15が開き、燃焼室に空気が吸気される。この時、電子制御装置(ECU)100は、クランク角に基づきピストン17の位置を検出して、インジェクタ16に燃料を噴射させる。その後、ピストン17が上死点付近まで移動すると、電子制御装置100は、クランク角に基づきピストン17の位置を検出して、イグナイタ13を通電し燃焼室の混合気に点火する。この燃焼工程によりピストン17が上死点から下死点まで移動し再度、上死点方向に移動を始めると、タイミングベルトとカムの作用で排気バルブ12が開き、燃焼室の燃焼ガスが排気される。このようなピストン17の往復運動に伴い、クランクシャフト20が回転し、車両の駆動輪に伝達される。
【0023】
図4は、電子制御装置100のハードウェア構成図の一例を示す。電子制御装置100はプロセッサを備えたマイコンであればよい。電子制御装置100は、マルチレイヤーバス36を介して接続されたコア(区別する場合コア1、コア2という)31、DMAC35、SDRAM37、I/Oブリッジ38及びROM39を有する。2つのコア31は、それぞれCPU32,INT33及びRAM34を有する。
【0024】
CPU32は、IFU(Instruction Fetch Unit)、DEC(DECoder)、RF(Register Fetch)、REG(REGister)、LSU(Load Store Unit)、SH(SHifter)、ALU、MUL及びFPU等の演算回路を有し、パイプライン制御により1クロックで1命令を実行する。
【0025】
RAM1はコア1に専用のメモリ(一次キャッシュ)であり、RAM2はコア2に専用のメモリ(一次キャッシュ)である。本実施形態のコア31では、コア1がマスターコア、コア2がスレーブコアに割り当てられるが、出荷後に、コア1、2とマスターコアとスレーブコアの関係を適宜切り替え可能としてもよい。
INT1とINT2は、通信線43を介してCPU間割り込みを制御すると共に、コア1からコア2又はコア2からコア1に、パラメータ等の送受信を制御する。また、INT1,INT2は、RAM1、RAM2、又は、SDRAM37を共有の通信用メモリ(共有メモリ)にしてパラメータ等を送受信することもできる。
【0026】
DMAC35は、コア1及びコア2から要求を受けてプログラム40をSDRAM37、RAM1、RAM2に読み込んだり、周辺機器からのメモリアクセス要求を調停すると共に、I/Oブリッジ38からSDRAM37へ、又は、SDRAM37からI/Oブリッジ38への、コア1、コア2を介することなくデータを転送する。SDRAM37は、コア1及びコア2にプログラム40又はデータを提供するためのメモリ(二次キャッシュ)である。SDRAM37の少なくとも一部はコア1とコア2により共有される。
【0027】
ROM39には後述するプログラム40や、OSやデバイスドライバ(プラットフォーム)も記憶されている。
【0028】
I/Oブリッジ38は、マルチレイヤーバス36とI/Oバス42の間で相互に周波数や電圧値などを変換する。I/Oバス42には種々のI/O41が接続されている。I/O41は電子制御装置100と外部の機器を接続するインタフェースであり、例えば、上記のNEセンサ21、CANコントローラ、各種のアクチュエータ、センサ、スイッチ等が接続される。
【0029】
図5は、電子制御装置100の機能ブロック図の一例を示す。図5では説明上、重要な部品についてのみ図示した。共有RAM51はRAM1,RAM2又はSDRAM37のいずれかでよく、マスターコア52とスレーブコア53は2つのコア1、コア2のいずれかである。なお、コア1とコア2は同様のハードウェア構造としているが、マスターコア52とスレーブコア53のハードウェア構造が異なっていてもよい。
【0030】
マスターコア52は、CPU32がプログラム40を実行して実現するクランク同期処理部54及びクランクカウンタ操作処理部55を有し、スレーブコア53はクランク同期処理部56及びクランク同期処理実行可否判定処理部57を有する。
【0031】
まず、クランクカウンタ操作処理部55は、NEセンサ21から入力されるNEセンサ信号に基づいて、エンジン回転角をカウントしたり、エンジン回転数を算出したりする。以下、これらの処理をクランクカウンタ操作処理と称する。NEセンサ21は突起部とのエアギャップにより形成される電圧波形をパルスに整形し、パルスの立ち上がりエッジと立ち下がりエッジの各検出時点(両方を区別せずにNEセンサ信号という)を示す信号をマスターコア52に供給する。
【0032】
クランクカウンタ操作処理部55は、パルスの立ち上がりエッジの検出後、立ち下がりエッジが検出されると、クランクカウンタを1つ大きくする。クランクカウンタにより、1〜36に分けられるクランクのステージと、エンジン回転角が示される。また、クランクカウンタ操作処理部55は、パルスの立ち上がりエッジから立ち下がりエッジが検出されるまでの時間を計測して記憶しておき、次に、パルスの立ち上がりエッジから立ち下がりエッジが検出されるまでの時間と比較する。2つの時間は同程度であるが、1周に1回、突起部の欠損により2つの時間の比が倍以上(又は1/2以下)程度になる。この時、クランクシャフト20が1回転したことになるので、2つの時間の比が最後に倍以上になった時から次に倍以上になるまでの時間からエンジン回転速度を求める。また、クランクカウンタ操作処理部55は、2つの時間の比が倍以上となると、クランクカウンタの値を初期化する。本実施形態ではクランクカウンタの値を今回値としてクランクカウンタ操作処理部55が共有RAM51に書き込むものとする。
【0033】
従来からのクランク同期処理は、クランクカウンタに応じたイグナイタ13の通電タイミングの決定、イグナイタ13の点火開始タイミングの決定、及び、インジェクタ16による燃料噴射タイミングの決定、等である。また、燃料噴射タイミングの決定の前に燃料噴射量も決定される。
【0034】
本実施形態のように電子制御装置100がマルチコアを有することで、クランク同期処理をマスターコア52とスレーブコア53で負荷分散することができ、より精緻なエンジン制御を可能とすることができる。例えば、従来ではクランクカウンタを24のステージに区分していた場合でも、負荷分散することでより短いステージ間隔(36ステージ)のクランク同期処理が可能になっている。
【0035】
本実施形態では、マスターコア52とスレーブコア53がどのようなクランク同期処理を受け持つか設計できるが、例えば、マスターコア52のクランク同期処理部54がイグナイタ13の通電タイミングの決定とイグナイタ13の点火開始タイミングの決定を行い、スレーブコア53のクランク同期処理部56がインジェクタ16による燃料噴射量の決定と燃料噴射タイミングの決定を行うとする。
【0036】
クランクカウンタ操作処理部55はクランクカウンタ操作処理の後、スレーブコア53に割り込みする。スレーブコア53の割り込みハンドラはこの割り込みをトリガーにクランク同期処理実行可否判定処理部57を起動する。クランク同期処理実行可否判定処理部57について詳細は後述するが、クランク同期処理実行可否判定処理部57は、
(a)共有RAM51の今回値と前回値と比較する。
(b)今回値と前回値が同じ場合、イベントの誤通知と判定してクランク同期処理部56を呼び出さない。
(c)今回値と前回値が異なる場合、正しいイベント通知と判定して、
(c-1) 共有RAM51の今回値を前回値にコピーする。
【0037】
(c-2) クランク同期処理部56を呼び出す(実行する)。
【0038】
この処理により、スレーブコア53のクランク同期処理部56は、イベントが正常に通知された場合にのみクランク同期処理を実行することができる。
【0039】
〔動作手順〕
図6は、本実施例の電子制御装置100の動作手順を示すフローチャート図の一例である。
まず、NEセンサ21がNEセンサ信号をマスターコア52に送信する(S10)。DMAC35がI/Oブリッジ38からマスターコア52のRAM1に送信するとしてもよいし、不図示のINTC(割り込みコントローラ)がNEセンサ21の割込み要求をCPUに通知することで、マスターコア52がDMAC35にRAM1にNEセンサ信号を記憶させてもよい。
【0040】
次に、マスターコア52はNEセンサ信号を受信する(S20)。NEセンサ信号を受信すると、クランクカウンタ操作処理部55がクランクカウンタ操作処理を実行する(S30)。クランクカウンタ操作処理を終えるとクランクカウンタ操作処理部55はクランクカウンタを算出するので、クランクカウンタの今回値を共有RAM51に上書きする(S40)。従来から、マスターコア52はクランクカウンタ同期処理のためクランクカウンタを算出して共有RAM51に書き込む処理を行っているので、クランクカウンタ操作処理に大きな変更はなくコスト増を抑制できる。
【0041】
なお、電子制御装置100の起動直後、クランクカウンタ操作処理部55は前回値を初期化しておく(例えば最大値(0xff)を設定)。電子制御装置100の起動直後、クランクカウンタ操作処理部55が今回値(例えばゼロ)を書き込んでも、必ず前回値と今回値を異ならせることができる。
【0042】
次に、クランクカウンタ操作処理部55はINT1と通信線43を介してスレーブコア53に割り込みする(S50)。この後、マスターコア52ではクランク同期処理部54がクランク同期処理を行う(S60)
スレーブコア53は割込みの受け付け処理を行う(S100)。割込みの受け付け処理は主にINT33が受け持つが、この処理は、例えば、実行中の処理と割込み要求の優先度の判定、割込みを受け付けると判定した場合の実行中の処理のコンテキスト(レジスタの値、演算結果、スタックポインタの値等)の記憶等である。割込みを受け付けると、スレーブコア53はクランク同期処理実行可否判定処理部57を起動させる。
【0043】
クランク同期処理実行可否判定処理部57は、共有RAM51の前回値と今回値を比較する(S110)。すなわち、共有RAM51の今回値と前回値が記憶されたアドレスから今回値と前回値を読み出し比較する。今回値と前回値が記憶される共有RAM51のアドレスは予め決まっている。
【0044】
今回値と前回値が一致する場合(S120のYes)、クランク同期処理実行可否判定処理部57はイベントの誤通知と判定する(S130)。この場合、スレーブコア53はクランク同期処理を実行することなく、処理を終了する。
【0045】
今回値と前回値が一致しない場合(S120のNo)、クランク同期処理実行可否判定処理部57は正常なイベント通知と判定する(S140)。なお、クランクカウンタは徐々に増えるのでイベント通知が正常であれば今回値と前回値は一致しないが、換言すると、今回値と前回値が一致しない情報であれば、マスターコア52のクランクカウンタ操作処理部55はどのような情報(数値、フラグ、記号、文字等)を共有メモリ51の今回値に記録してもよいことになる。クランクカウンタ以外の情報を記録する場合、クランクカウンタ操作処理部55は少なくとも連続して同じ値とならない情報を記録する。
【0046】
次に、クランク同期処理実行可否判定処理部57は、すでに読み出している今回値を共有RAM51の前回値にコピーする(S150)。
【0047】
なお、共有メモリ51に所定数(10個程度)のクランクカウンタを記憶できるリングバッファを設けることで、クランク同期処理実行可否判定処理部57が今回値を前回値にコピーすることを省略できる。この場合、クランク同期処理実行可否判定処理部57はイベント通知に連動して増えるポインタ(今回値のアドレスを示す)を備えておき、ポインタの値に応じてリングバッファの隣接した2つのクランクカウンタを読み出せばよい。
【0048】
次に、クランク同期処理実行可否判定処理部57はクランク同期処理部54を呼び出すので、クランク同期処理部54はクランク同期処理を実行する(S160)。
【0049】
以上のような処理により、スレーブコア53は、外部から生じさせられた電気的なノイズ、割込み信号線の接触不良やショートによるイベントの誤通知を正常な通知と誤判定して、クランク同期処理を実行してしまうことを防止できる。
【0050】
〔シーケンス〕
図7は、スレーブコア53が正常なイベント通知を取得した場合のシーケンス図の一例である。
時刻t1:マスターコア52がNEセンサ信号を受信し、クランクカウンタ操作処理を実行する。
時刻t2:マスターコア52が今回値を共有RAM51に書き込む。
時刻t3:マスターコア52がスレーブコア53にイベントを通知する。この後、マスターコア52はクランク同期処理を実行する。
時刻t4:スレーブコア53が今回値と前回値を読み出し、イベントの誤通知か否かを判定する。イベントの誤通知でない場合、スレーブコア53は今回値を前回値にコピーする。スレーブコア53はクランク同期処理を実行する。
【0051】
以降はNEセンサ21がNEセンサ信号を出力する度に、一連の処理が繰り返される。
【0052】
図8は、スレーブコア53がイベントの誤通知を取得した場合のシーケンス図の一例である。時刻t1〜t4までの処理は図7と同様なので説明を省略する。
時刻t5:ノイズなどによりスレーブコア53がイベントの誤検知を取得する。スレーブコア53は今回値と前回値を読み出すが、図示するように今回値と前回値は同じままなので、イベントの誤通知と判定する。この場合、スレーブコア53は今回値を前回値にコピーせず、時刻6にてクランク同期処理を実行することもない。
【0053】
以上説明したように、本実施例の電子制御装置100は、一方のコアから他方のコアに割込みによりイベントを通知する際、イベントの誤通知を検知することができる。スレーブコア53の処理負荷は従来よりも若干、増大するが、共有メモリを常に監視する場合と比べれば格段に小さい処理負荷に過ぎない。
【実施例2】
【0054】
実施例1では2つのコアのみの存在を前提にマスターコア52とスレーブコア53の処理を説明したが、本実施例ではコアが4つある場合の、マスターコア52とスレーブコア53の処理を説明する。
【0055】
図9は、電子制御装置100の機能ブロック図の一例を示す。図9において図5と同一部の説明は省略する。図9の電子制御装置100はマスターコア(区別するためマスターコアA、Bという)52を2つ、スレーブコア(区別するためスレーブコアA、Bという)53を2つそれぞれ有している。マスターコアAとマスターコアBは同じ機能を有し、スレーブコアAとスレーブコアBは同じ機能を有するが、エンジン200は1つなので電子制御装置100はいずれかの組の演算結果によりエンジン200を制御すればよい。例えば、IG(イグニッション)・ONの度に使用するマスターコアとスレーブコアの組を切り替えること、又は、常に2組のマスターコアとスレーブコアにより同じ演算を行い演算結果が一致する場合にエンジン制御を行うこと、などの利用態様がある。
【0056】
本実施例のスレーブコアA、Bはクランク同期処理実行可否判定処理部57が実施例1と同様のクランク同期処理の実行可否を判定するが、さらに以下の機能を有する。
・イベントの誤検知を検知する毎に、共有RAM51の誤通知回数を1つ大きくする。
・IG・OFF時には共有RAM51の2つの誤通知回数A、Bを不揮発メモリに退避する。
【0057】
スレーブコアAとスレーブコアBのクランクカウンタ操作処理部55は、誤通知を検知する度に、IG・ONなどの起動時又は定期的に、2つの誤通知回数A,Bを比較する。2つの誤通知回数A,Bの差が所定値以上になると、誤通知回数の大きい方のスレーブコア53が小さい方のスレーブコア53に対し、処理停止要求を通知する。こうすることで、イベントの誤検知が多いスレーブコア53とマスターコア52の組の演算処理を回避することができ、演算結果の信頼性を向上させることができる。
【0058】
図10は、誤通知回数に基づく演算の停止処理を説明する図の一例である。図10では、スレーブコアAがイベントの誤通知を検出した後からの処理を説明するが、スレーブコアBがイベントの誤検知を検出した場合もスレーブコアAとBの処理が逆になるだけで処理の流れは同じである。
【0059】
ステップS130でイベントの誤通知を検出したスレーブコアAのクランク同期処理実行可否判定処理部57は、誤通知回数をカウントアップする(S210)。本実施例では誤通知の検出をしたタイミングで、クランク同期処理実行可否判定処理部57が2つの誤通知回数A,Bを比較する(S220)。
【0060】
クランク同期処理実行可否判定処理部57は、誤通知回数Aと誤通知回数Bの差の絶対値が閾値を超えたか否かを判定する(S230)。誤通知回数Aと誤通知回数Bは同程度になるはずなので、この閾値は有意な差として、例えば誤通知回数Aと誤通知回数Bのうち大きい方の20〜30%とする。
【0061】
誤通知回数Aと誤通知回数Bの差の絶対値が閾値を超えていない場合(S230のNo)、クランク同期処理実行可否判定処理部57は何もせず図のフローを終了する。
【0062】
誤通知回数Aと誤通知回数Bの差の絶対値が閾値を超えている場合(S230のYes)、誤通知回数が多い方のスレーブコア53とマスターコア52の組は信頼性が低下するおそれがあるので、クランク同期処理実行可否判定処理部57は、誤通知回数が多い方のスレーブコア53とマスターコア52の組の処理を停止させる。
・誤通知回数A−誤通知回数B>閾値
クランク同期処理実行可否判定処理部57は自身のマスターコアAとスレーブコアAの演算を停止させる。
・誤通知回数B−誤通知回数A>閾値
クランク同期処理実行可否判定処理部57は他方のマスターコアBとスレーブコアBの演算を停止させる。
【0063】
このため、クランク同期処理実行可否判定処理部57は、停止指示又は停止通知を他方のスレーブコアBに通知する(S240)。スレーブコアBのクランク同期処理実行可否判定処理部57は停止指示又は停止通知を受信する(S250)。
【0064】
停止指示の場合、スレーブコアBのクランク同期処理実行可否判定処理部57はマスターコアBと通信するなどして、停止のための処理(制御中のアクチュエータなどの退避、設定の保存等)を行い、停止可能になると停止指示を受け付けたことをスレーブコアAに通知する(S260)。
【0065】
スレーブコアAが停止する場合(停止通知の場合)、スレーブコアBのクランク同期処理実行可否判定処理部57は停止通知を受け付けたことをスレーブコアAに通知する(S260)。
【0066】
これにより、スレーブコアAとBは停止指示又は停止に必要な処理を行う(S270、S280)。停止する側のスレーブコア53とマスターコア52は、演算を継続するスレーブコア53とマスターコア52に必要な変数などがあれば共有メモリに書き出して、電力供給をオフにする。停止しない側のスレーブコア53とマスターコア52は、演算を停止するスレーブコア53とマスターコア52から必要な変数などがあれば共有メモリから読み出して、そのまま演算を継続する。
【0067】
以上説明したように、本実施例ではコアが4つあることを利用して、イベントの誤検知が多いマスターコアとスレーブコアを停止させるので、演算結果の信頼性を向上させることができる。
【実施例3】
【0068】
実施例2では誤検知回数からマスターコア52とスレーブコア53の組の信頼性の低下を検出したが、本実施例では2つの演算結果が一致する場合にエンジン制御する電子制御装置100において、演算結果が一致しない場合に誤通知回数を利用してスレーブコア53の信頼性の低下を検出する電子制御装置100について説明する。
【0069】
すなわち、誤通知回数が多いスレーブコア53はノイズなどの影響を受けやすく正しい演算結果が得られにくいと推測して、スレーブコア53の信頼性の低下を検出することができる。
【0070】
図11は、電子制御装置100の機能ブロック図の一例を示す。図11において図5と同一部の説明は省略する。図11の電子制御装置100は1つのマスターコア52と、2つのスレーブコア53(スレーブコアA、B)を有している。スレーブコアAとスレーブコアBは同じ機能を有するが、本実施例ではスレーブコアBは演算結果をエンジン制御に利用することなく、共有メモリ51に書き出すものとする。そして、スレーブコアAのクランク同期処理部56は、共有メモリ51から演算結果を読み出し、自己の演算結果と比較して、略一致するかどうかによりスレーブコアAとスレーブコアBの信頼性を検証する。
【0071】
なお、スレーブコアAが演算結果を共有メモリ51に書き出してスレーブコアBが自己の演算結果と比較してもよいし、スレーブコアAとスレーブコアBが共に演算結果を共有メモリに書き出して、不図示のスレーブコアCが演算結果を比較することもできる。
【0072】
スレーブコアAは、演算結果が例えば所定回数以上異なった場合、誤通知回数Aと誤通知回数Bの大きい方のスレーブコア53に異常があると推定し、その後の演算を中止させる。こうすることで、誤通知回数の大小だけでなく、演算結果を利用して、異常が生じている可能性の高いスレーブコア53や通信線ン43の断線やショートを特定することができる。また、実施例2では誤通知回数A、Bの差の絶対値が閾値を超える必要があったが、本実施例では誤通知回数A、Bの差の絶対値が閾値を超えなくても異常のある可能性の高いスレーブコア53を特定できる。
【0073】
図12は、演算結果と誤通知回数に基づく演算処理の停止処理を説明する図の一例である。図12では、スレーブコアA、Bがクランク同期処理を開始する時以降の手順を説明する。
【0074】
まず、スレーブBのクランク同期処理部56がクランク同期処理の演算結果を共有メモリに書き込む(S310)。書き込んだ場合、クランク同期処理部56はスレーブコアAに割込みやコア間通信により通知することが好ましい。
【0075】
スレーブコアAのクランク同期処理部56もほぼ同時期にクランク同期処理を終了させる(S320)。クランク同期処理部56は共有メモリ51の演算結果を読み出して、自身の演算結果と一致するか否かを判定する(S330)。なお、演算結果の有効桁数や丸め方にもよるが、どちらのスレーブコアA,Bも正常だが演算結果が完全には一致しないことがあるので、一致したと見なせる範囲(例えば、数%〜10%程度の違い)を設けて、一致判定する。
【0076】
2つの演算結果が一致した場合(S330のYes)、スレーブコアAのクランク同期処理部56は自己の演算結果を用いてエンジン200を制御する(S340)。
【0077】
2つの演算結果が一致しない場合(S330のNo)、スレーブコアAのクランク同期処理部56は、誤通知回数Aと誤通知回数Bを共有メモリ51から読み出し、比較する(S350)。そして、クランク同期処理部56は誤通知回数の大小に応じて停止指示又は停止の処理を実行する(S360)。
【0078】
・誤通知回数A>誤通知回数Bの場合
スレーブコアAのクランク同期処理部56は、スレーブコアBにクランク同期処理を依頼する。これにより、以降は、スレーブコアBのクランク同期処理部56がクランク同期処理の演算結果を用いてエンジン200を制御することができる。なお、以降は、スレーブコアBのクランク同期処理部56は共有メモリ51に演算結果を書き出さなくてよい。
【0079】
・誤通知回数A<誤通知回数Bの場合、
スレーブコアAのクランク同期処理部56は、スレーブコアBにクランク同期処理の停止を依頼する。これにより、以降は、スレーブコアBのクランク同期処理部56はクランク同期処理を行わず、共有メモリ51に演算結果を書き出すこともしない。また、スレーブコアAのクランク同期処理部56は、自己のクランク同期処理の演算結果によりエンジン200を制御する。
【0080】
・誤通知回数A=誤通知回数Bの場合、
この場合、演算結果が一致しないことがイベントの誤検知とは異なる原因の可能性もあるので、例えば、マスターコア52にスレーブコア53のクランク同期処理を依頼し、スレーブコアAとスレーブコアBの演算結果のどちらが正しいかを検証する、又は、第4のコアにスレーブコア53のクランク同期処理を依頼し、スレーブコアAとスレーブコアBの演算結果のどちらが正しいかを検証する、ことができる。スレーブコアAとスレーブコアBの演算結果のどちらが正しいかが分かれば、正しくない方のスレーブコア53にクランク同期処理の停止を依頼する。
【0081】
以上説明したように、本実施例の電子制御装置100は、誤通知回数が多いスレーブコア53はノイズなどの影響を受けやすく正しい演算結果が得られにくいと推定して、スレーブコア53の信頼性の低下を検出することができる。
【実施例4】
【0082】
本実施例ではハイブリッド車両に電子制御装置100が搭載された場合に、イベントの誤通数を検出することを停止する電子制御装置100について説明する。
【0083】
図13は、ハイブリッドECU101と車載LANを介して接続された電子制御装置(エンジンECU)100を示す図の一例である。ハイブリッドECU101は、バッテリ残量、アクセルペダルの踏み込み量、車速等に基づき、パワーモード、エコモード、又は、EVモードの3つのモードに切り替えることができる。このうちEVモードは電気モータだけで走行するモードでエンジン200は強制的に停止される。
【0084】
EVモードにおいても電子制御装置100には電力が供給され、NEセンサ21がNEセンサ信号を出力すれば、クランクカウンタ操作処理やクランク同期処理が実行され得る状態にある。しかし、EVモードでは、エンジン200が停止しているためNEセンサ信号が出力されるはずがなく、マスターコア52からスレーブコア53にイベント通知が出力されるはずがない。
【0085】
したがって、本実施例のようにハイブリッド車に搭載された電子制御装置100は、EVモードであることを検出すると、クランク同期処理実行可否判定処理部57が、イベントの通知を受け付けただけでそれが誤通知であることを検出できる。したがって、今回値と前回値の比較をしてイベントの誤通知を検出する必要がない。
【0086】
また、誤通知回数の差に基づき停止するマスターコア52とスレーブコア53を決定する場合、及び、複数のスレーブコア53がクランク同期処理を実行して演算結果が一致した場合にエンジン制御する場合、EVモードにおける誤通知回数をカウントしておけば、信頼性の高いスレーブコア53を特定しやすくなる。
【0087】
本実施例の電子制御装置100は、ハイブリッド車に搭載された場合、EVモードを利用してイベントの誤検知を容易に検出することができる。
【符号の説明】
【0088】
21 NEセンサ
51 共有メモリ
52 マスターコア
53 スレーブコア
54、56 クランク同期処理部
55 クランクカウンタ操作処理部
57 クランク同期実行可否判定処理部
100 電子制御装置
200 エンジン
【技術分野】
【0001】
本発明は、複数のコアが同期しながら処理を実行するマイコンに関し、特に、同期の誤検知を検出できるマイコンに関する。
【背景技術】
【0002】
車両のエンジンは電子制御装置により種々の制御が行われている。例えば、燃焼室への燃料噴射タイミングの決定、イグナイタの点火タイミング、燃料噴射量の決定などは電子制御装置が演算やマップ引きなどにより行っている。このようなエンジン制御はクランク角に応じた適切なタイミングで行うことが好ましく、電子制御装置はNEセンサの信号の入力に基づきエンジン制御に付随する処理を開始する。
【0003】
ここで、電子制御装置においてもCPUのマルチコア化が図れるようになってきたため、エンジン制御に関する種々の制御を複数のコアで分担する技術が考案されている(例えば、特許文献1参照。)。特許文献1には、エンジン制御のための処理に関する割り込み要求をマスターコアがスレーブコアに対して行い、スレーブコアが割り込み要求に応じたエンジン制御のための処理を行えない場合、エンジン制御のための処理に関する優先度を高く設定するマルチコアプロセッサが開示されている。
【0004】
このように、エンジン制御のための処理を複数のコアで分担する場合、コア同士が処理を同期できるように、一方のコアが他方のコアに処理のタイミングを割込みにより通知することがある。
【0005】
しかしながら、コア間の割込み要求を処理開始のタイミングとすると、割込みの誤通知が生じることがある。
図1は、割込みの誤通知を説明する図の一例である。時刻t1にマスターコアがスレーブコアに割込みを利用したイベントを通知し、マスターコアとスレーブコアが並行にクランク同期処理を行っている。しかし、時刻t2では、マスターコアがスレーブコアに割込みを利用してイベントを通知していないのに、スレーブコアが誤通知を受け付けている。このような誤通知は、外部からの攻撃的な手法(電気的なノイズ、割込み信号線の接触不良やショートなど)により極めて希であるが生じてしまうことがある。誤通知が生じると、スレーブコアは正しくないタイミングでクランク同期処理を行ってしまう。
【0006】
ここで、コア間でデータの送信タイミングを通知する技術が考案されている(例えば、特許文献2参照。)。特許文献2には、メインCPUはイベントデータを読み出した後、メモリに前回書き込んだ値と異なるデータを書き込み、サブCPUはメモリを常時監視して、読み出した時に値が前回読み出した値と比較して変化がある場合、メモリからデータを読み出すマルチプロセッサが開示されている。特許文献2の技術であれば、割込みの代わりにデータの監視により、処理の開始を通知することができる。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特開2010−113419号公報
【特許文献2】特開平05−346908号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
しかしながら、特許文献2に開示されたデータの送信タイミングの通知方法では、サブCPUが定期的にメモリにアクセスする必要があるため、サブCPUの処理負荷が大きいという問題がある。また、サブCPUが常時監視するのでなく、メインCPUがデータを書き込む定期的な周期でサブCPUがメモリを監視すれば、サブCPUの処理負荷を低減できる。しかしこの場合は、サブCPUがタイマなどの不具合によりメモリにアクセスするタイミングを逸するおそれが生じる。
【0009】
したがって、コア間の処理を同期させるには、割込みを利用しながら、処理のタイミングを正確に検出することが好ましいと考えられる。
【0010】
本発明は、上記課題に鑑み、一方のコアから他方のコアに割込みによりイベントを通知する際、イベントの誤通知を検知できるマイコンを提供することを目的とする。
【課題を解決するための手段】
【0011】
上記課題に鑑み、本発明は、第1のコア及び第2のコアと、前記第1のコアと前記第2のコア間の通信を可能にする通信手段と、前記第1のコアと前記第2のコアが共有する共有メモリと、前記第1のコアが備える、外部信号を取得する毎に繰り返し第1の処理を実行し、前記第1の処理毎に所定情報を前記共有メモリに書き込む第1の処理手段と、前記第1の処理毎に前記通信手段を介して前記第2のコアに処理要求を出力する処理要求手段と、前記第2のコアが備える、前記処理要求をトリガーに第2の処理を実行する第2の処理手段と、を有するマイコンにおいて、前記第2のコアは、前記処理要求を受け付けた場合、前記共有メモリから最新の前記所定情報と前回の前記所定情報を読み出し、最新の前記所定情報と前回の前記所定情報に規定された関係がある場合のみ、前記第2の処理手段に前記第2の処理の実行を許可する比較手段、を有することを特徴とする。
【発明の効果】
【0012】
一方のコアから他方のコアに割込みによりイベントを通知する際、イベントの誤通知を検知できるマイコンを提供することができる。
【図面の簡単な説明】
【0013】
【図1】割込みの誤通知を説明する図の一例である。
【図2】電子制御装置の特徴部を模式的に説明する図の一例である。
【図3】電子制御装置により制御されるエンジンの概略構成図の一例である。
【図4】電子制御装置のハードウェア構成図の一例である。
【図5】電子制御装置の機能ブロック図の一例である。
【図6】電子制御装置の動作手順を示すフローチャート図の一例である。
【図7】スレーブコアが正常なイベント通知を取得した場合のシーケンス図の一例である。
【図8】スレーブコアがイベントの誤通知を取得した場合のシーケンス図の一例である。
【図9】電子制御装置の機能ブロック図の一例である(実施例2)。
【図10】誤通知回数に基づく演算の停止処理を説明する図の一例である。
【図11】電子制御装置の機能ブロック図の一例である(実施例3)。
【図12】演算結果と誤通知回数に基づく演算処理の停止処理を説明する図の一例である。
【図13】ハイブリッドECUと車載LANを介して接続された電子制御装置を示す図の一例である。
【発明を実施するための形態】
【0014】
以下、本発明を実施するための形態について図面を参照しながら説明する。
【実施例1】
【0015】
図2は、本実施形態の電子制御装置の特徴部を模式的に説明する図の一例である。図2(a)はイベントの誤通知が生じていない場合のマスターコアとスレーブコアの処理手順を示す。
(A1)マスターコアはNEセンサからの信号入力を取得すると処理(例えば、クランクカウンタ操作処理)を行い、処理結果を共有RAMの今回値に書き込む。
(A2)マスターコアは処理が終わるとスレーブコアに割込みによるイベント通知を行う。
(A3)スレーブコアはイベント通知をトリガーに、共有RAMの前回値と今回値を比較する。今回値は、(1)のマスターコアの書き込みが正常に終了していれば、必ず前回値と異なる。
(A4)スレーブコアは今回値と前回値が異なっているはずであるという前提を利用して、今回値と前回値が異なっていれば、今回値を前回値に複写する。これにより、前回値と今回値が等しくなる(図ではどちらも30になる)。
【0016】
マスターコアからスレーブコアに正常にイベント通知が出力される場合には、(A1)〜(A4)が繰り返される。スレーブコアは、今回値と前回値が異なっている場合、処理(例えば、クランク同期処理)を実行する。
【0017】
図2(b)はイベントの誤通知が生じた場合のマスターコアとスレーブコアの処理手順を示す。
(B1)マスターコアがイベント通知する前に、イベントの誤通知がスレーブコアに出力される。この場合、マスターコアはNEセンサからの信号入力に基づく処理も今回値の更新も行っていないので、前回値と今回値が同じ状態のままである。
(B2)スレーブコアはイベントの誤通知をトリガーに、共有RAMの前回値と今回値を比較する。
(B3)しかし、前回値と今回値が同じなので、スレーブコアはイベント通知は誤通知であったことを検出できる。イベントの誤通知を検出したスレーブコアは処理(例えば、クランク同期処理)を実行しないので、正常でないタイミングの処理を行うことを防止できる。
【0018】
〔構成〕
図3は、電子制御装置100により制御されるエンジン200の概略構成図の一例を示す。エンジン200は、ピストン17の往復運動を回転運動に変換するレシプロエンジンである。図では気筒が1つだが通常のエンジン200は直列又はV時方向に複数の気筒を有し、各気筒のコネクティングロッド18が1つのクランクシャフト20に接続されている。
【0019】
気筒内には、コネクティングロッド18と連結されたピストン17が収容され、気筒の内周面とピストン17によって燃焼室が形成される。燃焼室には、燃料を噴射するインジェクタ16、燃焼室で空気と燃料との混合気に点火するイグナイタ13とが設けられている。燃焼室には、吸気バルブ15で仕切られた吸入空気を供給する吸気通路14と、燃焼後の排気が排出される排気バルブ12で仕切られた排気通路11が接続されている。
【0020】
クランクシャフト20の一端にはクランクシャフトタイミングロータ19が同軸に固定されており、クランクシャフトタイミングロータ19の外縁に対向してクランクポジションセンサ(以下、NEセンサという)21が配置されている。NEセンサ21の原理はどのようなものでもよいが、例えば、クランクシャフトタイミングロータ19の円周に等間隔に突起部を設けておき、クランクシャフト20の回転により突起部が移動することで生じる突起部とNEセンサ21のエアギャップの変化を利用する。NEセンサ21はコイルを有しておりエアギャップの変化により起電力を検出できるので、起電力の周期的な変化からクランクシャフト20の回転角を検出できる。
【0021】
また、クランクシャフトタイミングロータ19の突起部は一箇所だけ欠けており、NEセンサ21はこれよりクランクシャフト20の基準角度(クランクシャフトが1回転したこと)を検出できるようになっている。クランクシャフトタイミングロータ19は欠損部がピストン17の上死点に一致するように取り付けられている。
【0022】
ピストン17が下死点付近まで移動するとタイミングベルトとカムの作用で吸気バルブ15が開き、燃焼室に空気が吸気される。この時、電子制御装置(ECU)100は、クランク角に基づきピストン17の位置を検出して、インジェクタ16に燃料を噴射させる。その後、ピストン17が上死点付近まで移動すると、電子制御装置100は、クランク角に基づきピストン17の位置を検出して、イグナイタ13を通電し燃焼室の混合気に点火する。この燃焼工程によりピストン17が上死点から下死点まで移動し再度、上死点方向に移動を始めると、タイミングベルトとカムの作用で排気バルブ12が開き、燃焼室の燃焼ガスが排気される。このようなピストン17の往復運動に伴い、クランクシャフト20が回転し、車両の駆動輪に伝達される。
【0023】
図4は、電子制御装置100のハードウェア構成図の一例を示す。電子制御装置100はプロセッサを備えたマイコンであればよい。電子制御装置100は、マルチレイヤーバス36を介して接続されたコア(区別する場合コア1、コア2という)31、DMAC35、SDRAM37、I/Oブリッジ38及びROM39を有する。2つのコア31は、それぞれCPU32,INT33及びRAM34を有する。
【0024】
CPU32は、IFU(Instruction Fetch Unit)、DEC(DECoder)、RF(Register Fetch)、REG(REGister)、LSU(Load Store Unit)、SH(SHifter)、ALU、MUL及びFPU等の演算回路を有し、パイプライン制御により1クロックで1命令を実行する。
【0025】
RAM1はコア1に専用のメモリ(一次キャッシュ)であり、RAM2はコア2に専用のメモリ(一次キャッシュ)である。本実施形態のコア31では、コア1がマスターコア、コア2がスレーブコアに割り当てられるが、出荷後に、コア1、2とマスターコアとスレーブコアの関係を適宜切り替え可能としてもよい。
INT1とINT2は、通信線43を介してCPU間割り込みを制御すると共に、コア1からコア2又はコア2からコア1に、パラメータ等の送受信を制御する。また、INT1,INT2は、RAM1、RAM2、又は、SDRAM37を共有の通信用メモリ(共有メモリ)にしてパラメータ等を送受信することもできる。
【0026】
DMAC35は、コア1及びコア2から要求を受けてプログラム40をSDRAM37、RAM1、RAM2に読み込んだり、周辺機器からのメモリアクセス要求を調停すると共に、I/Oブリッジ38からSDRAM37へ、又は、SDRAM37からI/Oブリッジ38への、コア1、コア2を介することなくデータを転送する。SDRAM37は、コア1及びコア2にプログラム40又はデータを提供するためのメモリ(二次キャッシュ)である。SDRAM37の少なくとも一部はコア1とコア2により共有される。
【0027】
ROM39には後述するプログラム40や、OSやデバイスドライバ(プラットフォーム)も記憶されている。
【0028】
I/Oブリッジ38は、マルチレイヤーバス36とI/Oバス42の間で相互に周波数や電圧値などを変換する。I/Oバス42には種々のI/O41が接続されている。I/O41は電子制御装置100と外部の機器を接続するインタフェースであり、例えば、上記のNEセンサ21、CANコントローラ、各種のアクチュエータ、センサ、スイッチ等が接続される。
【0029】
図5は、電子制御装置100の機能ブロック図の一例を示す。図5では説明上、重要な部品についてのみ図示した。共有RAM51はRAM1,RAM2又はSDRAM37のいずれかでよく、マスターコア52とスレーブコア53は2つのコア1、コア2のいずれかである。なお、コア1とコア2は同様のハードウェア構造としているが、マスターコア52とスレーブコア53のハードウェア構造が異なっていてもよい。
【0030】
マスターコア52は、CPU32がプログラム40を実行して実現するクランク同期処理部54及びクランクカウンタ操作処理部55を有し、スレーブコア53はクランク同期処理部56及びクランク同期処理実行可否判定処理部57を有する。
【0031】
まず、クランクカウンタ操作処理部55は、NEセンサ21から入力されるNEセンサ信号に基づいて、エンジン回転角をカウントしたり、エンジン回転数を算出したりする。以下、これらの処理をクランクカウンタ操作処理と称する。NEセンサ21は突起部とのエアギャップにより形成される電圧波形をパルスに整形し、パルスの立ち上がりエッジと立ち下がりエッジの各検出時点(両方を区別せずにNEセンサ信号という)を示す信号をマスターコア52に供給する。
【0032】
クランクカウンタ操作処理部55は、パルスの立ち上がりエッジの検出後、立ち下がりエッジが検出されると、クランクカウンタを1つ大きくする。クランクカウンタにより、1〜36に分けられるクランクのステージと、エンジン回転角が示される。また、クランクカウンタ操作処理部55は、パルスの立ち上がりエッジから立ち下がりエッジが検出されるまでの時間を計測して記憶しておき、次に、パルスの立ち上がりエッジから立ち下がりエッジが検出されるまでの時間と比較する。2つの時間は同程度であるが、1周に1回、突起部の欠損により2つの時間の比が倍以上(又は1/2以下)程度になる。この時、クランクシャフト20が1回転したことになるので、2つの時間の比が最後に倍以上になった時から次に倍以上になるまでの時間からエンジン回転速度を求める。また、クランクカウンタ操作処理部55は、2つの時間の比が倍以上となると、クランクカウンタの値を初期化する。本実施形態ではクランクカウンタの値を今回値としてクランクカウンタ操作処理部55が共有RAM51に書き込むものとする。
【0033】
従来からのクランク同期処理は、クランクカウンタに応じたイグナイタ13の通電タイミングの決定、イグナイタ13の点火開始タイミングの決定、及び、インジェクタ16による燃料噴射タイミングの決定、等である。また、燃料噴射タイミングの決定の前に燃料噴射量も決定される。
【0034】
本実施形態のように電子制御装置100がマルチコアを有することで、クランク同期処理をマスターコア52とスレーブコア53で負荷分散することができ、より精緻なエンジン制御を可能とすることができる。例えば、従来ではクランクカウンタを24のステージに区分していた場合でも、負荷分散することでより短いステージ間隔(36ステージ)のクランク同期処理が可能になっている。
【0035】
本実施形態では、マスターコア52とスレーブコア53がどのようなクランク同期処理を受け持つか設計できるが、例えば、マスターコア52のクランク同期処理部54がイグナイタ13の通電タイミングの決定とイグナイタ13の点火開始タイミングの決定を行い、スレーブコア53のクランク同期処理部56がインジェクタ16による燃料噴射量の決定と燃料噴射タイミングの決定を行うとする。
【0036】
クランクカウンタ操作処理部55はクランクカウンタ操作処理の後、スレーブコア53に割り込みする。スレーブコア53の割り込みハンドラはこの割り込みをトリガーにクランク同期処理実行可否判定処理部57を起動する。クランク同期処理実行可否判定処理部57について詳細は後述するが、クランク同期処理実行可否判定処理部57は、
(a)共有RAM51の今回値と前回値と比較する。
(b)今回値と前回値が同じ場合、イベントの誤通知と判定してクランク同期処理部56を呼び出さない。
(c)今回値と前回値が異なる場合、正しいイベント通知と判定して、
(c-1) 共有RAM51の今回値を前回値にコピーする。
【0037】
(c-2) クランク同期処理部56を呼び出す(実行する)。
【0038】
この処理により、スレーブコア53のクランク同期処理部56は、イベントが正常に通知された場合にのみクランク同期処理を実行することができる。
【0039】
〔動作手順〕
図6は、本実施例の電子制御装置100の動作手順を示すフローチャート図の一例である。
まず、NEセンサ21がNEセンサ信号をマスターコア52に送信する(S10)。DMAC35がI/Oブリッジ38からマスターコア52のRAM1に送信するとしてもよいし、不図示のINTC(割り込みコントローラ)がNEセンサ21の割込み要求をCPUに通知することで、マスターコア52がDMAC35にRAM1にNEセンサ信号を記憶させてもよい。
【0040】
次に、マスターコア52はNEセンサ信号を受信する(S20)。NEセンサ信号を受信すると、クランクカウンタ操作処理部55がクランクカウンタ操作処理を実行する(S30)。クランクカウンタ操作処理を終えるとクランクカウンタ操作処理部55はクランクカウンタを算出するので、クランクカウンタの今回値を共有RAM51に上書きする(S40)。従来から、マスターコア52はクランクカウンタ同期処理のためクランクカウンタを算出して共有RAM51に書き込む処理を行っているので、クランクカウンタ操作処理に大きな変更はなくコスト増を抑制できる。
【0041】
なお、電子制御装置100の起動直後、クランクカウンタ操作処理部55は前回値を初期化しておく(例えば最大値(0xff)を設定)。電子制御装置100の起動直後、クランクカウンタ操作処理部55が今回値(例えばゼロ)を書き込んでも、必ず前回値と今回値を異ならせることができる。
【0042】
次に、クランクカウンタ操作処理部55はINT1と通信線43を介してスレーブコア53に割り込みする(S50)。この後、マスターコア52ではクランク同期処理部54がクランク同期処理を行う(S60)
スレーブコア53は割込みの受け付け処理を行う(S100)。割込みの受け付け処理は主にINT33が受け持つが、この処理は、例えば、実行中の処理と割込み要求の優先度の判定、割込みを受け付けると判定した場合の実行中の処理のコンテキスト(レジスタの値、演算結果、スタックポインタの値等)の記憶等である。割込みを受け付けると、スレーブコア53はクランク同期処理実行可否判定処理部57を起動させる。
【0043】
クランク同期処理実行可否判定処理部57は、共有RAM51の前回値と今回値を比較する(S110)。すなわち、共有RAM51の今回値と前回値が記憶されたアドレスから今回値と前回値を読み出し比較する。今回値と前回値が記憶される共有RAM51のアドレスは予め決まっている。
【0044】
今回値と前回値が一致する場合(S120のYes)、クランク同期処理実行可否判定処理部57はイベントの誤通知と判定する(S130)。この場合、スレーブコア53はクランク同期処理を実行することなく、処理を終了する。
【0045】
今回値と前回値が一致しない場合(S120のNo)、クランク同期処理実行可否判定処理部57は正常なイベント通知と判定する(S140)。なお、クランクカウンタは徐々に増えるのでイベント通知が正常であれば今回値と前回値は一致しないが、換言すると、今回値と前回値が一致しない情報であれば、マスターコア52のクランクカウンタ操作処理部55はどのような情報(数値、フラグ、記号、文字等)を共有メモリ51の今回値に記録してもよいことになる。クランクカウンタ以外の情報を記録する場合、クランクカウンタ操作処理部55は少なくとも連続して同じ値とならない情報を記録する。
【0046】
次に、クランク同期処理実行可否判定処理部57は、すでに読み出している今回値を共有RAM51の前回値にコピーする(S150)。
【0047】
なお、共有メモリ51に所定数(10個程度)のクランクカウンタを記憶できるリングバッファを設けることで、クランク同期処理実行可否判定処理部57が今回値を前回値にコピーすることを省略できる。この場合、クランク同期処理実行可否判定処理部57はイベント通知に連動して増えるポインタ(今回値のアドレスを示す)を備えておき、ポインタの値に応じてリングバッファの隣接した2つのクランクカウンタを読み出せばよい。
【0048】
次に、クランク同期処理実行可否判定処理部57はクランク同期処理部54を呼び出すので、クランク同期処理部54はクランク同期処理を実行する(S160)。
【0049】
以上のような処理により、スレーブコア53は、外部から生じさせられた電気的なノイズ、割込み信号線の接触不良やショートによるイベントの誤通知を正常な通知と誤判定して、クランク同期処理を実行してしまうことを防止できる。
【0050】
〔シーケンス〕
図7は、スレーブコア53が正常なイベント通知を取得した場合のシーケンス図の一例である。
時刻t1:マスターコア52がNEセンサ信号を受信し、クランクカウンタ操作処理を実行する。
時刻t2:マスターコア52が今回値を共有RAM51に書き込む。
時刻t3:マスターコア52がスレーブコア53にイベントを通知する。この後、マスターコア52はクランク同期処理を実行する。
時刻t4:スレーブコア53が今回値と前回値を読み出し、イベントの誤通知か否かを判定する。イベントの誤通知でない場合、スレーブコア53は今回値を前回値にコピーする。スレーブコア53はクランク同期処理を実行する。
【0051】
以降はNEセンサ21がNEセンサ信号を出力する度に、一連の処理が繰り返される。
【0052】
図8は、スレーブコア53がイベントの誤通知を取得した場合のシーケンス図の一例である。時刻t1〜t4までの処理は図7と同様なので説明を省略する。
時刻t5:ノイズなどによりスレーブコア53がイベントの誤検知を取得する。スレーブコア53は今回値と前回値を読み出すが、図示するように今回値と前回値は同じままなので、イベントの誤通知と判定する。この場合、スレーブコア53は今回値を前回値にコピーせず、時刻6にてクランク同期処理を実行することもない。
【0053】
以上説明したように、本実施例の電子制御装置100は、一方のコアから他方のコアに割込みによりイベントを通知する際、イベントの誤通知を検知することができる。スレーブコア53の処理負荷は従来よりも若干、増大するが、共有メモリを常に監視する場合と比べれば格段に小さい処理負荷に過ぎない。
【実施例2】
【0054】
実施例1では2つのコアのみの存在を前提にマスターコア52とスレーブコア53の処理を説明したが、本実施例ではコアが4つある場合の、マスターコア52とスレーブコア53の処理を説明する。
【0055】
図9は、電子制御装置100の機能ブロック図の一例を示す。図9において図5と同一部の説明は省略する。図9の電子制御装置100はマスターコア(区別するためマスターコアA、Bという)52を2つ、スレーブコア(区別するためスレーブコアA、Bという)53を2つそれぞれ有している。マスターコアAとマスターコアBは同じ機能を有し、スレーブコアAとスレーブコアBは同じ機能を有するが、エンジン200は1つなので電子制御装置100はいずれかの組の演算結果によりエンジン200を制御すればよい。例えば、IG(イグニッション)・ONの度に使用するマスターコアとスレーブコアの組を切り替えること、又は、常に2組のマスターコアとスレーブコアにより同じ演算を行い演算結果が一致する場合にエンジン制御を行うこと、などの利用態様がある。
【0056】
本実施例のスレーブコアA、Bはクランク同期処理実行可否判定処理部57が実施例1と同様のクランク同期処理の実行可否を判定するが、さらに以下の機能を有する。
・イベントの誤検知を検知する毎に、共有RAM51の誤通知回数を1つ大きくする。
・IG・OFF時には共有RAM51の2つの誤通知回数A、Bを不揮発メモリに退避する。
【0057】
スレーブコアAとスレーブコアBのクランクカウンタ操作処理部55は、誤通知を検知する度に、IG・ONなどの起動時又は定期的に、2つの誤通知回数A,Bを比較する。2つの誤通知回数A,Bの差が所定値以上になると、誤通知回数の大きい方のスレーブコア53が小さい方のスレーブコア53に対し、処理停止要求を通知する。こうすることで、イベントの誤検知が多いスレーブコア53とマスターコア52の組の演算処理を回避することができ、演算結果の信頼性を向上させることができる。
【0058】
図10は、誤通知回数に基づく演算の停止処理を説明する図の一例である。図10では、スレーブコアAがイベントの誤通知を検出した後からの処理を説明するが、スレーブコアBがイベントの誤検知を検出した場合もスレーブコアAとBの処理が逆になるだけで処理の流れは同じである。
【0059】
ステップS130でイベントの誤通知を検出したスレーブコアAのクランク同期処理実行可否判定処理部57は、誤通知回数をカウントアップする(S210)。本実施例では誤通知の検出をしたタイミングで、クランク同期処理実行可否判定処理部57が2つの誤通知回数A,Bを比較する(S220)。
【0060】
クランク同期処理実行可否判定処理部57は、誤通知回数Aと誤通知回数Bの差の絶対値が閾値を超えたか否かを判定する(S230)。誤通知回数Aと誤通知回数Bは同程度になるはずなので、この閾値は有意な差として、例えば誤通知回数Aと誤通知回数Bのうち大きい方の20〜30%とする。
【0061】
誤通知回数Aと誤通知回数Bの差の絶対値が閾値を超えていない場合(S230のNo)、クランク同期処理実行可否判定処理部57は何もせず図のフローを終了する。
【0062】
誤通知回数Aと誤通知回数Bの差の絶対値が閾値を超えている場合(S230のYes)、誤通知回数が多い方のスレーブコア53とマスターコア52の組は信頼性が低下するおそれがあるので、クランク同期処理実行可否判定処理部57は、誤通知回数が多い方のスレーブコア53とマスターコア52の組の処理を停止させる。
・誤通知回数A−誤通知回数B>閾値
クランク同期処理実行可否判定処理部57は自身のマスターコアAとスレーブコアAの演算を停止させる。
・誤通知回数B−誤通知回数A>閾値
クランク同期処理実行可否判定処理部57は他方のマスターコアBとスレーブコアBの演算を停止させる。
【0063】
このため、クランク同期処理実行可否判定処理部57は、停止指示又は停止通知を他方のスレーブコアBに通知する(S240)。スレーブコアBのクランク同期処理実行可否判定処理部57は停止指示又は停止通知を受信する(S250)。
【0064】
停止指示の場合、スレーブコアBのクランク同期処理実行可否判定処理部57はマスターコアBと通信するなどして、停止のための処理(制御中のアクチュエータなどの退避、設定の保存等)を行い、停止可能になると停止指示を受け付けたことをスレーブコアAに通知する(S260)。
【0065】
スレーブコアAが停止する場合(停止通知の場合)、スレーブコアBのクランク同期処理実行可否判定処理部57は停止通知を受け付けたことをスレーブコアAに通知する(S260)。
【0066】
これにより、スレーブコアAとBは停止指示又は停止に必要な処理を行う(S270、S280)。停止する側のスレーブコア53とマスターコア52は、演算を継続するスレーブコア53とマスターコア52に必要な変数などがあれば共有メモリに書き出して、電力供給をオフにする。停止しない側のスレーブコア53とマスターコア52は、演算を停止するスレーブコア53とマスターコア52から必要な変数などがあれば共有メモリから読み出して、そのまま演算を継続する。
【0067】
以上説明したように、本実施例ではコアが4つあることを利用して、イベントの誤検知が多いマスターコアとスレーブコアを停止させるので、演算結果の信頼性を向上させることができる。
【実施例3】
【0068】
実施例2では誤検知回数からマスターコア52とスレーブコア53の組の信頼性の低下を検出したが、本実施例では2つの演算結果が一致する場合にエンジン制御する電子制御装置100において、演算結果が一致しない場合に誤通知回数を利用してスレーブコア53の信頼性の低下を検出する電子制御装置100について説明する。
【0069】
すなわち、誤通知回数が多いスレーブコア53はノイズなどの影響を受けやすく正しい演算結果が得られにくいと推測して、スレーブコア53の信頼性の低下を検出することができる。
【0070】
図11は、電子制御装置100の機能ブロック図の一例を示す。図11において図5と同一部の説明は省略する。図11の電子制御装置100は1つのマスターコア52と、2つのスレーブコア53(スレーブコアA、B)を有している。スレーブコアAとスレーブコアBは同じ機能を有するが、本実施例ではスレーブコアBは演算結果をエンジン制御に利用することなく、共有メモリ51に書き出すものとする。そして、スレーブコアAのクランク同期処理部56は、共有メモリ51から演算結果を読み出し、自己の演算結果と比較して、略一致するかどうかによりスレーブコアAとスレーブコアBの信頼性を検証する。
【0071】
なお、スレーブコアAが演算結果を共有メモリ51に書き出してスレーブコアBが自己の演算結果と比較してもよいし、スレーブコアAとスレーブコアBが共に演算結果を共有メモリに書き出して、不図示のスレーブコアCが演算結果を比較することもできる。
【0072】
スレーブコアAは、演算結果が例えば所定回数以上異なった場合、誤通知回数Aと誤通知回数Bの大きい方のスレーブコア53に異常があると推定し、その後の演算を中止させる。こうすることで、誤通知回数の大小だけでなく、演算結果を利用して、異常が生じている可能性の高いスレーブコア53や通信線ン43の断線やショートを特定することができる。また、実施例2では誤通知回数A、Bの差の絶対値が閾値を超える必要があったが、本実施例では誤通知回数A、Bの差の絶対値が閾値を超えなくても異常のある可能性の高いスレーブコア53を特定できる。
【0073】
図12は、演算結果と誤通知回数に基づく演算処理の停止処理を説明する図の一例である。図12では、スレーブコアA、Bがクランク同期処理を開始する時以降の手順を説明する。
【0074】
まず、スレーブBのクランク同期処理部56がクランク同期処理の演算結果を共有メモリに書き込む(S310)。書き込んだ場合、クランク同期処理部56はスレーブコアAに割込みやコア間通信により通知することが好ましい。
【0075】
スレーブコアAのクランク同期処理部56もほぼ同時期にクランク同期処理を終了させる(S320)。クランク同期処理部56は共有メモリ51の演算結果を読み出して、自身の演算結果と一致するか否かを判定する(S330)。なお、演算結果の有効桁数や丸め方にもよるが、どちらのスレーブコアA,Bも正常だが演算結果が完全には一致しないことがあるので、一致したと見なせる範囲(例えば、数%〜10%程度の違い)を設けて、一致判定する。
【0076】
2つの演算結果が一致した場合(S330のYes)、スレーブコアAのクランク同期処理部56は自己の演算結果を用いてエンジン200を制御する(S340)。
【0077】
2つの演算結果が一致しない場合(S330のNo)、スレーブコアAのクランク同期処理部56は、誤通知回数Aと誤通知回数Bを共有メモリ51から読み出し、比較する(S350)。そして、クランク同期処理部56は誤通知回数の大小に応じて停止指示又は停止の処理を実行する(S360)。
【0078】
・誤通知回数A>誤通知回数Bの場合
スレーブコアAのクランク同期処理部56は、スレーブコアBにクランク同期処理を依頼する。これにより、以降は、スレーブコアBのクランク同期処理部56がクランク同期処理の演算結果を用いてエンジン200を制御することができる。なお、以降は、スレーブコアBのクランク同期処理部56は共有メモリ51に演算結果を書き出さなくてよい。
【0079】
・誤通知回数A<誤通知回数Bの場合、
スレーブコアAのクランク同期処理部56は、スレーブコアBにクランク同期処理の停止を依頼する。これにより、以降は、スレーブコアBのクランク同期処理部56はクランク同期処理を行わず、共有メモリ51に演算結果を書き出すこともしない。また、スレーブコアAのクランク同期処理部56は、自己のクランク同期処理の演算結果によりエンジン200を制御する。
【0080】
・誤通知回数A=誤通知回数Bの場合、
この場合、演算結果が一致しないことがイベントの誤検知とは異なる原因の可能性もあるので、例えば、マスターコア52にスレーブコア53のクランク同期処理を依頼し、スレーブコアAとスレーブコアBの演算結果のどちらが正しいかを検証する、又は、第4のコアにスレーブコア53のクランク同期処理を依頼し、スレーブコアAとスレーブコアBの演算結果のどちらが正しいかを検証する、ことができる。スレーブコアAとスレーブコアBの演算結果のどちらが正しいかが分かれば、正しくない方のスレーブコア53にクランク同期処理の停止を依頼する。
【0081】
以上説明したように、本実施例の電子制御装置100は、誤通知回数が多いスレーブコア53はノイズなどの影響を受けやすく正しい演算結果が得られにくいと推定して、スレーブコア53の信頼性の低下を検出することができる。
【実施例4】
【0082】
本実施例ではハイブリッド車両に電子制御装置100が搭載された場合に、イベントの誤通数を検出することを停止する電子制御装置100について説明する。
【0083】
図13は、ハイブリッドECU101と車載LANを介して接続された電子制御装置(エンジンECU)100を示す図の一例である。ハイブリッドECU101は、バッテリ残量、アクセルペダルの踏み込み量、車速等に基づき、パワーモード、エコモード、又は、EVモードの3つのモードに切り替えることができる。このうちEVモードは電気モータだけで走行するモードでエンジン200は強制的に停止される。
【0084】
EVモードにおいても電子制御装置100には電力が供給され、NEセンサ21がNEセンサ信号を出力すれば、クランクカウンタ操作処理やクランク同期処理が実行され得る状態にある。しかし、EVモードでは、エンジン200が停止しているためNEセンサ信号が出力されるはずがなく、マスターコア52からスレーブコア53にイベント通知が出力されるはずがない。
【0085】
したがって、本実施例のようにハイブリッド車に搭載された電子制御装置100は、EVモードであることを検出すると、クランク同期処理実行可否判定処理部57が、イベントの通知を受け付けただけでそれが誤通知であることを検出できる。したがって、今回値と前回値の比較をしてイベントの誤通知を検出する必要がない。
【0086】
また、誤通知回数の差に基づき停止するマスターコア52とスレーブコア53を決定する場合、及び、複数のスレーブコア53がクランク同期処理を実行して演算結果が一致した場合にエンジン制御する場合、EVモードにおける誤通知回数をカウントしておけば、信頼性の高いスレーブコア53を特定しやすくなる。
【0087】
本実施例の電子制御装置100は、ハイブリッド車に搭載された場合、EVモードを利用してイベントの誤検知を容易に検出することができる。
【符号の説明】
【0088】
21 NEセンサ
51 共有メモリ
52 マスターコア
53 スレーブコア
54、56 クランク同期処理部
55 クランクカウンタ操作処理部
57 クランク同期実行可否判定処理部
100 電子制御装置
200 エンジン
【特許請求の範囲】
【請求項1】
第1のコア及び第2のコアと、
前記第1のコアと前記第2のコア間の通信を可能にする通信手段と、
前記第1のコアと前記第2のコアが共有する共有メモリと、
前記第1のコアが備える、外部信号を取得する毎に繰り返し第1の処理を実行し、前記第1の処理毎に所定情報を前記共有メモリに書き込む第1の処理手段と、
前記第1の処理毎に前記通信手段を介して前記第2のコアに処理要求を出力する処理要求手段と、
前記第2のコアが備える、前記処理要求をトリガーに第2の処理を実行する第2の処理手段と、を有するマイコンであって、
前記第2のコアは、前記処理要求を受け付けた場合、前記共有メモリから最新の前記所定情報と前回の前記所定情報を読み出し、最新の前記所定情報と前回の前記所定情報に規定された関係がある場合のみ、前記第2の処理手段に前記第2の処理の実行を許可する比較手段、を有することを特徴とするマイコン。
【請求項2】
前記比較手段は、最新の前記所定情報と前回の前記所定情報に規定された関係がない場合、前記処理要求が誤通知であると判定する、
ことを特徴とする請求項1記載のマイコン。
【請求項3】
前記比較手段は、最新の前記所定情報と前回の前記所定情報に規定された関係がある場合、前記共有メモリの最新の前記所定情報を前回の前記所定情報にコピーする、
ことを特徴とする請求項1又は2記載のマイコン。
【請求項4】
前記規定された関係は、最新の前記所定情報と前回の前記所定情報が異なることである、ことを特徴とする請求項1〜3いずれか1項記載のマイコン。
【請求項5】
前記第1の処理手段は、前記第1の処理毎に数値が大きくなる前記第1の処理の処理結果を前記所定情報として前記共有メモリに記憶し、
前記規定された関係は、最新の前記所定情報が前回の前記所定情報よりも大きいことである、ことを特徴とする請求項4記載のマイコン。
【請求項6】
前記第1の処理手段を備えた第3のコアと、
前記第2の処理手段及び前記比較手段を備えた第4のコアと、を有し、
前記第2のコアと前記第4のコアの前記比較手段は、最新の前記所定情報と前回の前記所定情報に規定された関係がなかった回数をそれぞれカウントして、
2つの前記回数の違いが閾値を超えた場合、前記回数が多い方の前記第1のコアと前記第2のコア又は前記第3のコアと前記第4のコアが有する、前記第1の処理手段、前記第2の処理手段及び前記比較手段を停止する、
ことを特徴とする請求項1〜5いずれか1項記載のマイコン。
【請求項7】
前記第2の処理手段及び前記比較手段を備えた第3のコアを有し、
前記第2のコアと前記第3のコアの前記比較手段は、最新の前記所定情報と前回の前記所定情報に規定された関係がなかった回数をそれぞれカウントし、
前記第2のコアの前記第2の処理手段は、前記第3のコアの前記第2の処理手段の処理結果が自己の前記第2の処理手段の処理結果と略一致する場合に処理結果を制御に用い、
前記第3のコアの前記第2の処理手段の処理結果が自己の前記第2の処理手段の処理結果と略一致しない場合、
前記第2のコアの前記第2の処理手段は、自己の前記回数が前記第3のコアの前記回数よりも少ない場合に前記第3のコアの前記第2の処理手段及び前記比較手段を停止し、
自己の前記回数が前記第3のコアの前記回数よりも多い場合に自己の前記第2の処理手段及び前記比較手段を停止する、
ことを特徴とする請求項1〜5いずれか1項記載のマイコン。
【請求項8】
前記第1の処理はクランク角をカウントする処理であり、前記第2の処理は、イグナイタの通電タイミングの決定及びイグナイタの点火開始タイミングの決定、又は、インジェクタによる燃料噴射量の決定及び燃料噴射タイミングの決定である、
ことを特徴とする請求項1〜7いずれか1項記載のマイコン。
【請求項9】
複数のコアを有するマイコンの処理同期方法であって、
第1のコアの第1の処理手段が、外部信号を取得する毎に繰り返し第1の処理を実行し、前記第1の処理毎に所定情報を前記第1のコアと第2のコアが共有する前記共有メモリに書き込むステップと、
前記第1のコアの処理要求手段が、前記第1のコアと前記第2のコア間の通信を可能にする通信手段を介して前記第1の処理毎に前記第2のコアに処理要求を出力するステップと、
前記第2のコアの比較手段が、前記処理要求を受け付けた場合、前記共有メモリから最新の前記所定情報と前回の前記所定情報を読み出し、最新の前記所定情報と前回の前記所定情報に規定された関係がある場合のみ、第2の処理手段に第2の処理の実行を許可するステップと、
前記第2のコアの前記第2の処理手段が前記処理要求をトリガーに前記第2の処理を実行するステップと、
を有する処理同期方法。
【請求項1】
第1のコア及び第2のコアと、
前記第1のコアと前記第2のコア間の通信を可能にする通信手段と、
前記第1のコアと前記第2のコアが共有する共有メモリと、
前記第1のコアが備える、外部信号を取得する毎に繰り返し第1の処理を実行し、前記第1の処理毎に所定情報を前記共有メモリに書き込む第1の処理手段と、
前記第1の処理毎に前記通信手段を介して前記第2のコアに処理要求を出力する処理要求手段と、
前記第2のコアが備える、前記処理要求をトリガーに第2の処理を実行する第2の処理手段と、を有するマイコンであって、
前記第2のコアは、前記処理要求を受け付けた場合、前記共有メモリから最新の前記所定情報と前回の前記所定情報を読み出し、最新の前記所定情報と前回の前記所定情報に規定された関係がある場合のみ、前記第2の処理手段に前記第2の処理の実行を許可する比較手段、を有することを特徴とするマイコン。
【請求項2】
前記比較手段は、最新の前記所定情報と前回の前記所定情報に規定された関係がない場合、前記処理要求が誤通知であると判定する、
ことを特徴とする請求項1記載のマイコン。
【請求項3】
前記比較手段は、最新の前記所定情報と前回の前記所定情報に規定された関係がある場合、前記共有メモリの最新の前記所定情報を前回の前記所定情報にコピーする、
ことを特徴とする請求項1又は2記載のマイコン。
【請求項4】
前記規定された関係は、最新の前記所定情報と前回の前記所定情報が異なることである、ことを特徴とする請求項1〜3いずれか1項記載のマイコン。
【請求項5】
前記第1の処理手段は、前記第1の処理毎に数値が大きくなる前記第1の処理の処理結果を前記所定情報として前記共有メモリに記憶し、
前記規定された関係は、最新の前記所定情報が前回の前記所定情報よりも大きいことである、ことを特徴とする請求項4記載のマイコン。
【請求項6】
前記第1の処理手段を備えた第3のコアと、
前記第2の処理手段及び前記比較手段を備えた第4のコアと、を有し、
前記第2のコアと前記第4のコアの前記比較手段は、最新の前記所定情報と前回の前記所定情報に規定された関係がなかった回数をそれぞれカウントして、
2つの前記回数の違いが閾値を超えた場合、前記回数が多い方の前記第1のコアと前記第2のコア又は前記第3のコアと前記第4のコアが有する、前記第1の処理手段、前記第2の処理手段及び前記比較手段を停止する、
ことを特徴とする請求項1〜5いずれか1項記載のマイコン。
【請求項7】
前記第2の処理手段及び前記比較手段を備えた第3のコアを有し、
前記第2のコアと前記第3のコアの前記比較手段は、最新の前記所定情報と前回の前記所定情報に規定された関係がなかった回数をそれぞれカウントし、
前記第2のコアの前記第2の処理手段は、前記第3のコアの前記第2の処理手段の処理結果が自己の前記第2の処理手段の処理結果と略一致する場合に処理結果を制御に用い、
前記第3のコアの前記第2の処理手段の処理結果が自己の前記第2の処理手段の処理結果と略一致しない場合、
前記第2のコアの前記第2の処理手段は、自己の前記回数が前記第3のコアの前記回数よりも少ない場合に前記第3のコアの前記第2の処理手段及び前記比較手段を停止し、
自己の前記回数が前記第3のコアの前記回数よりも多い場合に自己の前記第2の処理手段及び前記比較手段を停止する、
ことを特徴とする請求項1〜5いずれか1項記載のマイコン。
【請求項8】
前記第1の処理はクランク角をカウントする処理であり、前記第2の処理は、イグナイタの通電タイミングの決定及びイグナイタの点火開始タイミングの決定、又は、インジェクタによる燃料噴射量の決定及び燃料噴射タイミングの決定である、
ことを特徴とする請求項1〜7いずれか1項記載のマイコン。
【請求項9】
複数のコアを有するマイコンの処理同期方法であって、
第1のコアの第1の処理手段が、外部信号を取得する毎に繰り返し第1の処理を実行し、前記第1の処理毎に所定情報を前記第1のコアと第2のコアが共有する前記共有メモリに書き込むステップと、
前記第1のコアの処理要求手段が、前記第1のコアと前記第2のコア間の通信を可能にする通信手段を介して前記第1の処理毎に前記第2のコアに処理要求を出力するステップと、
前記第2のコアの比較手段が、前記処理要求を受け付けた場合、前記共有メモリから最新の前記所定情報と前回の前記所定情報を読み出し、最新の前記所定情報と前回の前記所定情報に規定された関係がある場合のみ、第2の処理手段に第2の処理の実行を許可するステップと、
前記第2のコアの前記第2の処理手段が前記処理要求をトリガーに前記第2の処理を実行するステップと、
を有する処理同期方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【公開番号】特開2012−108786(P2012−108786A)
【公開日】平成24年6月7日(2012.6.7)
【国際特許分類】
【出願番号】特願2010−258047(P2010−258047)
【出願日】平成22年11月18日(2010.11.18)
【出願人】(000003207)トヨタ自動車株式会社 (59,920)
【Fターム(参考)】
【公開日】平成24年6月7日(2012.6.7)
【国際特許分類】
【出願日】平成22年11月18日(2010.11.18)
【出願人】(000003207)トヨタ自動車株式会社 (59,920)
【Fターム(参考)】
[ Back to top ]