(57)【要約】【課題】タスクに含まれる複数の関数演算を複数のコアにより分担して実行する電子制御装置について、先のタスクの演算結果を後のタスクの演算処理において参照する必要がある場合に、先のタスクの演算結果を後のタスクの演算処理に反映させる。【解決手段】電子制御装置１０は、タスクに含まれる複数の関数演算を複数のコア１２ａ，１２ｂにより分担して実行し、先のタスクの演算結果を後のタスクの演算処理において参照する電子制御装置であって、複数の関数演算のうち先頭の関数演算が開始されるタスク起床時、および、複数の関数演算のうち末尾の関数演算が完了されるタスク完了時を管理することにより、先のタスクの完了前に後のタスクが開始されるタスク衝突を回避する衝突回避部２１を備える。【選択図】図１
2018055579.tif 000002
【特許請求の範囲】
【請求項１】
タスクに含まれる複数の関数演算を複数のコア（１２ａ，１２ｂ）により分担して実行し、先のタスクの演算結果を後のタスクの演算処理において参照する電子制御装置（１０）であって、
前記複数の関数演算のうち先頭の関数演算が開始されるタスク起床時、および、前記複数の関数演算のうち末尾の関数演算が完了されるタスク完了時を管理することにより、先のタスクの完了前に後のタスクが開始されるタスク衝突を回避する衝突回避部（２１）を備える電子制御装置。
【請求項２】
前記衝突回避部は、タスクを起床させるための割り込み指令が入力されるとカウンタ値を加算し、前記複数の関数演算のうち末尾の関数演算が完了されると前記カウンタ値を減算し、後のタスクの開始を許可するか否かを前記カウンタ値に基づいて決定する請求項１に記載の電子制御装置。
【請求項３】
前記衝突回避部は、前記カウンタ値が所定値以下である場合に、後のタスクの開始を許可する請求項２に記載の電子制御装置。
【請求項４】
前記衝突回避部は、タスクを起床させるための割り込み指令が入力されるとフラグを設定し、前記複数の関数演算のうち末尾の関数演算が完了されると前記フラグをリセットし、後のタスクの開始を許可するか否かを前記フラグの設定状態に基づいて決定する請求項１に記載の電子制御装置。
【請求項５】
前記衝突回避部は、前記割り込み指令の入力時において前記フラグがリセットされていない場合に所定情報を記録し、前記所定情報が記録されている場合に、後のタスクの開始を許可する請求項４に記載の電子制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子制御装置に関する。
【背景技術】
【０００２】
タスクに含まれる複数の関数演算を複数のコアにより分担して実行する構成、いわゆるマルチコア構成を備える電子制御装置によれば、複数の関数演算を１つのコアにより順次実行する構成、いわゆるシングルコア構成を備える電子制御装置に比べ、処理速度の向上を期待できる（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１３−１６１３６３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
例えば車両に搭載されるエンジン制御用の電子制御装置では、各関数演算を実行するコアをそれぞれ固定し、且つ、各コアが関数演算を実行する順序を規定することで、演算のリアルタイム性を保証することが考えられている。この場合、タスクに含まれる複数の関数演算のうち先頭の関数演算を実行するコアと途中または末尾の関数演算を実行するコアとが異なることになる。そのため、タスクを起床させる割り込み指令のタイミングによっては、先のタスクの末尾まで関数演算が完了していないにも拘らず、後のタスクの先頭の関数演算が開始されてしまう場合が起こり得る。そのため、先のタスクの演算結果を後のタスクの演算処理において参照する必要がある場合には、先のタスクの演算結果を後のタスクの演算処理に反映させることができず、演算処理を適切に行うことができない。
【０００５】
そこで、本発明は、タスクに含まれる複数の関数演算を複数のコアにより分担して実行する電子制御装置について、先のタスクの演算結果を後のタスクの演算処理において参照する必要がある場合に、先のタスクの演算結果を後のタスクの演算処理に反映させることができる電子制御装置を提供する。
【課題を解決するための手段】
【０００６】
本発明に係る電子制御装置は、タスクに含まれる複数の関数演算を複数のコア（１２ａ，１２ｂ）により分担して実行し、先のタスクの演算結果を後のタスクの演算処理において参照する電子制御装置（１０）であって、衝突回避部（２１）を備える。衝突回避部は、前記複数の関数演算のうち先頭の関数演算が開始されるタスク起床時、および、前記複数の関数演算のうち末尾の関数演算が完了されるタスク完了時を管理することにより、先のタスクの完了前に後のタスクが開始されるタスク衝突を回避する。
【０００７】
この構成によれば、先のタスクの末尾まで関数演算が完了していないにも拘らず、後のタスクの先頭の関数演算が開始されてしまうことを回避することができる。従って、先のタスクの演算結果を後のタスクの演算処理において参照する必要がある場合に、先のタスクの演算結果を後のタスクの演算処理に反映させることができる。
【図面の簡単な説明】
【０００８】
【図１】本実施形態に係る電子制御装置の構成例を概略的に示す図
【図２】第１実施形態に係る電子制御装置による制御例を示す図
【図３】タスク先頭処理の一例を示すフローチャート
【図４】タスク末尾処理の一例を示すフローチャート
【図５】第２実施形態に係る電子制御装置による制御例を示す図
【図６】タスク先頭処理の一例を示すフローチャート
【図７】タスク末尾処理の一例を示すフローチャート
【発明を実施するための形態】
【０００９】
以下、電子制御装置に係る複数の実施形態について図面を参照しながら説明する。なお、各実施形態において、実質的に同一の要素には同一の符号を付して説明を省略する。
（第１実施形態）
図１に例示する電子制御装置１０は、例えば車両に搭載されるエンジン制御用の電子制御装置であり、マイクロコンピュータ１１を主体として構成されている。マイクロコンピュータ１１は、複数のコア１２ａ，１２ｂ、共有ＲＡＭ１３、入出力ポート１４などを備える。コア１２ａ，１２ｂは、図示しないＣＰＵを主体として構成されており、タスクに含まれる複数の関数演算を分担して実行する。この場合、コア１２ａは、タスクに含まれる複数の関数演算のうち先頭の関数演算Ｆａを実行し、コア１２ｂは、タスクに含まれる複数の関数演算のうち末尾の関数演算Ｆｂを実行するように設定されている。
【００１０】
共有ＲＡＭ１３は、コア１２ａ，１２ｂが関数演算Ｆａ，Ｆｂを実行する場合に参照する共有の演算用のＲＡＭである。共有ＲＡＭ１３には、詳しくは後述するカウンタ値、フラグ、仮想タスク衝突情報などの各種の情報を記憶可能となっている。入出力ポート１４は、電子制御装置１０外部の装置から電子制御装置１０への各種信号類の入力用ポート、および、電子制御装置１０から電子制御装置１０外部の装置への各種信号類の出力用ポートとして機能する。
【００１１】
マイクロコンピュータ１１は、制御プログラムを実行することにより、衝突回避部２１をソフトウェアにより仮想的に実現する。なお、衝突回避部２１は、ハードウェアにより構成してもよいし、ソフトウェアとハードウェアの組み合わせにより構成してもよい。衝突回避部２１は、タスクに含まれる複数の関数演算のうち先頭の関数演算が開始されるタスク起床時、および、タスクに含まれる複数の関数演算のうち末尾の関数演算が完了されるタスク完了時を管理することにより、先のタスクの完了前に後のタスクが開始されるタスク衝突を回避するようになっている。
【００１２】
次に、電子制御装置１０によるタスク演算の制御例について説明する。図２に例示するように、電子制御装置１０は、タスク演算を開始つまりタスクを起床させるための割り込み指令Ｓが入力されると、カウンタ値を「１」だけ加算する。そして、電子制御装置１０は、カウンタ値が所定値以下、この場合、「１」以下であれば、タスクの開始を許可する。これにより、タスクの先頭の関数演算Ｆａがコア１２ａにより開始される。
【００１３】
電子制御装置１０は、コア１２ａによりタスクの先頭の関数演算Ｆａを完了すると、同じタスクに含まれる次の関数演算、この場合、タスクの末尾の関数演算Ｆｂをコア１２ｂにより開始する。そして、電子制御装置１０は、コア１２ｂによりタスクの末尾の関数演算Ｆｂを完了すると、つまり、タスクを完了すると、カウンタ値を「１」だけ減算する。
以上の通り、電子制御装置１０は、タスクを起床させるための割り込み指令Ｓが入力されるとカウンタ値を「１」だけ加算し、タスクの末尾の関数演算Ｆｂを完了するとカウンタ値を「１」だけ減算するようになっている。
【００１４】
このようにタスク演算を実行する電子制御装置１０においては、先のタスクの末尾の関数演算Ｆｂが完了している状態で次のタスクを起床させるための割り込み指令Ｓが入力される場合と、先のタスクの末尾の関数演算Ｆｂが完了していないにも拘らず次のタスクを起床させるための割り込み指令Ｓが入力されてしまう場合と、が起こり得る。
【００１５】
前者の場合では、先のタスクの末尾の関数演算Ｆｂが完了しており、これに伴いカウンタ値が減算されているので、後のタスクの割り込み指令Ｓの入力時において、カウンタ値は「０」から加算されて「１」になっている。そのため、電子制御装置１０は、後のタスクの割り込み指令Ｓの入力時におけるカウンタ値が所定値以下、この場合、「１」以下であると判断し、後のタスクの開始を許可する。これにより、後のタスクの先頭の関数演算Ｆａがコア１２ａにより開始される。
【００１６】
一方、後者の場合では、先のタスクの末尾の関数演算Ｆｂが完了しておらず、カウンタ値が減算されていないので、後のタスクの割り込み指令Ｓの入力時において、カウンタ値は「１」から加算されて「２」になっている。そのため、電子制御装置１０は、後のタスクの割り込み指令Ｓの入力時におけるカウンタ値が所定値以下、この場合、「１」以下ではないと判断し、後のタスクの開始を不許可とする。よって、この場合、後のタスクは開始されず、待機状態となる。
【００１７】
この待機状態において、先のタスクの末尾の関数演算Ｆｂが完了すると、カウンタ値が「１」だけ減算されて「１」になる。即ち、カウンタ値が所定値以下である「１」以下になるので、電子制御装置１０は、待機させていた後のタスクの先頭の関数演算Ｆａをコア１２ａにより開始する。
【００１８】
次に、電子制御装置１０によるタスク演算の制御例をフローチャートに基づいて説明する。図３に例示するタスク先頭処理では、電子制御装置１０は、割り込み指令Ｓが入力されると（Ａ１：ＹＥＳ）、カウンタ値を加算する（Ａ２）。そして、電子制御装置１０は、カウンタ値が「１」以下であるか否かを判断する（Ａ３）。電子制御装置１０は、カウンタ値が「１」以下である場合（Ａ３：ＹＥＳ）には、タスクを起床して（Ａ４）、タスク先頭処理を終了する。一方、電子制御装置１０は、カウンタ値が「１」以下でない場合（Ａ３：ＮＯ）には、タスクを起床することなく、タスク先頭処理を終了する。
【００１９】
また、図４に例示するタスク末尾処理では、電子制御装置１０は、タスクの末尾の関数演算を完了すると（Ｂ１：ＹＥＳ）、カウンタ値を減算する（Ｂ２）。そして、電子制御装置１０は、カウンタ値が「０」であるか否かを判断する（Ｂ３）。電子制御装置１０は、カウンタ値が「０」である場合（Ｂ３：ＹＥＳ）には、次のタスクの起床を許可して（Ｂ４）、タスク末尾処理を終了する。一方、電子制御装置１０は、カウンタ値が「０」でない場合（Ｂ３：ＮＯ）には、次のタスクの起床を許可することなく、タスク末尾処理を終了する。
【００２０】
電子制御装置１０によれば、衝突回避部２１は、タスクに含まれる複数の関数演算のうち先頭の関数演算Ｆａが開始されるタスク起床時、および、タスクに含まれる複数の関数演算のうち末尾の関数演算Ｆｂが完了されるタスク完了時を管理することにより、先のタスクの完了前に後のタスクが開始されるタスク衝突を回避する。具体的には、衝突回避部２１は、タスクを起床させるための割り込み指令Ｓが入力されるとカウンタ値を加算し、複数の関数演算のうち末尾の関数演算Ｆｂが完了されるとカウンタ値を減算する。そして、衝突回避部２１は、後のタスクの開始を許可するか否かを、後のタスクの割り込み指令Ｓの入力時あるいは入力直後におけるカウンタ値に基づいて決定する。この場合、衝突回避部２１は、カウンタ値が所定値以下である場合に、後のタスクの開始を許可する。
【００２１】
この構成によれば、先のタスクの末尾の関数演算Ｆｂが完了していないにも拘らず、後のタスクの先頭の関数演算Ｆａが開始されてしまうことを回避することができる。従って、先のタスクの演算結果を後のタスクの演算処理において参照する必要がある場合に、先のタスクの演算結果を後のタスクの演算処理に確実に反映させることができる。
【００２２】
（第２実施形態）
図５に例示するように、本実施形態では、電子制御装置１０は、割り込み指令Ｓが入力されると、フラグを設定する。そして、電子制御装置１０は、タスクの開始を許可する。これにより、タスクの先頭の関数演算Ｆａがコア１２ａにより開始される。フラグは、タスクが起床されていることを示すものである。電子制御装置１０は、フラグが設定されていればタスクが実行中であることを特定でき、フラグが設定されていなければタスクが実行されていないことを特定することができる。
【００２３】
電子制御装置１０は、コア１２ａによりタスクの先頭の関数演算Ｆａを完了すると、同じタスクに含まれる次の関数演算、この場合、タスクの末尾の関数演算Ｆｂをコア１２ｂにより開始する。そして、電子制御装置１０は、コア１２ｂによりタスクの末尾の関数演算Ｆｂを完了すると、フラグをリセットする。
以上の通り、電子制御装置１０は、タスクを起床させるための割り込み指令Ｓが入力されるとフラグを設定し、タスクの末尾の関数演算Ｆｂを完了するとフラグをリセットするようになっている。
【００２４】
このようにタスク演算を実行する電子制御装置１０においては、先のタスクの末尾の関数演算Ｆｂが完了している状態で次のタスクを起床させるための割り込み指令Ｓが入力される場合と、先のタスクの末尾の関数演算Ｆｂが完了していないにも拘らず次のタスクを起床させるための割り込み指令Ｓが入力されてしまう場合と、が起こり得る。
【００２５】
前者の場合では、先のタスクの末尾の関数演算Ｆｂが完了しているので、後のタスクの割り込み指令Ｓの入力時において、フラグがリセットされている。そのため、電子制御装置１０は、後のタスクの開始を許可する。これにより、後のタスクの先頭の関数演算Ｆａがコア１２ａにより開始される。
【００２６】
一方、後者の場合では、先のタスクの末尾の関数演算Ｆｂが完了していないので、後のタスクの割り込み指令Ｓの入力時において、フラグがリセットされていない。そのため、電子制御装置１０は、後のタスクの開始を不許可とする。よって、この場合、後のタスクは開始されず、待機状態となる。また、電子制御装置１０は、後のタスクを開始するための割り込み指令Ｓの入力時にフラグがリセットされていない場合には、タスク衝突が仮想的に発生したことを示す仮想タスク衝突情報を記録する。つまり、電子制御装置１０は、後のタスクを待機させなければ発生していたであろう先のタスクと後のタスクとの衝突を、仮想的に発生したものとみなして記録するようになっている。
【００２７】
そして、上記の待機状態において、先のタスクの末尾の関数演算Ｆｂが完了すると、電子制御装置１０は、仮想タスク衝突情報を記録しているか否かを確認する。そして、電子制御装置１０は、仮想タスク衝突情報を記録している場合には、待機させていた後のタスクの先頭の関数演算Ｆａをコア１２ａにより開始する。一方、仮想タスク衝突情報が記録されていないのであれば、先のタスクと後のタスクとの仮想的な衝突は発生しておらず、待機状態となっているタスクが存在しない。よって、この場合、電子制御装置１０は、後のタスクの割り込み指令Ｓの入力をトリガとして、当該後のタスクを開始することができる。
【００２８】
次に、電子制御装置１０によるタスク演算の制御例をフローチャートに基づいて説明する。図６に例示するタスク先頭処理では、電子制御装置１０は、割り込み指令Ｓが入力されると（Ｃ１：ＹＥＳ）、フラグが設定されているか否かを確認する（Ｃ２）。そして、電子制御装置１０は、フラグが設定されていない場合（Ｃ２：ＮＯ）には、フラグを設定する（Ｃ３）。そして、電子制御装置１０は、タスクを起床して（Ｃ４）、タスク先頭処理を終了する。一方、電子制御装置１０は、フラグが設定されている場合（Ｃ２：ＹＥＳ）には、仮想タスク衝突情報を記録して（Ｃ５）、タスク先頭処理を終了する。
【００２９】
また、図７に例示するタスク末尾処理では、電子制御装置１０は、タスクの末尾の関数演算を完了すると（Ｄ１：ＹＥＳ）、仮想タスク衝突情報を記録しているか否かを確認する（Ｄ２）。電子制御装置１０は、仮想タスク衝突情報を記録している場合（Ｄ２：ＹＥＳ）には、仮想タスク衝突情報をリセットする（Ｄ３）。また、電子制御装置１０は、フラグをリセットする（Ｄ４）。そして、電子制御装置１０は、待機中のタスクの起床を許可して（Ｄ５）、タスク末尾処理を終了する。一方、電子制御装置１０は、仮想タスク衝突情報を記録していない場合（Ｄ２：ＮＯ）には、フラグをリセットして（Ｄ６）、タスク末尾処理を終了する。
【００３０】
電子制御装置１０によれば、衝突回避部２１は、複数の関数演算のうち先頭の関数演算Ｆａが開始されるとフラグを設定し、複数の関数演算のうち末尾の関数演算Ｆｂが完了されるとフラグをリセットする。そして、衝突回避部２１は、タスクを起床させるための割り込み指令Ｓの入力時におけるフラグの設定状態に基づいて、後のタスクの開始を許可するか否かを決定する。この場合、衝突回避部２１は、後のタスクの割り込み指令Ｓの入力時あるいは入力直後においてフラグがリセットされていない場合には、タスク衝突が発生したことを仮想的に示す仮想タスク衝突情報を記録する。そして、衝突回避部２１は、先のタスクの末尾の関数演算Ｆｂが完了した後において仮想タスク衝突情報が記録されている場合に、待機中である後のタスクの開始を許可する。
【００３１】
この構成によれば、先のタスクの末尾の関数演算Ｆｂが完了していないにも拘らず、後のタスクの先頭の関数演算Ｆａが開始されてしまうことを回避することができる。従って、先のタスクの演算結果を後のタスクの演算処理において参照する必要がある場合に、先のタスクの演算結果を後のタスクの演算処理に確実に反映させることができる。
【００３２】
（その他の実施形態）
本開示は、上述した複数の実施形態に限定されるものではなく、その要旨を逸脱しない範囲で種々の実施形態に適用可能である。例えば、衝突回避部２１は、後のタスクの割り込み指令Ｓの入力時においてフラグがリセットされている場合に、後のタスクの開始を許可するように構成してもよい。また、電子制御装置１０が備えるコアの数は２つに限られるものではなく、タスクの先頭の関数演算を実行するコアとタスクの末尾の関数演算を実行するコアとの間に１つ、あるいは、複数のコアを備える構成としてもよい。この場合も、タスク起床時およびタスク完了時をカウンタ値やフラグなどで管理することにより、先のタスクと後のタスクとの衝突を回避することができる。
【００３３】
本開示は、実施例に準拠して記述されたが、本開示は当該実施例や構造に限定されるものではないと理解される。本開示は、様々な変形例や均等範囲内の変形をも包含する。加えて、様々な組み合わせや形態、さらには、それらに一要素のみ、それ以上、あるいはそれ以下、を含む他の組み合わせや形態をも、本開示の範疇や思想範囲に入るものである。
【符号の説明】
【００３４】
図面中、１０は電子制御装置、１２ａ，１２ｂはコア、２１は衝突回避部を示す。
【図１】
2018055579.tif 000003
【図２】
2018055579.tif 000004
【図３】
2018055579.tif 000005
【図４】
2018055579.tif 000006
【図５】
2018055579.tif 000007
【図６】
2018055579.tif 000008
【図７】
2018055579.tif 000009