(57)【特許請求の範囲】
【請求項１】
演算処理を実行するコア（２１，２２）を複数備えるマイクロコンピュータ（３）であって、
複数の前記コアのうち、１個の前記コアをマスタコア（２１）とし、前記マスタコア以外の前記コアをスレーブコア（２２）として、
前記マスタコアは、
予め設定されたイベント発生条件が成立したか否かを判断するように構成されたイベント判断部（３１）と、
前記イベント発生条件が成立したと前記イベント判断部が判断した場合に、イベントが発生した旨を示すイベント情報を前記スレーブコアへ出力するように構成された情報出力部（４２）と、
前記イベント発生条件が成立したと前記イベント判断部が判断した場合に、前記イベントに対応して予め設定された複数の前記演算処理を含むタスクの実行を要求するように構成されたマスタ要求部（４１）と、
前記マスタ要求部が前記タスクの実行を要求した場合に、前記タスクに含まれる複数の前記演算処理のそれぞれについて事前に実行する必要がある他の前記演算処理が予め設定された処理制約情報と、前記タスクに含まれる複数の前記演算処理のそれぞれについて前記演算処理を実行可能な状態であるか否かを示す処理状態情報とに基づいて、前記複数の演算処理の中から、前記マスタコアに実行させる前記演算処理を決定するように構成されたマスタ決定部（３３）とを備え、
前記スレーブコアは、
前記情報出力部から前記イベント情報が入力されると、前記タスクの実行を要求するように構成されたスレーブ要求部（５２）と、
前記スレーブ要求部が前記タスクの実行を要求した場合に、前記処理制約情報と前記処理状態情報とに基づいて、複数の前記演算処理の中から、前記スレーブコアに実行させる前記演算処理を決定するように構成されたスレーブ決定部（５３）とを備えるマイクロコンピュータ。
【請求項２】
請求項１に記載のマイクロコンピュータであって、
前記マスタ要求部および前記スレーブ要求部は、
前記処理制約情報および前記処理状態情報に加えて、更に、前記タスクに含まれる複数の前記演算処理のそれぞれについて実行可能な前記コアが予め設定されたコア制約情報に基づいて、実行させる前記演算処理を決定するように構成されるマイクロコンピュータ。
【請求項３】
請求項１または請求項２に記載のマイクロコンピュータであって、
前記マスタ決定部は、
複数の前記演算処理の中から１つの前記演算処理を選択するように構成されたマスタ選択部（Ｓ２０，Ｓ７０，Ｓ３２０，Ｓ３７０）と、
少なくとも前記処理制約情報および前記処理状態情報に基づいて、前記マスタ選択部で選択された前記演算処理であるマスタ対象処理が前記マスタコアにおいて実行可能であるか否かを判断するマスタ判断部（Ｓ３０〜Ｓ６０，Ｓ８０〜Ｓ１００，Ｓ１４０）とを備え、
前記マスタ選択部は、前記マスタコアにおいて前記マスタ対象処理を実行可能ではないと前記マスタ判断部が判断した場合に、更に他の前記演算処理を前記マスタ対象処理として選択し、
前記スレーブ決定部は、
複数の前記演算処理の中から１つの前記演算処理を選択するように構成されたスレーブ選択部（Ｓ２０，Ｓ７０，Ｓ３２０，Ｓ３７０）と、
少なくとも前記処理制約情報および前記処理状態情報に基づいて、前記スレーブ選択部で選択された前記演算処理であるスレーブ対象処理が前記スレーブコアにおいて実行可能であるか否かを判断するスレーブ判断部（Ｓ３０〜Ｓ６０，Ｓ８０〜Ｓ１００，Ｓ１４０）とを備え、
前記スレーブ選択部は、前記スレーブコアにおいて前記スレーブ対象処理を実行可能ではないと前記スレーブ判断部が判断した場合に、更に他の前記演算処理を前記スレーブ対象処理として選択するマイクロコンピュータ。
【請求項４】
請求項１〜請求項３の何れか１項に記載のマイクロコンピュータであって、
前記マスタコアは、
前記マスタコアが前記演算処理を実行することにより算出されたデータのうち、前記マスタコアと前記スレーブコアとの間で共有する必要があるデータとして予め設定された共有データを、予め設定されたデータ記憶領域（１３）に記憶するマスタ記憶部（３５）を備え、
前記スレーブコアは、
前記スレーブコアが前記演算処理を実行することにより算出されたデータのうち、前記共有データを前記データ記憶領域に記憶するスレーブ記憶部（５５）を備え、
前記マスタ記憶部および前記スレーブ記憶部は、
前記演算処理を実行することにより算出された最新の前記共有データと、最新の前記共有データが算出された時点より過去における少なくとも１つの時点で算出された前記共有データとを前記データ記憶領域に記憶するマイクロコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、コアを複数備えるマイクロコンピュータに関する。
【背景技術】
【０００２】
特許文献１のように、複数のコアを備え、複数の処理を各コアに割り当てることにより、複数の処理を並列に実行するように構成されたマイクロコンピュータが知られている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１２−１０８５７６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
複数の処理を複数のコアに割り当てて実行する場合には、各コアで個別に処理が進行する。しかし、複数の処理の中で、第１の処理の実行が完了するまでは第２の処理の開始を保留させておくというような処理順序が設定されている場合がある。この場合に、上記の第１の処理を第１のコアに割り当て、上記の第２の処理を第２のコアに割り当てると、第１のコアが第１の処理の実行を完了するまで、第２のコアは処理を行うことなく待機していなくてはならないという状況が発生し、処理効率が低下してしまう恐れがある。
【０００５】
本開示は、コアを複数備えるマイクロコンピュータにおいて処理効率を向上させることを目的とする。
【課題を解決するための手段】
【０００６】
本開示の一態様は、演算処理を実行するコア（２１，２２）を複数備えるマイクロコンピュータ（３）であって、複数のコアのうち、１個のコアをマスタコア（２１）とし、マスタコア以外のコアをスレーブコア（２２）とする。
【０００７】
マスタコアは、イベント判断部（３１）と、情報出力部（４２）と、マスタ要求部（４１）と、マスタ決定部（３３）とを備える。スレーブコアは、スレーブ要求部（５２）と、スレーブ決定部（５３）とを備える。
【０００８】
イベント判断部は、予め設定されたイベント発生条件が成立したか否かを判断するように構成される。
情報出力部は、イベント発生条件が成立したとイベント判断部が判断した場合に、イベントが発生した旨を示すイベント情報をスレーブコアへ出力するように構成される。
【０００９】
マスタ要求部は、イベント発生条件が成立したとイベント判断部が判断した場合に、イベントに対応して予め設定された複数の演算処理を含むタスクの実行を要求するように構成される。
【００１０】
マスタ決定部は、マスタ要求部がタスクの実行を要求した場合に、処理制約情報と、処理状態情報とに基づいて、複数の演算処理の中から、マスタコアに実行させる演算処理を決定するように構成される。処理制約情報は、タスクに含まれる複数の演算処理のそれぞれについて事前に実行する必要がある他の演算処理が予め設定される。処理状態情報は、タスクに含まれる複数の演算処理のそれぞれについて演算処理を実行可能な状態であるか否かを示す。
【００１１】
スレーブ要求部は、情報出力部からイベント情報が入力されると、タスクの実行を要求するように構成される。スレーブ決定部は、スレーブ要求部がタスクの実行を要求した場合に、処理制約情報と処理状態情報とに基づいて、複数の演算処理の中から、スレーブコアに実行させる演算処理を決定するように構成される。
【００１２】
このように構成されたマイクロコンピュータでは、イベント発生条件が成立したとマスタコアのイベント判断部が判断すると、マスタコアの情報出力部がイベント情報をスレーブコアへ出力する。このため、イベントの発生をマスタコアとスレーブコアの両方で認識することができる。
【００１３】
そして、イベントが発生すると、マスタコアおよびスレーブコアはそれぞれ独立に、処理制約情報と処理状態情報とに基づいて、複数の演算処理の中から、マスタコアおよびスレーブコアに実行させる演算処理を決定する。
【００１４】
ここで、例えば、第１の処理の実行が完了するまでは第２の処理の開始を保留させておくという処理順序が処理制約情報に設定されているとする。この場合に、第１の処理をマスタコアに割り当て、第２の処理をスレーブコアに割り当てると、マスタコアが第１の処理の実行を完了するまで、スレーブコアは処理を行うことなく待機していなくてはならない状況が発生する。しかし、スレーブコアは、マスタコアが第１の処理を実行している間に、処理制約情報および処理状態情報に基づいて、第１の処理の実行が完了するまで開始を保留させておく必要がなく且つ演算処理を実行可能な状態である第３の処理を実行することができる。
【００１５】
このように、本開示のマイクロコンピュータは、マスタコアおよびスレーブコアの少なくとも一方が演算処理を行っていないという状況の発生を抑制し、処理効率を向上させることができる。
【００１６】
なお、この欄および特許請求の範囲に記載した括弧内の符号は、一つの態様として後述する実施形態に記載の具体的手段との対応関係を示すものであって、本開示の技術的範囲を限定するものではない。
【図面の簡単な説明】
【００１７】
【図１】ＥＣＵ１の構成を示すブロック図である。
【図２】処理順制約テーブル４０の構成を示す図である。
【図３】第１処理順判断処理の第１部分を示すフローチャートである。
【図４】第１処理順判断処理の第２部分を示すフローチャートである。
【図５】第２処理順判断処理の第１部分を示すフローチャートである。
【図６】第２処理順判断処理の第２部分を示すフローチャートである。
【図７】ＲＡＭ１３に記憶される共有データを示す図である。
【図８】エンジン位置２３とエンジン位置０においてコア２１，２２で実行される処理を示す図である。
【発明を実施するための形態】
【００１８】
以下に本開示の実施形態を図面とともに説明する。
本実施形態の電子制御装置１（以下、ＥＣＵ１）は、車両に搭載され、図１に示すように、マイクロコンピュータ（以下、マイコン）、入力回路４および出力回路５を備えている。ＥＣＵは、Electronic Control Unitの略である。
【００１９】
そしてマイコン３には、図示しないクランク角センサ、エアフロメータ、スロットル開度センサ、吸気圧センサおよび空燃比センサ等からの信号が、入力回路４を介して入力される。
【００２０】
クランク角センサは、エンジンのクランク軸の回転角を検出する。エアフロメータは、吸気管を通ってエンジンに供給される空気量を検出する。スロットル開度センサは、スロットルバルブの開度を検出する。吸気圧センサは、吸気管内の圧力を検出する。空燃比センサは、排ガス中の酸素濃度からエンジンに供給された燃料混合気の空燃比を検出する。
【００２１】
そしてマイコン３は、入力回路４を介して入力される上記各信号に基づいてエンジンの状態を検出するとともに、その検出結果に基づいて、スロットルバルブの開度を変えるスロットルモータ、各気筒内の点火プラグ、および各気筒内のインジェクタなどの各種アクチュエータを駆動するための駆動信号を出力回路５を介して出力してエンジンを作動させる。
【００２２】
またマイコン３は、ＣＰＵ１１、ＲＯＭ１２、ＲＡＭ１３、Ｉ／Ｏ１４及びこれらの構成を接続するバスラインなどから構成され、ＲＯＭ１２に記憶されたプログラムに基づいて、エンジンを制御するための各種制御処理を実行する。マイクロコンピュータの各種機能は、ＣＰＵ１１が非遷移的実体的記録媒体に格納されたプログラムを実行することにより実現される。この例では、ＲＯＭ１２が、プログラムを格納した非遷移的実体的記録媒体に該当する。また、このプログラムの実行により、プログラムに対応する方法が実行される。
【００２３】
さらにＣＰＵ１１は、プログラムを実行するための演算ユニットおよびレジスタなどを含むＣＰＵコア（以下、コア）２１，２２を備える。コア２１，２２は、エンジンを制御するための各種制御処理を分散して実行する。コア２１，２２のうち、コア２１はマスタとして機能し、コア２２はスレーブとして機能する。そして、コア２１とコア２２との間はデータ通信可能に接続されている。以下、コア２１をマスタコア２１ともいい、コア２２をスレーブコア２２ともいう。
【００２４】
マスタコア２１は、イベント生成部３１、イベント管理部３２、スケジューラ３３、処理実行部３４およびデータ管理部３５を備える。
イベント生成部３１は、予め設定された角度イベント生成条件が成立したか否かを判断し、角度イベント生成条件が成立したと判断した場合に、角度同期イベントを生成する。本実施形態の角度イベント生成条件は、クランク軸が予め設定されたイベント生成角度（例えば、３０°ＣＡ）回転することである。このため、イベント生成部３１は、クランク角センサからの信号に基づいて、クランク軸がイベント生成角度回転する毎に角度同期イベントを生成する。またイベント生成部３１は、予め設定された時間イベント生成条件が成立したか否かを判断し、時間イベント生成条件が成立したと判断した場合に、時間同期イベントを生成する。本実施形態の時間イベント生成条件は、予め設定されたイベント生成時間（例えば、１ｍｓ）が経過することである。このため、イベント生成部３１は、イベント生成時間が経過する毎に、時間同期イベントを生成する。
【００２５】
イベント生成部３１は、角度同期イベントを生成すると、角度同期イベントを生成した旨を示す角度同期イベント情報をイベント管理部３２へ出力する。イベント生成部３１は、時間同期イベントを生成すると、時間同期イベントを生成した旨を示す時間同期イベント情報をイベント管理部３２へ出力する。
【００２６】
イベント管理部３２は、タスク要求部４１と同期部４２を備える。タスク要求部４１は、イベント生成部３１から角度同期イベント情報が入力されると、角度同期イベントに対応して予め設定された角度同期タスクの実行を要求する実行要求をスケジューラ３３へ出力する。タスク要求部４１は、イベント生成部３１から時間同期イベント情報が入力されると、時間同期イベントに対応して予め設定された時間同期タスクの実行を要求する実行要求をスケジューラ３３へ出力する。
【００２７】
角度同期タスクは、複数の処理を含んでいる。本実施形態では、角度同期タスクは、処理Ａ１、処理Ｂ１、処理Ｃ１、処理Ｄ１、処理Ｅ１および処理Ｆ１を含んでいる。処理Ａ１〜Ｆ１には、実行コア制約と処理順制約が設定されている。実行コア制約とは、処理を実行可能なコアの制限である。処理順制約とは、事前に実行する必要がある処理が完了するまで処理の実行が制限されることである。
【００２８】
同様に、時間同期タスクは、複数の処理を含んでいる。本実施形態では、時間同期タスクは、処理Ａ２、処理Ｂ２、処理Ｃ２、処理Ｄ２および処理Ｅ２を含んでいる。処理Ａ２〜Ｅ２には、実行コア制約と処理順制約が設定されている。
【００２９】
同期部４２は、イベント生成部３１から角度同期イベント情報が入力されると、角度同期イベント情報をスレーブコア２２へ出力する。同期部４２は、イベント生成部３１から時間同期イベント情報が入力されると、時間同期イベント情報をスレーブコア２２へ出力する。
【００３０】
スケジューラ３３は、処理順制約テーブル４０を備える。処理順制約テーブル４０には、角度同期タスクの実行コア制約および処理順制約と、時間同期タスクの実行コア制約および処理順制約とが設定されている。
【００３１】
スケジューラ３３は、イベント管理部３２から角度同期タスクの実行要求が入力されると、処理順制約テーブル４０に設定されている角度同期タスクの実行コア制約および処理順制約に基づいて、実行する処理を決定し、決定した処理を示す実行要求を処理実行部３４へ出力する。スケジューラ３３は、イベント管理部３２から時間同期タスクの実行要求が入力されると、処理順制約テーブル４０に設定されている時間同期タスクの実行コア制約および処理順制約に基づいて、実行する処理を決定し、決定した処理を示す実行要求を処理実行部３４へ出力する。
【００３２】
処理実行部３４は、スケジューラ３３から入力された実行要求に基づいて、角度同期タスクの処理と、時間同期タスクの処理を実行する。
データ管理部３５は、処理実行部３４が処理を実行することにより算出されたデータのうち、コア２１とコア２２との間で共有する必要がある共有データをＲＡＭ１３に記憶する。
【００３３】
スレーブコア２２は、イベント管理部５２、スケジューラ５３、処理実行部５４およびデータ管理部５５を備える。
イベント管理部５２は、同期部６１とタスク要求部６２を備える。同期部６１は、マスタコア２１から角度同期イベント情報が入力されると、角度同期イベント情報をタスク要求部６２へ出力する。同期部６１は、マスタコア２１から時間同期イベント情報が入力されると、時間同期イベント情報をタスク要求部６２へ出力する。
【００３４】
タスク要求部６２は、同期部６１から角度同期イベント情報が入力されると、角度同期タスクの実行を要求する実行要求をスケジューラ５３へ出力する。タスク要求部６２は、同期部６１から時間同期イベント情報が入力されると、時間同期タスクの実行を要求する実行要求をスケジューラ５３へ出力する。
【００３５】
スケジューラ５３は、処理順制約テーブル４０を備える。スケジューラ５３は、イベント管理部５２から角度同期タスクの実行要求が入力されると、処理順制約テーブル４０に設定されている角度同期タスクの実行コア制約および処理順制約に基づいて、実行する処理を決定し、決定した処理を示す実行要求を処理実行部５４へ出力する。スケジューラ５３は、イベント管理部５２から時間同期タスクの実行要求が入力されると、処理順制約テーブル４０に設定されている時間同期タスクの実行コア制約および処理順制約に基づいて、実行する処理を決定し、決定した処理を示す実行要求を処理実行部５４へ出力する。
【００３６】
処理実行部５４は、スケジューラ５３から入力された実行要求に基づいて、角度同期タスクの処理と、時間同期タスクの処理を実行する。
データ管理部５５は、処理実行部５４が処理を実行することにより算出されたデータのうち、コア２１とコア２２との間で共有する必要がある共有データをＲＡＭ１３に記憶する。
【００３７】
図２に示すように、処理順制約テーブル４０には、処理Ａ１〜Ｆ１の実行コア制約および処理順制約と、処理Ａ２〜Ｅ２の実行コア制約および処理順制約とが設定されている。
具体的には、処理Ａ１，Ｃ１，Ｆ１の実行コア制約は、コア２１，２２で実行可能となるように設定されている。処理Ｂ１の実行コア制約は、コア２１で実行可能でありコア２２で実行不可となるように設定されている。処理Ｄ１，Ｅ１の実行コア制約は、コア２２で実行可能でありコア２１で実行不可となるように設定されている。
【００３８】
処理Ａ１，Ｄ１の処理順制約は、事前に実行する必要がある処理がないように設定されている。処理Ｂ１，Ｃ１の処理順制約は、事前に実行する必要がある処理が処理Ａ１であるように設定されている。処理Ｅ１の処理順制約は、事前に実行する必要がある処理が処理Ｄ１であるように設定されている。処理Ｆ１の処理順制約は、事前に実行する必要がある処理が処理Ａ１，Ｂ１，Ｃ１であるように設定されている。
【００３９】
処理Ａ２，Ｃ２，Ｄ２の実行コア制約は、コア２１，２２で実行可能となるように設定されている。処理Ｅ２の実行コア制約は、コア２１で実行可能でありコア２２で実行不可となるように設定されている。処理Ｂ２の実行コア制約は、コア２２で実行可能でありコア２１で実行不可となるように設定されている。
【００４０】
処理Ａ２，Ｅ２の処理順制約は、事前に実行する必要がある処理がないように設定されている。処理Ｂ２の処理順制約は、事前に実行する必要がある処理が処理Ａ２であるように設定されている。処理Ｃ２の処理順制約は、事前に実行する必要がある処理が処理Ｂ２であるように設定されている。処理Ｄ２の処理順制約は、事前に実行する必要がある処理が処理Ａ２，Ｂ２，Ｃ２であるように設定されている。
【００４１】
このように構成されたＥＣＵ１において、スケジューラ３３，５３は、第１処理順判断処理と第２処理順判断処理を実行する。なお、スケジューラ３３，５３が実行する機能の一部または全部を、一つあるいは複数のＩＣ等によりハードウェア的に構成してもよい。
【００４２】
ここで、スケジューラ３３，５３が実行する第１処理順判断処理の手順を説明する。第１処理順判断処理は、ＥＣＵ１の動作中において繰り返し実行される処理である。
第１処理順判断処理が実行されると、スケジューラ３３，５３は、図３に示すように、まずＳ１０にて、角度同期タスクの実行要求が入力されたか否かを判断する。ここで、角度同期タスクの実行要求が入力されていない場合には、第１処理順判断処理を一旦終了する。一方、角度同期タスクの実行要求が入力された場合には、Ｓ１５にて、角度同期タスクに含まれる複数の処理Ａ１，Ｂ１，Ｃ１，Ｄ１，Ｅ１，Ｆ１の処理状態情報を「未処理」に設定する。処理状態情報は、処理Ａ１〜Ｆ１のそれぞれに対して設けられており、ＲＡＭ１３に記憶されている。処理状態情報には、「未処理」、「実行中」および「終了」の何れか１つの状態が設定される。処理状態情報は、初期値として、「未処理」の状態が設定されている。そしてＳ２０にて、角度同期タスクに含まれる複数の処理Ａ１，Ｂ１，Ｃ１，Ｄ１，Ｅ１，Ｆ１の中から１つの処理を選択する。以下、Ｓ２０で選択された処理を第１対象処理という。
【００４３】
次にＳ３０にて、処理順制約テーブル４０における第１対象処理の実行コア制約を参照することにより、第１対象処理を自身のコア（以下、自コア）で実行可能であるか否かを判断する。例えば、コア２１のスケジューラ３３が第１処理順判断処理を実行している場合において、第１対象処理として処理Ｂ１を選択したときには、自コアで実行可能であると判断される。また、コア２２のスケジューラ５３が第１処理順判断処理を実行している場合において、第１対象処理として処理Ｂ１を選択したときには、自コアで実行可能でないと判断される。処理順制約テーブル４０の実行コア制約では、処理Ｂ１はコア２１で実行可能でありコア２２で実行不可となるように設定されているためである。
【００４４】
ここで、自コアで実行可能でないと判断した場合には、Ｓ２０に移行する。一方、自コアで実行可能であると判断した場合には、Ｓ４０にて、第１対象処理に対して設けられている処理状態情報を参照することにより、第１対象処理が「実行中」または「終了」であるか否かを判断する。
【００４５】
ここで、第１対象処理が「実行中」または「終了」である場合には、Ｓ２０に移行する。一方、第１対象処理が「実行中」または「終了」でない場合には、第１対象処理が「未処理」であると判断し、Ｓ５０にて、処理順制約テーブル４０における第１対象処理の処理順制約を参照することにより、第１対象処理の処理順制約で設定されている処理（以下、第１制約処理）を処理順制約テーブル４０から抽出する。例えば、第１対象処理として処理Ｂ１を選択したときには、処理Ａ１が第１制約処理として抽出される。また、第１対象処理として処理Ｆ１を選択したときには、処理Ａ１，Ｂ１，Ｃ１が第１制約処理として抽出される。
【００４６】
次にＳ６０にて、Ｓ５０にて第１制約処理が抽出されたか否かを判断する。ここで、第１制約処理が抽出されなかった場合には、Ｓ１５０に移行する。一方、第１制約処理が抽出された場合には、Ｓ７０にて、Ｓ５０にて抽出された１つまたは複数の第１制約処理の中から１つの第１制約処理を選択する。以下、Ｓ７０で選択された第１制約処理を第１対象制約処理という。
【００４７】
そしてＳ８０にて、第１対象制約処理に対して設けられている処理状態情報を参照することにより、第１対象制約処理が「終了」であるか否かを判断する。ここで、第１対象制約処理が「終了」である場合には、Ｓ１４０に移行する。一方、第１対象制約処理が「終了」ではない場合には、Ｓ９０にて、第１対象制約処理が「実行中」であるか否かを判断する。ここで、対象制約処理が「実行中」である場合には、Ｓ７０に移行する。
【００４８】
一方、第１対象制約処理が「実行中」でない場合には、第１対象制約処理が「未処理」であると判断し、Ｓ１００にて、処理順制約テーブル４０における第１対象制約処理の実行コア制約を参照することにより、第１対象制約処理を自コアで実行可能であるか否かを判断する。ここで、第１対象制約処理を自コアで実行可能でないと判断した場合には、Ｓ７０に移行する。一方、第１対象制約処理を自コアで実行可能であると判断した場合には、Ｓ１１０にて、第１対象制約処理の処理状態情報を「実行中」に設定する。さらにＳ１２０にて、自コアの処理実行部に第１対象制約処理を実行させ、第１対象制約処理が終了するまで待機する。自コアの処理実行部とは、コア２１のスケジューラ３３が第１処理順判断処理を実行している場合には処理実行部３４であり、コア２２のスケジューラ５３が第１処理順判断処理を実行している場合には処理実行部５４である。
【００４９】
そして、自コアの処理実行部が第１対象制約処理の実行を終了するとＳ１２０の処理を終了し、Ｓ１３０にて、第１対象制約処理の処理状態情報を「終了」に設定し、Ｓ１４０に移行する。
【００５０】
そしてＳ１４０に移行すると、Ｓ５０にて抽出された全ての第１制約処理の処理状態情報が「終了」に設定されているか否かを判断する。ここで、全ての第１制約処理の処理状態情報が「終了」に設定されていない場合には、Ｓ７０に移行する。一方、全ての第１制約処理の処理状態情報が「終了」に設定されている場合には、Ｓ１５０に移行する。
【００５１】
そしてＳ１５０に移行すると、図４に示すように、第１対象処理の処理状態情報を「実行中」に設定する。さらにＳ１６０にて、自コアの処理実行部に第１対象処理を実行させ、第１対象処理が終了するまで待機する。そして、自コアの処理実行部が第１対象処理の実行を終了するとＳ１６０の処理を終了し、Ｓ１７０にて、第１対象処理の処理状態情報を「終了」に設定する。
【００５２】
その後Ｓ１８０にて、角度同期タスクに含まれる全ての処理の処理状態情報が「終了」に設定されているか否かを判断する。ここで、全ての処理の処理状態情報が「終了」に設定されていない場合には、Ｓ２０に移行する。一方、全ての処理の処理状態情報が「終了」に設定されている場合には、第１処理順判断処理を一旦終了する。
【００５３】
次に、スケジューラ３３，５３が実行する第２処理順判断処理の手順を説明する。第２処理順判断処理は、ＥＣＵ１の動作中において繰り返し実行される処理である。
第２処理順判断処理が実行されると、スケジューラ３３，５３は、図５に示すように、まずＳ３１０にて、時間同期タスクの実行要求が入力されたか否かを判断する。ここで、時間同期タスクの実行要求が入力されていない場合には、第２処理順判断処理を一旦終了する。一方、時間同期タスクの実行要求が入力された場合には、Ｓ３１５にて、時間同期タスクに含まれる複数の処理Ａ２，Ｂ２，Ｃ２，Ｄ２，Ｅ２の処理状態情報を「未処理」に設定する。処理状態情報は、処理Ａ２〜Ｅ２のそれぞれに対して設けられており、ＲＡＭ１３に記憶されている。そしてＳ３２０にて、時間同期タスクに含まれる複数の処理Ａ２，Ｂ２，Ｃ２，Ｄ２，Ｅ２の中から１つの処理を選択する。以下、Ｓ３２０で選択された処理を第２対象処理という。
【００５４】
次にＳ３３０にて、処理順制約テーブル４０における第２対象処理の実行コア制約を参照することにより、第２対象処理を自コアで実行可能であるか否かを判断する。ここで、自コアで実行可能でないと判断した場合には、Ｓ３２０に移行する。一方、自コアで実行可能であると判断した場合には、Ｓ３４０にて、第２対象処理に対して設けられている処理状態情報を参照することにより、第２対象処理が「実行中」または「終了」であるか否かを判断する。
【００５５】
ここで、第２対象処理が「実行中」または「終了」である場合には、Ｓ３２０に移行する。一方、第２対象処理が「実行中」または「終了」でない場合には、第２対象処理が「未処理」であると判断し、Ｓ３５０にて、処理順制約テーブル４０における第２対象処理の処理順制約を参照することにより、第２対象処理の処理順制約で設定されている処理（以下、第２制約処理）を処理順制約テーブル４０から抽出する。
【００５６】
次にＳ３６０にて、Ｓ３５０にて第２制約処理が抽出されたか否かを判断する。ここで、第２制約処理が抽出されなかった場合には、Ｓ４５０に移行する。一方、第２制約処理が抽出された場合には、Ｓ３７０にて、Ｓ３５０にて抽出された１つまたは複数の第２制約処理の中から１つの第２制約処理を選択する。以下、Ｓ３７０で選択された第２制約処理を第２対象制約処理という。
【００５７】
そしてＳ３８０にて、第２対象制約処理に対して設けられている処理状態情報を参照することにより、第２対象制約処理が「終了」であるか否かを判断する。ここで、第２対象制約処理が「終了」である場合には、Ｓ４４０に移行する。一方、第２対象制約処理が「終了」ではない場合には、Ｓ３９０にて、第２対象制約処理が「実行中」であるか否かを判断する。ここで、第２対象制約処理が「実行中」である場合には、Ｓ３７０に移行する。
【００５８】
一方、第２対象制約処理が「実行中」でない場合には、第２対象制約処理が「未処理」であると判断し、Ｓ４００にて、処理順制約テーブル４０における第２対象制約処理の実行コア制約を参照することにより、第２対象制約処理を自コアで実行可能であるか否かを判断する。ここで、第２対象制約処理を自コアで実行可能でないと判断した場合には、Ｓ３７０に移行する。一方、第２対象制約処理を自コアで実行可能であると判断した場合には、Ｓ４１０にて、第２対象制約処理の処理状態情報を「実行中」に設定する。さらにＳ４２０にて、自コアの処理実行部に第２対象制約処理を実行させ、第２対象制約処理が終了するまで待機する。
【００５９】
そして、自コアの処理実行部が第２対象制約処理の実行を終了するとＳ４２０の処理を終了し、Ｓ４３０にて、第２対象制約処理の処理状態情報を「終了」に設定し、Ｓ４４０に移行する。
【００６０】
そしてＳ４４０に移行すると、Ｓ３５０にて抽出された全ての第２制約処理の処理状態情報が「終了」に設定されているか否かを判断する。ここで、全ての第２制約処理の処理状態情報が「終了」に設定されていない場合には、Ｓ３７０に移行する。一方、全ての第２制約処理の処理状態情報が「終了」に設定されている場合には、Ｓ４５０に移行する。
【００６１】
そしてＳ４５０に移行すると、図６に示すように、第２対象処理の処理状態情報を「実行中」に設定する。さらにＳ４６０にて、自コアの処理実行部に第２対象処理を実行させ、第２対象処理が終了するまで待機する。そして、自コアの処理実行部が第２対象処理の実行を終了するとＳ４６０の処理を終了し、Ｓ４７０にて、第２対象処理の処理状態情報を「終了」に設定する。
【００６２】
その後Ｓ４８０にて、時間同期タスクに含まれる全ての処理の処理状態情報が「終了」に設定されているか否かを判断する。ここで、全ての処理の処理状態情報が「終了」に設定されていない場合には、Ｓ３２０に移行する。一方、全ての処理の処理状態情報が「終了」に設定されている場合には、第２処理順判断処理を一旦終了する。
【００６３】
データ管理部３５は、処理実行部３４が処理Ａ１〜Ｆ１を実行することにより算出されたデータのうち、上記の共有データをＲＡＭ１３に記憶する。例えば、図７に示すように、処理実行部３４が処理Ａ１を実行することにより、データＤＴＡ１，・・・，ＤＴＡ４，ＤＴＡ５，・・・が算出される。これらのデータのうち、共有データは、データＤＴＡ１，ＤＴＡ４，ＤＴＡ５，・・・である。また、処理実行部３４が処理Ｅ１を実行することにより、データＤＴＥ１，・・・，ＤＴＥ３，・・・，ＤＴＡ６，・・・が算出される。これらのデータのうち、共有データは、データＤＴＥ１，ＤＴＥ３，ＤＴＥ６，・・・である。処理実行部３４は、これらの共有データＤＴＡ１，ＤＴＡ４，ＤＴＡ５，・・・，ＤＴＥ１，ＤＴＥ３，ＤＴＥ６，・・・について、エンジン位置０，１，・・・・・，２２，２３における算出値をＲＡＭ１３に記憶する。
【００６４】
エンジン位置は、クランク軸の２回転を１周期としたクランク角であり、エンジン位置０は、０°ＣＡのクランク角に相当する。また、エンジン位置１，・・・，２２，２３はそれぞれ、３０°ＣＡ，・・・，６６０°ＣＡ，６９０°ＣＡのクランク角に相当する。
【００６５】
データ管理部５５は、処理実行部５４が処理Ａ２〜Ｅ２を実行することにより算出されたデータのうち、上記の共有データをＲＡＭ１３に記憶する。
このように構成されたマイコン３は、コア２１，２２を備える。コア２１，２２のうち、コア２１をマスタコア２１とし、コア２２をスレーブコア２２とする。
【００６６】
マスタコア２１は、イベント生成部３１と、同期部４２と、タスク要求部４１と、スケジューラ３３とを備える。スレーブコア２２は、イベント管理部５２と、スケジューラ５３とを備える。
【００６７】
イベント生成部３１は、予め設定された角度イベント生成条件が成立したか否かを判断するとともに、予め設定された時間イベント生成条件が成立したか否かを判断するように構成される。
【００６８】
同期部４２は、角度イベント生成条件が成立したとイベント生成部３１が判断した場合に、角度同期イベントが発生した旨を示す角度同期イベント情報をスレーブコア２２へ出力するように構成される。また同期部４２は、時間イベント生成条件が成立したとイベント生成部３１が判断した場合に、時間同期イベントが発生した旨を示す時間同期イベント情報をスレーブコア２２へ出力するように構成される。
【００６９】
タスク要求部４１は、角度イベント生成条件が成立したとイベント生成部３１が判断した場合に、角度同期イベントに対応して予め設定された処理Ａ１、処理Ｂ１、処理Ｃ１、処理Ｄ１、処理Ｅ１および処理Ｆ１を含む角度同期タスクの実行を要求するように構成される。またタスク要求部４１は、時間イベント生成条件が成立したとイベント生成部３１が判断した場合に、時間同期イベントに対応して予め設定された処理Ａ２、処理Ｂ２、処理Ｃ２、処理Ｄ２および処理Ｅ１を含む時間同期タスクの実行を要求するように構成される。
【００７０】
スケジューラ３３は、タスク要求部４１が角度同期タスクの実行を要求した場合に、処理順制約テーブル４０に設定されている処理順制約と、処理状態情報とに基づいて、処理Ａ１〜Ｆ１の中から、マスタコア２１に実行させる処理を決定するように構成される。またスケジューラ３３は、タスク要求部４１が時間同期タスクの実行を要求した場合に、処理順制約テーブル４０に設定されている処理順制約と、処理状態情報とに基づいて、処理Ａ２〜Ｅ２の中から、マスタコア２１に実行させる処理を決定するように構成される。
【００７１】
イベント管理部５２は、同期部４２から角度同期イベント情報が入力されると、角度同期タスクの実行を要求するように構成される。またイベント管理部５２は、同期部４２から時間同期イベント情報が入力されると、時間同期タスクの実行を要求するように構成される。スケジューラ５３は、イベント管理部５２が角度同期タスクの実行を要求した場合に、処理順制約テーブル４０に設定されている処理順制約と、処理状態情報とに基づいて、処理Ａ１〜Ｆ１の中から、スレーブコア２２に実行させる処理を決定するように構成される。またスケジューラ５３は、イベント管理部５２が時間同期タスクの実行を要求した場合に、処理順制約テーブル４０に設定されている処理順制約と、処理状態情報とに基づいて、処理Ａ２〜Ｅ２の中から、スレーブコア２２に実行させる処理を決定するように構成される。
【００７２】
このように構成されたマイコン３では、角度イベント生成条件が成立したとマスタコア２１のイベント生成部３１が判断すると、マスタコア２１の同期部４２が角度同期イベント情報をスレーブコア２２へ出力する。また、時間イベント生成条件が成立したとマスタコア２１のイベント生成部３１が判断すると、マスタコア２１の同期部４２が時間同期イベント情報をスレーブコア２２へ出力する。このため、角度同期イベントおよび時間同期イベントの発生をマスタコア２１とスレーブコア２２の両方で認識することができる。
【００７３】
そして、角度同期イベントまたは時間同期イベントが発生すると、マスタコア２１およびスレーブコア２２はそれぞれ独立に、処理順制約テーブル４０に設定されている処理順制約と処理状態情報とに基づいて、複数の処理の中から、マスタコア２１およびスレーブコア２２に実行させる処理を決定する。
【００７４】
ここで、例えば、処理Ａ１の実行が完了するまでは処理Ｂ１の開始を保留させておくという処理順序が処理順制約テーブル４０に設定されているとする。この場合に、処理Ａ１をマスタコア２１に割り当て、処理Ｂ１をスレーブコア２２に割り当てると、マスタコア２１が処理Ａ１の実行を完了するまで、スレーブコア２２は処理を行うことなく待機していなくてはならない状況が発生する。しかし、スレーブコア２２は、マスタコア２１が処理Ａ１を実行している間に、処理順制約テーブル４０に設定されている処理順制約と、処理状態情報とに基づいて、処理Ａ１の実行が完了するまで開始を保留させておく必要がなく且つ処理を実行可能な状態である処理Ｄ１を実行することができる。
【００７５】
このようにマイコン３は、マスタコア２１およびスレーブコア２２の少なくとも一方が処理を行っていないという状況の発生を抑制し、処理効率を向上させることができる。
またマイコン３では、スケジューラ３３およびスケジューラ５３は、処理順制約テーブル４０に設定されている処理順制約と、処理状態情報とに加えて、更に、処理順制約テーブル４０に設定されている実行コア制約に基づいて、実行させる処理を決定するように構成される。これにより、マイコン３は、処理順制約と実行コア制約とを同時に満たして、角度同期タスクおよび時間同期タスクを実行することができる。
【００７６】
またマイコン３では、スケジューラ３３は、処理Ａ１〜Ｆ１の中から１つの処理を選択するように構成されている。またスケジューラ３３は、処理Ａ２〜Ｅ２の中から１つの処理を選択するように構成されている。そしてスケジューラ３３は、処理順制約テーブル４０に設定されている処理順制約および実行コア制約と処理状態情報とに基づいて、第１対象処理および第２対象処理がマスタコア２１において実行可能であるか否かを判断する。
【００７７】
そしてスケジューラ３３は、マスタコア２１において第１対象処理および第２対象処理を実行可能ではないと判断した場合に、更に他の処理を第１対象処理および第２対象処理として選択する。
【００７８】
同様に、スケジューラ３３は、処理順制約テーブル４０に設定されている処理順制約および実行コア制約と処理状態情報とに基づいて、第１対象制約処理および第２対象制約処理がマスタコア２１において実行可能であるか否かを判断する。そしてスケジューラ３３は、マスタコア２１において第１対象制約処理および第２対象制約処理を実行可能ではないと判断した場合に、更に他の処理を第１対象制約処理および第２対象制約処理として選択する。
【００７９】
またスケジューラ５３は、処理Ａ１〜Ｆ１の中から１つの処理を選択するように構成されている。またスケジューラ５３は、処理Ａ２〜Ｅ２の中から１つの処理を選択するように構成されている。そしてスケジューラ５３は、処理順制約テーブル４０に設定されている処理順制約および実行コア制約と処理状態情報とに基づいて、第１対象処理および第２対象処理がスレーブコア２２において実行可能であるか否かを判断する。
【００８０】
そしてスケジューラ５３は、スレーブコア２２において第１対象処理および第２対象処理を実行可能ではないと判断した場合に、更に他の処理を第１対象処理および第２対象処理として選択する。
【００８１】
同様に、スケジューラ５３は、処理順制約テーブル４０に設定されている処理順制約および実行コア制約と処理状態情報とに基づいて、第１対象制約処理および第２対象制約処理がスレーブコア２２において実行可能であるか否かを判断する。そしてスケジューラ５３は、スレーブコア２２において第１対象制約処理および第２対象制約処理を実行可能ではないと判断した場合に、更に他の処理を第１対象制約処理および第２対象制約処理として選択する。
【００８２】
このようにマイコン３は、実行可能な処理を見つけるまで、実行可能な処理の選択を継続する。このため、マイコン３は、実行可能な処理が存在しているのにも関わらずコア２１，２２で処理が実行されていないという状況の発生を抑制し、処理効率を更に向上させることができる。
【００８３】
またマイコン３では、マスタコア２１は、共有データをＲＡＭ１３に記憶するデータ管理部３５を備える。スレーブコア２２は、共有データをＲＡＭ１３に記憶するデータ管理部５５を備える。そして、データ管理部３５，５５はそれぞれ、処理実行部３４，５４が角度同期タスクの処理を実行することにより算出された共有データについて、エンジン位置０，１，・・・・・，２２，２３における算出値をＲＡＭ１３に記憶する。これにより、マイコン３は、最新の共有データと、最新の共有データが算出された時点より過去における２３の時点で算出された共有データとをＲＡＭ１３に記憶することができる。
【００８４】
このため、マイコン３は、現時点で実行中の角度同期タスクが終了する前に、次の角度同期イベントに対応した角度同期タスクが開始された場合であっても、それぞれの角度同期イベントに対応したエンジン位置の共有データを使用して、角度同期タスクの処理を実行することができる。
【００８５】
例えば図８に示すように、エンジン位置２３での角度同期イベントが発生すると、エンジン位置２３に対応する角度同期タスクとして、マスタコア２１が、処理Ａ１、処理Ｂ１および処理Ｄ１を順次実行し、スレーブコア２２が、処理Ｄ１、処理Ｃ１および処理Ｆ１を順次実行するとする。また、処理Ｆ１は、処理Ａ１で算出された共有データを使用するとする。すなわち、矢印ＲＦ１で示すように、エンジン位置２３に対応する角度同期タスクの処理Ｆ１は、エンジン位置２３に対応する角度同期タスクの処理Ａ１で算出された共有データを使用する必要がある。
【００８６】
そして、ＥＣＵ１を搭載した車両が例えば急加速することにより、エンジン位置２３に対応した角度同期タスクの処理Ｆ１が終了する前に、エンジン位置０での角度同期イベントが発生したとする。すなわち、エンジン位置２３に対応した角度同期タスクの処理Ｆ１が終了する前に、マスタコア２１が、エンジン位置０に対応した角度同期タスクの処理Ａ１を開始する。この場合に、矢印ＲＦ２で示すように、エンジン位置２３に対応する角度同期タスクの処理Ｆ１は、エンジン位置０に対応する角度同期タスクの処理Ａ１で算出された共有データを使用してしまうおそれがある。
【００８７】
これに対し、マイコン３は、最新のエンジン位置０に対応する共有データだけではなく、過去のエンジン位置２３に対応する共有データもＲＡＭ１３に記憶している。このため、エンジン位置２３に対応する角度同期タスクの処理Ｆ１は、エンジン位置０に対応する角度同期タスクではなく、エンジン位置２３に対応する角度同期タスクの処理Ａ１で算出された共有データを使用することができる。
【００８８】
なお、イベント生成部３１はイベント判断部に相当し、同期部４２は情報出力部に相当し、タスク要求部４１はマスタ要求部に相当し、スケジューラ３３はマスタ決定部に相当する。また、イベント管理部５２はスレーブ要求部に相当し、スケジューラ５３はスレーブ決定部に相当する。
【００８９】
また、角度イベント生成条件および時間イベント生成条件はイベント発生条件に相当し、角度同期イベント情報および時間同期イベント情報はイベント情報に相当する。また、処理Ａ１〜Ｆ１および処理Ａ２〜Ｅ１は複数の演算処理に相当し、角度同期タスクおよび時間同期タスクはタスクに相当し、処理順制約テーブル４０に設定されている処理順制約は処理制約情報に相当する。
【００９０】
また、処理順制約テーブル４０に設定されている実行コア制約はコア制約情報に相当する。
また、マスタコア２１が実行するＳ２０，Ｓ７０，Ｓ３２０，Ｓ３７０がマスタ選択部としての処理に相当し、マスタコア２１が実行するＳ３０〜Ｓ６０，Ｓ８０〜Ｓ１００，Ｓ１４０がマスタ判断部としての処理に相当する。また、スレーブコア２２が実行するＳ２０，Ｓ７０，Ｓ３２０，Ｓ３７０がスレーブ選択部としての処理に相当し、スレーブコア２２が実行するＳ３０〜Ｓ６０，Ｓ８０〜Ｓ１００，Ｓ１４０がスレーブ判断部としての処理に相当する。また、マスタコア２１で選択された第１対象処理、第１対象制約処理、第２対象処理および第２対象制約処理はマスタ対象処理に相当し、スレーブコア２２で選択された第１対象処理、第１対象制約処理、第２対象処理および第２対象制約処理はスレーブ対象処理に相当する。
【００９１】
また、データ管理部３５はマスタ記憶部に相当し、データ管理部５５はスレーブ記憶部に相当し、ＲＡＭ１３はデータ記憶領域に相当する。
以上、本開示の一実施形態について説明したが、本開示は上記実施形態に限定されるものではなく、種々変形して実施することができる。
【００９２】
［変形例１］
例えば上記実施形態では、ＣＰＵが２個のコアを備えるものを示したが、３個以上のコアを備えるようにしてもよい。
【００９３】
［変形例２］
上記実施形態では、角度同期タスクまたは時間同期タスクの実行要求が入力された場合に、角度同期タスクまたは時間同期タスクに含まれる複数の処理の中から１つの処理を第１対象処理または第２対象処理として選択するものを示した。しかし、処理順制約が設定されている処理を優先的に選択するようにしてもよい。これにより、事前に実行する必要がある処理が完了するまで待機する必要がある状況が発生している場合において、処理順制約が設定されていない処理が存在している可能性が高くなる。このため、処理順制約が設定されている処理が待機している空き時間において、処理順制約が設定されていない処理を実行させることができる可能性が高まり、上記の空き時間を有効に利用することが可能となる。
【００９４】
［変形例３］
また、実行コア制約が設定されている処理を優先的に第１対象処理または第２対象処理として選択するようにしてもよい。これにより、実行コア制約が設定されていることにより実行可能コアが制限されている処理について、実行可能コアにおいて他の処理が完了するまで待機する状況が発生する可能性を低減することができる。
【００９５】
［変形例４］
また、角度同期イベントまたは時間同期イベントが発生してから処理が完了するまでに許容される時間の制約（以下、ジッター制約）が設定されている処理を優先的に第１対象処理または第２対象処理として選択するようにしてもよい。これにより、ジッター制約を満たすことができなくなる事態の発生を抑制することができる。
【００９６】
［変形例５］
角度同期タスクまたは時間同期タスクに含まれる複数の処理のうち、処理時間が変動する可能性がないものは、順序を固定して実行し、処理順序が変わる処理のみに第１処理順判断処理と第２処理順判断処理を適用するようにしてもよい。
【００９７】
［変形例６］
上記実施形態では、処理順制約において、自処理の実行前に実行する必要がある処理を、直接的な処理だけではなく間接的な処理も含めて設定した。例えば、処理順制約テーブル４０において、処理Ｆ１の処理順制約では、処理Ａ１，Ｂ１，Ｃ１が設定されている。処理Ｆ１の実行前に実行する必要がある直接的な処理は処理Ｂ１，Ｃ１であり、間接的な処理は処理Ａ１である。処理順制約テーブル４０において、処理Ｂ１，Ｃ１の処理順制約では、処理Ａ１が設定されているためである。しかし、処理順制約において、自処理の実行前に実行する必要がある処理を、直接的な処理だけを含めて設定するようにしてもよい。例えば、処理Ｆ１の処理順制約において、処理Ｂ１，Ｃ１を設定するようにしてもよい。これにより、処理順制約テーブル４０のデータ量を低減することができる。
【００９８】
［変形例７］
また、処理順制約テーブル４０において、自処理の実行前に実行する必要がある直接的な処理を記憶し、間接的な処理を記憶しないようしている場合には、ＥＣＵ１が起動した直後に、間接的な処理を決定する演算を行うようにしてもよい。例えば、処理順制約テーブル４０において、処理Ｂ１，Ｃ１の処理順制約では、処理Ａ１が設定され、処理Ｆ１の処理順制約において、処理Ｂ１，Ｃ１が設定されているとする。そして、処理Ｆ１の処理順制約において処理Ｂ１，Ｃ１が設定され、処理Ｂ１，Ｃ１の処理順制約では処理Ａ１が設定されていることから、処理Ｆ１の実行前に実行する必要がある間接的な処理は処理Ａ１であると決定することができる。そして、間接的な処理を決定した後に、決定した処理を新たに処理順制約テーブル４０に記憶させる。例えば、処理順制約テーブル４０において、処理Ｆ１の処理順制約において、処理Ａ１，Ｂ１，Ｃ１が設定される。これにより、間接的な処理を決定するための演算を、ＥＣＵ１が起動した直後に１回だけ実行すればよく、ＥＣＵ１の演算処理負荷を低減することができる。
【００９９】
［変形例８］
上記実施形態では、第１対象制約処理または第２対象制約処理が「実行中」である場合には、他の第１制約処理または第２制約処理を選択するものを示した。しかし、処理時間が短い第１制約処理または第２制約処理が多い場合には、第１対象制約処理または第２対象制約処理が終了するまで待機させるようにしてもよい。
【０１００】
［変形例９］
上記実施形態では、エンジン位置０，１，・・・，２２，２３における共有データを記憶するものを示した。しかし、共有データの前回値のみを記憶するようにしてもよい。例えば、現時点でエンジン位置２である場合には、前回値として、エンジン位置１のときの共有データのみを記憶するようにしてもよい。また上記実施形態では、角度同期タスクの処理を実行することにより算出された共有データについて、エンジン位置０，１，・・・・・，２２，２３における算出値をＲＡＭ１３に記憶するものを示した。しかし、時間同期タスクの処理を実行することにより算出された共有データについても、最新の共有データと、最新の共有データが算出された時点より過去における少なくとも１つの時点で算出された共有データとをＲＡＭ１３に記憶するようにしてもよい。
【０１０１】
［変形例１０］
角度同期イベントが発生したときに、前回の角度同期イベントに対応した角度同期タスクが終了していない状況が発生することを考慮して、角度同期タスクに含まれる複数の処理のそれぞれに対して設けられている処理状態情報は、エンジン位置毎に設けられるようにしてもよい。例えば、処理Ａ１の処理状態情報は、エンジン位置０，１，・・・，２２，２３のそれぞれに対応して２４個設けられるようにしてもよい。時間同期タスクに含まれる複数の処理のそれぞれに対して設けられている処理状態情報についても同様に、時間同期イベントが発生した時刻毎に設けられるようにしてもよい。これにより、角度同期イベントが発生したときに、前回の角度同期イベントに対応した角度同期タスクが終了していない状況が発生したとしても、前回の角度同期イベントに対応した角度同期タスクの処理状態情報が消去されないようにすることができる。
【０１０２】
また、処理状態情報は、最新の角度同期タスクまたは時間同期タスクに含まれる処理と、前回の角度同期タスクまたは時間同期タスクに含まれる処理とについて設けられるようにしてもよい。
【０１０３】
［変形例１１］
上記実施形態では、処理順制約テーブル４０に設定されている実行コア制約および処理順制約が、角度同期イベントが発生したエンジン位置と、時間同期イベントが発生した時刻とに関わらず同一であるものを示した。しかし、処理順制約テーブル４０に設定されている実行コア制約および処理順制約が、角度同期イベントが発生したエンジン位置、または時間同期イベントが発生した時刻によって異なるようにしてもよい。このように、イベント毎に個別の処理順制約テーブルを備えることによって、不必要な実行コア制約および処理順制約を減らし、処理の実行待ちが発生する確率を低減することができる。
［変形例１２］
上記実施形態では、処理状態情報には、「未処理」、「実行中」および「終了」の何れか１つの状態が設定されるものを示した。すなわち、「実行中」および「終了」は、処理を実行可能な状態でないことを示し、「未処理」は、処理を実行可能な状態であることを示す。しかし、処理状態情報は、処理を実行可能な状態であるか否かを示すことができれば、２つの状態が設定されるものであってもよいし、４つ以上の状態が設定されるものであってもよい。
【０１０４】
上記各実施形態における１つの構成要素が有する機能を複数の構成要素に分担させたり、複数の構成要素が有する機能を１つの構成要素に発揮させたりしてもよい。また、上記各実施形態の構成の一部を、課題を解決できる限りにおいて省略してもよい。また、上記各実施形態の構成の少なくとも一部を、他の上記実施形態の構成に対して付加、置換等してもよい。なお、特許請求の範囲に記載の文言から特定される技術思想に含まれるあらゆる態様が本開示の実施形態である。
【０１０５】
なお、本開示は、上述したマイコン３の他、当該マイコン３を構成要素とするシステム、当該マイコン３としてコンピュータを機能させるためのプログラム、このプログラムを記録した媒体、実行処理決定方法など、種々の形態で実現することもできる。
【符号の説明】
【０１０６】
３…マイコン、２１…マスタコア、２２…スレーブコア、３１…イベント生成部、３３…スケジューラ、４０…処理順制約テーブル、４１…タスク要求部、４２…同期部、５２…イベント管理部、５３…スケジューラ
【図１】
0006519515.tif 000002
【図２】
0006519515.tif 000003
【図３】
0006519515.tif 000004
【図４】
0006519515.tif 000005
【図５】
0006519515.tif 000006
【図６】
0006519515.tif 000007
【図７】
0006519515.tif 000008
【図８】
0006519515.tif 000009