以下、添付図面を参照しながら本発明の実施形態について説明する。説明の理解を容易にするため、各図面において同一の構成要素に対しては可能な限り同一の符号を付して、重複する説明は省略する。
本実施形態に係る電子制御装置10は、車両における内燃機関20(エンジン)の動作を制御するための制御装置(エンジン制御ECU)として構成されている。例えば、電子制御装置10は、内燃機関20に備えられたクランク角センサ(不図示)からの信号に基づいて、内燃機関20におけるインジェクタ(不図示)の開閉動作、すなわち燃料噴射を制御する。
かかる制御において、電子制御装置10で処理されるタスクの中には、クランクシャフトの回転角(クランク角)の位相の変化に同期して周期的に処理されるものがある。例えば、インジェクタの燃料噴射タイミングを決定するための演算は、上記位相が30度増加する毎に処理される。以下の説明においては、上記のように回転角の位相に同期して処理されるタスクのことを、「同期タスク」と表記する。
電子制御装置10による同期タスクの処理についての説明に先立ち、電子制御装置10の構成について説明する。電子制御装置10は、入力回路11と、出力回路12と、マイコン100とを備えている。
入力回路11は、制御対象である内燃機関20から、各種のセンサ信号を受信するための通信インターフェースとなる回路である。センサ信号には、クランク角センサから送信される信号、すなわち、クランク角の位相を示す信号が含まれる。
出力回路12は、インジェクタの開閉を切り替えるための駆動信号を、内燃機関20に向けて出力するための通信インターフェースとなる回路である。尚、出力回路12からは、インジェクタ以外の装置(例えばスパークプラグ)を動作させるための駆動信号が、上記駆動信号と共に送信されてもよい。
マイコン100は、電子制御装置10の主たる部分を構成するマイクロコンピュータである。マイコン100は、CPU110と、ROM120と、RAM130と、I/O140とを備えている。
CPU110は、制御を実行するために必要な演算、すなわちタスクの処理を行うための中央演算処理装置である。CPU110は3つのコア(C0、C1、C2)を有しており、所謂マルチコアの処理装置となっている。つまり、マイコン100はマルチコアマイクロコンピュータとして構成されている。
ROM120は、読み出し専用の半導体メモリである。ROM120には、CPU110で実行されるプログラムや、内燃機関20の制御に必要な各種のマップ等が記憶されている。
RAM130は、書き換え可能な半導体メモリである。RAM130には、制御のための演算結果等が一時的に記憶される。また、本実施形態では、RAM130における情報の記憶場所として、第1記憶部131と、第2記憶部132とが確保されている。第1記憶部131に書き込まれ記憶される情報、及び、第2記憶部132に書き込まれ記憶される情報については、それぞれ後に説明する。
I/O140は、車両に搭載された他のECUと、マイコン100とが通信を行うためのインターフェース部分である。I/O140を介した上記通信は、CPU110により制御される。
尚、上記のような電子制御装置10の構成自体は、第1記憶部131と第2記憶部132とがRAM130に確保されている点を除き、従来の電子制御の構成と同じである。
電子制御装置10は、内燃機関20の動作を制御するにあたり、既に述べた同期タスクの他にも様々なタスクの処理を行っている。本実施形態では、同期タスクを含む複数のタスクが、コアC1とコアC2とによって分散処理されている。
コアC0は、CPU110全体の動作を統括制御している。具体的には、コアC1及びコアC2のそれぞれに対し、処理すべきタスクの振り分けを行っている。尚、このような統括制御は、タスクの処理を行うコアC1又はコアC2のいずれかが、タスクの処理と並行して行うこととしてもよい。その場合、本実施形態におけるコアC0のように、統括制御を行うための専用のコアは不要となる。
タスクの振り分けは、コアC1及びコアC2のそれぞれの処理負荷が概ね均等となるように行われる。しかしながら、例えば、車両の走行状態の変化に伴って内燃機関20の回転数が増加した場合には、一部のタスクの実行頻度が増加するなどにより、コアC1及びコアC2のうち一方の処理負荷が、他方の処理負荷に比べて著しく大きくなってしまう場合がある。
上記のような処理負荷の偏りは、CPU110の処理能力の有効活用という点に鑑みれば好ましいものではない。そこで、CPU110では、一部のコアにおける処理負荷のみが大きくなり過ぎることの無いように、同期タスクの処理を実行するコアが動的に切り替えられる構成となっている。例えば、同期タスクの処理がコアC1で行われている際、当該コアC1の処理負荷が大きくなり過ぎた場合には、同期タスクの処理を実行するコアがコアC1からコアC2へと切り替えられる。
以下の説明においては、コアC1及びコアC2のうち、同期タスクの処理を実行するコアのことを「同期タスク実行コア」とも称する。また、同期タスク実行コアを切り替えるためにコアC0が行う処理のことを「切り替え処理」とも称する。尚、後に説明するように、コアC0が切り替え処理を行うタイミングと、同期タスク実行コアが実際に切り替えられるタイミングとは、本実施形態においては必ずしも一致しない。
本実施形態で行われる切り替え処理の具体的な態様、及びその利点について説明する前に、従来から行われていた切り替え処理の態様について説明する。図10乃至図13は、本発明の比較例(従来例)に係る電子制御装置で実行される、切り替え処理の流れを示すタイムチャートである。尚、当該電子制御装置のハードウェア構成は、図1に示される電子制御装置10の構成と同じである。
図10を参照しながら説明する。図10には、時刻t125において切り替え処理が実行され、同期タスク実行コアがコアC1からコアC2へと切り替えられる例が示されている。
同期タスクは、内燃機関20のクランク角センサから電子制御装置に伝達される情報、すなわち、クランクシャフトの回転角の位相(以下、「センサ位相」と表記する)が、30度変化する毎に実行される。具体的には、センサ位相が60度、90度、120度、150度と、30度増加する毎に、同期タスク実行コアにおいて同期タスクが実行される。尚、センサ位相は、720度まで増加した時点で0度に戻り、内燃機関20の動作に伴って再び30度ずつ増加していく。
図10の例では、時刻t125よりも前において同期タスク実行コアであるコアC1は、センサ位相が90度となった後の時刻t110において、同期タスクの処理を開始する。尚、センサ位相が90度となったタイミングと、同期タスクの処理が開始されるタイミング(時刻t110)とは必ずしも一致しない。このようなタイミングの不一致は、コアC1が同期タスク以外のタスクの処理も行っており、同期タスクの処理の開始タイミングが僅かに遅れてしまうことに起因する。センサ位相が90度となってから、同期タスクの処理が開始されるまでの時間は、同期タスク実行コアの処理負荷に応じて変化する。
その後、時刻t110よりも後の時刻t125において、コアC0により切り替え処理が実行される。同期タスク実行コアはコアC1からコアC2へと切り替えられる。これ以降、コアC1は、センサ位相が30度増加しても同期タスクの処理を行わない状態(以下、当該状態のことを「非実行状態」と称する)となり、コアC2は、センサ位相が30度増加する毎に同期タスクの処理を行う状態(以下、当該状態のことを「実行状態」と称する)となる。
時刻t125の後、センサ位相が120度になったときには、コアC1は非実行状態になっている。このため、コアC1は同期タスクの処理を開始しない。図10に示される時刻t130は、仮にコアC1が実行状態であるとしたときに、120度のセンサ位相に対応した同期タスクの実行が開始される時刻である。
コアC2は、時刻t125よりも前においては同期タスク実行コアではなく、非実行状態となっている。このため、センサ位相が90度となっても、同期タスクの処理を開始しない。図10に示される時刻t120は、仮にコアC2が実行状態であるとしたときに、90度のセンサ位相に対応した同期タスクの実行がコアC2で開始される時刻である。
尚、同図に示されるように、時刻t110と時刻t120とは互いに一致していない。これは、センサ位相が90度となってから、同期タスクの処理が開始されるまでの時間が、コアC1、C2の処理負荷に応じてそれぞれ変化するからである。図10の例では、コアC2が処理を開始する時刻t120が、コアC1が処理を開始する時刻t110よりも後になっている例が示されている。ただし、コアC1及びコアC2のそれぞれの処理負荷によっては、これらの前後関係が入れ替わることも生じ得る。
時刻t120よりも後の時刻t125において、コアC0により切り替え処理が実行される。時刻t125の後、センサ位相が120度になったときには、コアC2は実行状態になっている。このため、コアC2は、120度のセンサ位相に対応した同期タスクの処理を開始する(時刻t140)。図10の例では、時刻t140は時刻t130よりも後の時刻となっている。
以上のように、コアC0による切り替え処理が時刻t125において実行されると、90度のセンサ位相に対応した同期タスクはコアC1のみで行われ、120度のセンサ位相に対応した同期タスクはコアC2のみで行われる。その結果、切り替え処理が行われなかった場合と同様に、電子制御装置10による内燃機関20の制御は正常に行われる。
図11を参照しながら、他の例について説明する。図11の例では、切り替え処理が行われるタイミングが、時刻t130よりも後であり、且つ時刻t140よりも前の時刻t135となっている点において、図10の例と異なっている。
この例でも、90度のセンサ位相に対応した同期タスクの処理はコアC1で開始され(時刻t110)、コアC2では開始されない(時刻t120)。
時刻t130になると、この時点ではコアC1は同期タスク実行コアであり、実行状態なのであるから、コアC1は120度のセンサ位相に対応した同期タスクの処理を開始する。その後、時刻t135において切り替え処理が行われるが、既にコアC1は同期タスクの処理を行っているので、当該処理は中断されることなくそのまま継続される。
時刻t135よりも後の時刻t140になると、この時点ではコアC2は同期タスク実行コアに切り替えられており、実行状態となっている。このため、コアC2は、120度のセンサ位相に対応した同期タスクの処理を開始する。
その結果、120度のセンサ位相に対応した同期タスクの処理は、コアC1とコアC2の両方で開始されてしまうことになる。この場合、内燃機関20に対する駆動信号の送信が2重に送信されてしまうなどにより、内燃機関20の制御において何らかの不具合が生じてしまう可能性がある。
このように、従来の電子制御装置においては、切り替え処理が行われるタイミングによっては、同期タスクが複数のコアで重複して処理されてしまう場合が生じ得る。以下では、このような現象を「処理の重複」とも称する。
引き続き、本発明の比較例に係る電子制御装置の切り替え処理について、図12を参照しながら説明する。図12には、時刻t126において切り替え処理が実行され、同期タスク実行コアがコアC1からコアC2へと切り替えられる例が示されている。
図12では、90度のセンサ位相に対応した同期タスクの処理がコアC1で開始される時刻が、時刻t121として示されている。また、仮にコアC2が実行状態であるとしたときに、90度のセンサ位相に対応した同期タスクの実行がコアC2で開始される時刻が、時刻t111として示されている。図12の例では、時刻t121が時刻t111よりも後の時刻となっている。
同様に、図12では、120度のセンサ位相に対応した同期タスクの処理がコアC2で開始される時刻が、時刻t131として示されている。また、仮にコアC1が実行状態であるとしたときに、120度のセンサ位相に対応した同期タスクの実行がコアC1で開始される時刻が、時刻t141として示されている。図12の例では、時刻t141が時刻t131よりも後の時刻となっている。
時刻t126よりも前において同期タスク実行コアであるコアC1は、センサ位相が90度となった後の時刻t121において、同期タスクの処理を開始する。その後、時刻t121よりも後の時刻t126において、コアC0により切り替え処理が実行される。同期タスク実行コアはコアC1からコアC2へと切り替えられる。
時刻t126の後、センサ位相が120度になったときには、コアC1は非実行状態になっている。このため、時刻t141において、コアC1は同期タスクの処理を開始しない。
コアC2は、時刻t126よりも前においては同期タスク実行コアではなく、非実行状態となっている。このため、センサ位相が90度となっても、コアC2は同期タスクの処理を開始しない。
コアC0により切り替え処理が実行された時刻t126の後、センサ位相が120度になったときには、コアC2は実行状態になっている。このため、コアC2は、120度のセンサ位相に対応した同期タスクの処理を開始する(時刻t131)。
以上のように、コアC0による切り替え処理が時刻t126において実行されると、90度のセンサ位相に対応した同期タスクはコアC1のみで行われ、120度のセンサ位相に対応した同期タスクはコアC2のみで行われる。その結果、切り替え処理が行われなかった場合と同様に、電子制御装置10による内燃機関20の制御は正常に行われる。
図13を参照しながら、他の例について説明する。図13の例では、切り替え処理が行われるタイミングが、時刻t131よりも後であり、且つ時刻t141よりも前の時刻t136となっている点において、図12の例と異なっている。
この例でも、90度のセンサ位相に対応した同期タスクの処理はコアC1で開始され(時刻t121)、コアC2では開始されない(時刻t111)。
時刻t131になると、この時点ではコアC2は未だ同期タスク実行コアではなく、非実行状態なのであるから、コアC2は120度のセンサ位相に対応した同期タスクの処理を開始しない。
時刻t136よりも後の時刻t141になると、この時点ではコアC1は同期タスク実行コアではなくなっており、非実行状態となっている。このため、コアC1は、120度のセンサ位相に対応した同期タスクの処理を開始しない。
その結果、120度のセンサ位相に対応した同期タスクの処理は、コアC1とコアC2のいずれにおいても開始されないことになる。この場合、内燃機関20に対する駆動信号の送信が行われないので、やはり内燃機関20の制御において何らかの不具合が生じてしまう可能性がある。
このように、従来の電子制御装置においては、切り替え処理が行われるタイミングによっては、同期タスクの一部が処理されない場合が生じ得る。以下では、このような現象を「処理の抜け」とも称する。
以上に説明した処理の重複、及び処理の抜けは、センサ位相が特定の位相となった際、それに対応した同期タスクの処理が開始されるタイミングがコア間で異なること、及び、切り替え処理が行われるタイミングが特に定められておらず、同期タスクの開始タイミング等とは非同期に切り替え処理が行われてしまうことに起因する。
本発明は、処理の重複及び処理の抜けを確実に防止しながら、切り替え処理を行うことを可能にするものである。図2及び図3を参照しながら、本実施形態における切り替え処理の概要について説明する。
図2は、電子制御装置10で実行される切り替え処理の流れを示すタイムチャートである。尚、当該タイムチャートの上段部分には、RAM130の状態が模式的に示されている。
本実施形態において同期タスクが実行されるタイミングは、図10乃至図13を参照しながら説明した比較例におけるタイミングと同一である。すなわち、本実施形態においても、センサ位相が60度、90度、120度、150度と、30度増加する毎に、同期タスク実行コアにおいて同期タスクが実行される。
図2には、時刻t35において切り替え処理が実行され、同期タスク実行コアがコアC1からコアC2へと切り替えられる例が示されている。時刻t35よりも前において同期タスク実行コアであるコアC1は、センサ位相が90度となった後の時刻t10において、同期タスクの処理を開始する。センサ位相が90度となったタイミングと、同期タスクの処理が開始されるタイミングとは必ずしも一致しない。その理由は、比較例の説明において既に述べたとおりである。
RAM130の第1記憶部131には、同期タスク実行コアを示す数値(コア番号)が記憶されている。図2の例の場合、時刻t35よりも前の期間においては、第1記憶部131にはコアC1を示す数値である「1」が記憶されている。時刻t35よりも後の期間においては、第1記憶部131にはコアC2を示す数値である「2」が記憶されている。
時刻t10の後、センサ位相が90度から120度に変化すると、120度に対応した同期タスクの処理がコアC1により開始される(時刻t30)。図2の例では、切り替え処理が行われる時刻t35は、コアC1が同期タスクの処理を開始する時刻t30よりも後となっている。
本実施形態における切り替え処理は、コアC0が、第1記憶部131に記憶されているコア番号を書き換えることによって行われる。例えば、同期タスク実行コアをコアC1からコアC2に変更する場合には、第1記憶部131に記憶されているコア番号は1から2へと書き換えられる。
また、コアC0は、第1記憶部131に記憶されているコア番号を書き換えると同時に、第2記憶部132に記憶されている切り替え位相をも書き換える。「切り替え位相」とは、各コアの状態(実行状態、又は非実行状態)が切り替えられるべきタイミングを示す位相のことである。つまり、同期タスク実行コアの切り替え(変更)は、切り替え処理が実行されたタイミングである時刻t35において行われるのではなく、センサ位相が、第2記憶部132に記憶されている切り替え位相と一致したときに行われる。
図2の例では、時刻t35において、第1記憶部131に記憶されているコア番号は1から2へと書き換えられる。また、第2記憶部132に記憶されている切り替え位相の値は150度に書き換えられる。
本実施形態では、各コア(コアC1、コアC2)は、同期タスクの処理を行うに先立ち、第1記憶部131に記憶されているコア番号を参照する。また、第2記憶部132に記憶されている切り替え位相をも参照する。
このとき、読み込まれたコア番号が当該コアを示す数値であった場合には、当該コアは、センサ位相が切り替え位相と一致したときにのみ非実行状態から実行状態へと切り替わる。一方、読み込まれたコア番号が当該コアを示す数値でなかった場合には、当該コアは、センサ位相が切り替え位相と一致したときにのみ実行状態から非実行状態へと切り替わる。
時刻t30においては、コアC0による切り替え処理が未だ行われておらず、第1記憶部131に記憶されているコア番号は1のままとなっている。このため、コアC1は時刻t30以降も実行状態のままであり、時刻t30において同期タスクの処理を開始する。
その後、時刻t35において切り替え処理が行われ、第1記憶部131のコア番号が書き換えられるのであるが、既にコアC1は同期タスクの処理を行っているので、当該処理は中断されることなくそのまま継続される。
時刻t35の後、センサ位相が150度になると、コアC1は再び第1記憶部131のコア番号、及び、第2記憶部132の切り替え位相を参照する(時刻t50)。時刻t50においては、第1記憶部131に記憶されているコア番号は2となっており、コアC1を示す数値(1)とは一致しない。
また、第2記憶部132の切り替え位相は150度となっており、時刻t50におけるセンサ位相と一致している。このため、コアC1は、時刻t50において実行状態から非実行状態へと切り替わり、時刻t50では同期タスクの処理を開始しない。
コアC2は、時刻t35よりも前においては同期タスク実行コアではなく、非実行状態となっている。このため、センサ位相が90度となっても、同期タスクの処理を開始しない。図2では、仮にコアC2が実行状態であるとしたときに、90度のセンサ位相に対応した同期タスクの実行がコアC2で開始される時刻を時刻t20として示している。
時刻t20よりも後の時刻t35において、コアC0により切り替え処理が実行される。センサ位相が120度になると、コアC2は第1記憶部131のコア番号、及び、第2記憶部132に記憶されている切り替え位相を参照する(時刻t40)。図2の例では、時刻t40は、切り替え処理が実行される時刻t35よりも後である。
時刻t40においては、第1記憶部131に記憶されているコア番号は2となっており、コアC2に対応する番号と一致している。しかしながら、第2記憶部132に記憶されている切り替え位相は150度となっており、時刻t40におけるセンサ位相(120度)とは一致していない。このため、コアC2は、時刻t40においては実行状態に切り替わらず、時刻t40以降も非実行状態のままとなる。このため、このため、センサ位相が120度となっても、時刻t40においては同期タスクの処理を開始しない。
時刻t40の後、センサ位相が150度になると、コアC2は再び第1記憶部131のコア番号、及び、第2記憶部132に記憶されている切り替え位相を参照する(時刻t60)。時刻t60においては、第1記憶部131に記憶されているコア番号は2となっており、コアC2を示す数値(2)と一致している。また、第2記憶部132に記憶されている切り替え位相は150度となっており、時刻t60におけるセンサ位相(150)と一致している。このため、コアC2は、時刻t60において非実行状態から実行状態へと切り替わり、時刻t60において同期タスクの処理を開始する。
図2に示される例では、120度の位相に対応した同期タスクの処理をコアC1が開始する時刻t30と、120度の位相に対応した同期タスクの処理をコアC2が開始する時刻t40と、の間となる時刻t35において切り替え処理が実行されている。つまり、図11を参照しながら説明した比較例の場合と同様のタイミングにおいて、切り替え処理が実行されている。
しかしながら、本実施形態においては、図11の場合のような処理の重複は生じておらず、120度に対応した同期タスクの処理はコアC1においてのみ開始されている。
図3も、電子制御装置10で実行される切り替え処理の流れを示すタイムチャートである。図2の場合と同様に、当該タイムチャートの上段部分には、RAM130の状態が模式的に示されている。
図3には、時刻t16において切り替え処理が実行され、同期タスク実行コアがコアC1からコアC2へと切り替えられる例が示されている。時刻t16において、第1記憶部131に記憶されているコア番号は1から2へと書き換えられる。また、第2記憶部132に記憶されている切り替え位相は120度に書き換えられる。
図3では、90度のセンサ位相に対応した同期タスクの処理がコアC1で開始される時刻が、時刻t21として示されている。また、仮にコアC2が実行状態であるとしたときに、90度のセンサ位相に対応した同期タスクの実行がコアC2で開始される時刻が、時刻t11として示されている。図3の例では、時刻t21が時刻t11よりも後の時刻となっている。また、切り替え処理が実行される時刻t16は、時刻t11よりも後であり、且つ時刻t21よりも前である。
同様に、図3では、120度のセンサ位相に対応した同期タスクの処理がコアC2で開始される時刻が、時刻t31として示されている。また、仮にコアC1が実行状態であるとしたときに、120度のセンサ位相に対応した同期タスクの実行がコアC1で開始される時刻が、時刻t41として示されている。図3の例では、時刻t41が時刻t31よりも後の時刻となっている。
センサ位相が90度となると、コアC1は、第1記憶部131のコア番号、及び、第2記憶部132に記憶されている切り替え位相を参照する(時刻t21)。
時刻t21においては、第1記憶部131に記憶されているコア番号は2となっており、コアC1に対応する番号と一致していない。このため、コアC1は、今後は同期タスク実行コアではなくなり、実行状態から非実行状態に切り替わることとなる。
しかしながら、このとき第2記憶部132に記憶されている切り替え位相は120度となっており、時刻t21におけるセンサ位相(90度)とは一致していない。このため、コアC1は、時刻t21の時点においては未だ非実行状態に切り替わらず、引き続き実行状態のままとなる。このため、このため、センサ位相が90度である時刻t21において、コアC1は同期タスクの処理を開始する。
時刻t21の後、センサ位相が120度になると、コアC1は再び第1記憶部131のコア番号、及び、第2記憶部132の切り替え位相を参照する(時刻t41)。時刻t41においては、第1記憶部131に記憶されているコア番号は2となっており、コアC1を示す数値(1)とは一致しない。
また、第2記憶部132の切り替え位相は120度となっており、時刻t41におけるセンサ位相と一致している。このため、コアC1は、時刻t41において実行状態から非実行状態へと切り替わり、時刻t41では同期タスクの処理を開始しない。
時刻t11において、コアC2は、第1記憶部131のコア番号、及び、第2記憶部132に記憶されている切り替え位相を参照する。時刻t11においては、第1記憶部131に記憶されているコア番号は1となっており、コアC2を示す数値(2)とは一致していない。このため、それまで非実行状態であったコアC2は、時刻t11以降も引き続き非実行状態のままとなる。コアC2は、時刻t11において同期タスクの処理を開始しない。
センサ位相が120度になると、コアC2は、第1記憶部131のコア番号、及び、第2記憶部132に記憶されている切り替え位相を再び参照する(時刻t31)。時刻t31においては、第1記憶部131に記憶されているコア番号は2となっており、コアC2を示す数値(2)と一致している。
また、第2記憶部132の切り替え位相は120度となっており、時刻t31におけるセンサ位相と一致している。このため、コアC2は非実行状態から実行状態へと切り替わり、時刻t31において同期タスクの処理を開始する。
図3に示される例では、90度の位相に対応した同期タスクの処理をコアC2が開始する時刻t11と、90度の位相に対応した同期タスクの処理をコアC1が開始する時刻t21と、の間となる時刻t16において切り替え処理が実行されている。つまり、図13を参照しながら説明した比較例の場合と同様のタイミングにおいて、切り替え処理が実行されている。
しかしながら、本実施形態においては、図13の場合のような処理の抜けは生じておらず、90度に対応した同期タスクの処理はコアC1において開始されている。
図4を参照しながら、電子制御装置10において実行される処理の具体的な内容について説明する。図4に示される一連の処理は、所定の周期が経過する毎に、マイコン100のコアC0において繰り返し実行されている。尚、当該処理は、コアC1又はコアC2のいずれかにおいて、同期タスク等の処理と並行して実行されていてもよい。
最初のステップS01では、切り替え処理の必要性が判断される。すなわち、コアC1及びコアC2において、処理負荷の偏りが生じていないかどうかが判断される。当該判定について、図5を参照しながら説明する。
図5には、内燃機関の20制御が電子制御装置10によって行われているときにおける、一つのコア(コアC1等)の処理負荷の例が示されている。具体的には、同期タスク以外の処理が行われた時間PT1、同期タスクの処理が行われた時間PT2、及び何ら処理が行われなかった空き時間DTのそれぞれについて、所定時間において各時間が占める割合の例が図示されている。
図5(A)の例では、時間PT1と時間PT2との和、すなわち、コアにおいて何らかの処理が行われていた時間の合計が比較的短くなっており、当該時間が所定時間において占める割合が閾値TH未満となっている。つまり、当該コアの処理負荷は比較的小さくなっており、当該コアでは、更なる処理を追加して行う余裕がある状態となっている。
一方、図5(B)の例では、時間PT1と時間PT2との和が、閾値THを超えている。つまり、当該コアの処理負荷は比較的大きくなっており、当該コアは処理能力の限界に近い状態となっている。
図4に戻って説明を続ける。ステップS01では、時間PT1と時間PT2との和が所定時間において占める割合が、閾値THを超えている場合にのみ、切り替え処理が必要であると判定される。換言すれば、空き時間DTが所定期間において占める割合が、閾値(100%から閾値THを差し引いて得られた値)を下回った場合にのみ、切り替え処理が必要であると判定される。
一方、時間PT1と時間PT2との和が所定時間において占める割合が、閾値THを超えていない場合には、切り替え処理が不要であると判定される。換言すれば、空き時間DTが所定期間において占める割合が、閾値(100%から閾値THを差し引いて得られた値)を下回らない場合には、切り替え処理が不要であると判定される。
ステップS01において、切り替え処理が不要であると判定された場合には、図4に示される一連の処理を終了する。一方、切り替え処理が必要であると判定された場合には、ステップS02に移行する。ステップS02では、切り替え処理後において同期タスクを実行するコアのコア番号(実行コア番号)が決定される。
切り替え処理後の新たな実行コア番号を決定する方法について、図6及び図7を参照しながら説明する。図6及び図7には、内燃機関の20制御が電子制御装置10によって行われているときにおける、コアC1及びコアC2のそれぞれの処理負荷の例が示されている。図6及び図7においても、図5と同様に、同期タスク以外の処理が行われた時間PT1、同期タスクの処理が行われた時間PT2、何ら処理が行われなかった空き時間DTのそれぞれについて、所定時間において各時間が占める割合の例が図示されている。
図6及び図7例では、コアC1が同期タスク実行コアとなっている。このため、コアC1については、時間PT1、時間PT2、及び空き時間DTがそれぞれ存在している。一方、コアC2は同期タスク実行コアではないので、コアC2については、同期タスクの処理が行われた時間PT2は存在しない。
ここで、前記所定時間あたりにおける時間PT2と空き時間DTとの和を「合算時間」と定義する。コアC1についての合算時間T1は、時間PT2と空き時間DTとの和となる。一方、コアC2についての合算時間T2は、(時間PT2が存在しないので)空き時間DTと同じである。図6の例では、コアC2における合算時間T2の方が、コアC1における合算時間T1よりも長くなっている。
図4に戻って説明を続ける。ステップS02では、各コア(C1、C2)における合算時間(T1、T2)をそれぞれ算出した上で、それらのうち最も長いものに対応するコア(図6の例ではコアC2)を示すコア番号が、新たな実行コア番号とされる。
つまり、切り替え処理後における同期タスク実行コアの空き時間DTが、切り替え処理前における同期タスク実行コアの空き時間DTよりも長くなるように、新たな実行コア番号が決定される。
尚、図7に示される例のように、合算時間T1の方が合算時間T2よりも長いような場合には、最も長い合算時間に対応するコアは、同期タスク実行コアであるコアC1ということになる。この場合、実行コア番号は変化せずに1のままとなる。このように、実行コア番号が変化すると、同期タスク実行コアの空き時間DTが短くなってしまうような場合には、実行コア番号は変化しない。
ステップS02に続くステップS03では、実行コア番号が変化するか否かが判定される。すなわち、ステップS02で決定された実行コア番号が、切り替え処理が行われる前における同期タスク実行コアのコア番号とは異なるか否かが判定される。
実行コア番号が変化しない場合には、切り替え処理は不要ということであるから、図4に示される一連の処理を終了する。実行コア番号が変化する場合には、ステップS04に移行する。
ステップS04では、切り替え位相が決定される。切り替え位相は、図4の処理が行われている時点の位相に基づいて決定される。具体的には、当該時点におけるセンサ位相(例えば90度)の次に回転同期タスクが実行される位相(この場合は120度)が、切り替え位相として決定される。
切り替え位相(Pn)を上記のように決定するための式の例としては、以下の式(1)が挙げられる。
Pn=(((Pc/30)+1)%24)×30・・・(1)
上記の式(1)において、Pcは現時点におけるセンサ位相である。また、「/」は商を算出するための演算子であり、「%」は剰余を算出するための演算子である。
尚、切り替え位相を決定するための方法は、上記のようなものに限られない。例えば、現時点におけるセンサ位相(例えば90度)の次の次に回転同期タスクが実行される位相(この場合は150度)が、切り替え位相として決定されてもよい。
ステップS04に続くステップS05では、ステップS04で決定された切り替え位相が第2記憶部132に書き込まれる。また、ステップS05に続くステップS06では、ステップS02で決定された実行コア番号が第1記憶部131に書き込まれる。
図8を参照しながら、コアC1及びコアC2で実行される処理の流れについて説明する。図8に示される処理は、コアC1及びコアC2のそれぞれにおいて、センサ位相が30度変化する毎に繰り返し実行される。尚、センサ位相が30度変化したタイミング(90度等となったタイミング)と、図8の処理が開始されるタイミングとは、必ずしも一致しない。その理由は、比較例の説明等において既に述べたとおりである。
最初のステップS11では、第1記憶部131に記憶されているコア番号(実行コア番号)を読み出す。続くステップS12では、第2記憶部132に記憶されている切り替え位相を読み出す。
ステップS12に続くステップS13では、読み出された実行コア番号と切り替え位相、及び、現時点におけるコアの状態(実行状態又は非実行状態)に基づいて、今後の状態(実行状態又は非実行状態)を決定し切り替える。
既に述べたように、本実施形態においては、第1記憶部131の実行コア番号が当該コアを示す数値であった場合には、当該コアは、センサ位相が第2記憶部132の切り替え位相と一致したときにのみ非実行状態から実行状態へと切り替わる。一方、第1記憶部131のコア番号が当該コアを示す数値でなかった場合には、当該コアは、センサ位相が第2記憶部132の切り替え位相と一致したときにのみ実行状態から非実行状態へと切り替わる。
状態の切り替えを以上のように行うための、ステップS13における具体的な決定方法について、図9を参照しながら説明する。図9は、コアC1及びコアC2のそれぞれについての状態遷移図である。
コアC1を例にとって説明する。例えば、図3における時刻t16より前のように、初回の切り替え処理が行われるよりも前の初期状態においては、コアC1は実行状態(ST1)となっている。
センサ位相が変化して同期タスクが実行されるべきタイミングにおいて、実行状態であるコアC1は、以下の条件Bが満たされているか否かを判定する。
条件Bとは、読み出された実行コア番号が、当該コア(この例ではコアC1)を示すコア番号と一致しておらず、且つ、読み出された切り替え位相が、現時点におけるセンサ位相と一致していること、である。
コアC1は、このような条件Bが満たされている場合にのみ、実行状態(ST1)から非実行状態(ST2)へと切り替わる。例えば、図3の時刻t21においては、読み出された実行コア番号(2)は、コアC1を示すコア番号(1)と一致していないので、条件Bの前半部分を満たしている。しかしながら、読み出された切り替え位相(120)は、時刻t21におけるセンサ位相(90度)と一致していないので、条件Bの後半部分を満たしていない。このため、時刻t21の時点では、実行状態(ST1)から非実行状態(ST2)へは切り替わらない。
コアC1が非実行状態となった後、同期タスクが再び実行されるべきタイミングになると、コアC1は、以下の条件Aが満たされているか否かを判定する。
条件Aとは、読み出された実行コア番号が、当該コア(この例ではコアC1)を示すコア番号と一致しており、且つ、読み出された切り替え位相が、現時点におけるセンサ位相と一致していること、である。
コアC1は、このような条件Aが満たされている場合にのみ、非実行状態(ST2)から実行状態(ST1)へと切り替わる。
コアC2についても上記と同様である。例えば、図2における時刻t35より前のように、初回の切り替え処理が行われるよりも前の初期状態においては、コアC2は非実行状態(ST2)となっている。
センサ位相が変化して同期タスクが実行されるべきタイミングにおいて、非実行状態であるコアC2は、上記の条件Aが満たされているか否かを判定する。コアC2は、条件Aが満たされている場合にのみ、非実行状態(ST2)から実行状態(ST1)へと切り替わる。例えば、図2の時刻t40においては、読み出された実行コア番号(2)は、コアC2を示すコア番号(2)と一致しているので、条件Aの前半部分を満たしている。しかしながら、読み出された切り替え位相(150)は、時刻t40におけるセンサ位相(120度)と一致していないので、条件Aの後半部分を満たしていない。このため、時刻t40の時点では、非実行状態(ST2)から実行状態(ST1)へは切り替わらない
コアC2が非実行状態となった後、同期タスクが再び実行されるべきタイミングになると、コアC2は条件Bが満たされているか否かを判定する。コアC2は、条件Bが満たされている場合にのみ、実行状態(ST1)から非実行状態(ST2)へと切り替わる。
図8に戻って説明を続ける。ステップS13に続くステップS14では、ステップS13の結果、当該セルが実行状態となったかどうかが判定される。実行状態となっていれば、同期タスクの実行を行う(ステップS15)。実行状態となっていなければ、同期タスクの実行を行うことなく、図8に示される処理を終了する。
以上、具体例を参照しつつ本発明の実施の形態について説明した。しかし、本発明はこれらの具体例に限定されるものではない。すなわち、これら具体例に、当業者が適宜設計変更を加えたものも、本発明の特徴を備えている限り、本発明の範囲に包含される。例えば、前述した各具体例が備える各要素およびその配置、材料、条件、形状、サイズなどは、例示したものに限定されるわけではなく適宜変更することができる。また、前述した各実施の形態が備える各要素は、技術的に可能な限りにおいて組み合わせることができ、これらを組み合わせたものも本発明の特徴を含む限り本発明の範囲に包含される。