(57)【要約】      （修正有）【課題】リセット前に異常発生コアが実行していた演算処理を正常なコアに割り当てることが可能となり、リセット後に実行できなくなる演算処理を必要最低限に抑制することができるマイクロコンピュータを提供する。【解決手段】マイコンは、複数のコア２１、２２を備える。複数のコアのコア異常検出部３１は、異常発生コアを特定する。複数のコアの動作モード判定部３３は、特定された異常発生コアに基づいて、動作モードを決定する。リセット部３４は、異常発生コアを特定した場合に複数のコアをリセットさせる。起動コア制御部３５は、複数のコアがリセットされた後に、複数のコアののうち、異常発生コア以外のコアを起動させる。複数のコアの実行処理判定機能４５は、決定された動作モードに基づいて、起動したコア毎に、異常発生コア以外のコアが起動した後にコアに実行させる処理を設定する。【選択図】図２
2018112977.tif 000002
【特許請求の範囲】
【請求項１】
１つ又は複数の演算処理を実行するコア（２１，２２，２３）を複数備えるマイクロコンピュータ（３）であって、
複数の前記コアのうち、異常が発生している前記コアである異常発生コアを特定することができるように構成された異常特定部（３１）と、
前記異常特定部により特定された前記異常発生コアに基づいて、前記異常発生コア以外の前記コアが前記演算処理を実行するための動作モードを決定するように構成されたモード決定部（３３）と、
前記異常特定部が前記異常発生コアを特定した場合に、複数の前記コアをリセットさせるように構成されたリセット部（３４）と、
複数の前記コアがリセットされた後に、複数の前記コアのうち、前記異常特定部により特定された前記異常発生コア以外の前記コアを起動させるように構成された起動部（３５）と、
前記モード決定部によって決定された前記動作モードに基づいて、起動した前記コア毎に、前記異常発生コア以外の前記コアが起動した後に前記コアに実行させる１つ又は複数の前記演算処理を設定するように構成された処理設定部（４５）と
を備えるマイクロコンピュータ。
【請求項２】
請求項１に記載のマイクロコンピュータであって、
前記異常発生コアは、複数の前記コアがリセットされる前に、自身の動作が停止されるマイクロコンピュータ。
【請求項３】
請求項１または請求項２に記載のマイクロコンピュータであって、
複数の前記コアがリセットされる前に、前記コアがリセットされる前に実行するように予め設定されたリセット前処理を、少なくとも前記異常発生コア以外の前記コアに実行させるように構成された前処理実行部（Ｓ７０，Ｓ８０）を備えるマイクロコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、コアを複数備えるマイクロコンピュータに関する。
【背景技術】
【０００２】
特許文献１のように、複数のコアを備え、複数の処理を各コアに割り当てることにより、複数の処理を並列に実行するように構成されたマイクロコンピュータが知られている。
従来、複数のコアを備えたマルチコアマイコンにおいて特定のコアで異常が発生した場合には、マイコン全体にリセットをかけて、特定のコアの復帰を試みていた。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００８−１２３４３９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、リセットをかけても特定のコアでの異常が継続する場合に、この特定のコアで発生した異常のために、その他のコアにおける処理が実行できなくなるおそれがあった。
本開示は、特定のコアで発生した異常が他のコアに及ぼす影響を抑制することを目的とする。
【課題を解決するための手段】
【０００５】
本開示の一態様は、１つ又は複数の演算処理を実行するコア（２１，２２，２３）を複数備えるマイクロコンピュータ（３）であって、異常特定部（３１）と、モード決定部（３３）と、リセット部（３４）と、起動部（３５）と、処理設定部（４５）とを備える。
【０００６】
異常特定部は、複数のコアのうち、異常が発生しているコアである異常発生コアを特定することができるように構成される。
モード決定部は、異常特定部により特定された異常発生コアに基づいて、異常発生コア以外のコアが演算処理を実行するための動作モードを決定するように構成される。
【０００７】
リセット部は、異常特定部が異常発生コアを特定した場合に、複数のコアをリセットさせるように構成される。
起動部は、複数のコアがリセットされた後に、複数のコアのうち、異常特定部により特定された異常発生コア以外のコアを起動させるように構成される。
【０００８】
処理設定部は、モード決定部によって決定された動作モードに基づいて、起動したコア毎に、異常発生コア以外のコアが起動した後にコアに実行させる１つ又は複数の演算処理を設定するように構成される。
【０００９】
このように構成された本開示のマイクロコンピュータは、異常発生コアを特定した場合に複数のコアがリセットされるため、少なくとも１つのコアで異常が発生したときにおける異常の影響を解消することができる。また、本開示のマイクロコンピュータは、複数のコアのうち異常発生コア以外のコアを起動させるため、リセット後に、異常発生コアに起因した異常が他のコアに及ぼす影響を抑制することができる。そして、本開示のマイクロコンピュータは、動作モードに基づいて、起動したコア毎に実行させる演算処理を設定する。このため、本開示のマイクロコンピュータは、リセット前に異常発生コアが実行していた演算処理を正常なコアに割り当てることが可能となり、リセット後に実行できなくなる演算処理を必要最低限に抑制することができる。
【００１０】
なお、この欄及び特許請求の範囲に記載した括弧内の符号は、一つの態様として後述する実施形態に記載の具体的手段との対応関係を示すものであって、本開示の技術的範囲を限定するものではない。
【図面の簡単な説明】
【００１１】
【図１】ＥＣＵ１の構成を示すブロック図である。
【図２】コア２１，２２の構成を示すブロック図である。
【図３】異常対応処理を示すフローチャートである。
【図４】初期化処理を示すフローチャートである。
【図５】実行処理テーブルを示す図である。
【図６】正常時とフェールセーフ時において、実行タイミングが到来する毎にコア２１，２２，２３が実行する処理を示す図である。
【図７】異常コアの処理を他コアで実行するための方法を説明する図である。
【図８】コア２１〜２３の動作を示す第１のシーケンス図である。
【図９】コア２１〜２３の動作を示す第２のシーケンス図である。
【発明を実施するための形態】
【００１２】
以下に本開示の実施形態を図面とともに説明する。
本実施形態の電子制御装置１（以下、ＥＣＵ１）は、車両に搭載され、図１に示すように、マイクロコンピュータ３（以下、マイコン３）、入力回路４、出力回路５およびリセット回路６を備えている。ＥＣＵは、Electronic Control Unitの略である。
【００１３】
そしてマイコン３には、図示しないクランク角センサ、エアフロメータ、スロットル開度センサ、吸気圧センサおよび空燃比センサ等からの信号が、入力回路４を介して入力される。
【００１４】
クランク角センサは、エンジンのクランク軸の回転角を検出する。エアフロメータは、吸気管を通ってエンジンに供給される空気量を検出する。スロットル開度センサは、スロットルバルブの開度を検出する。吸気圧センサは、吸気管内の圧力を検出する。空燃比センサは、排ガス中の酸素濃度からエンジンに供給された燃料混合気の空燃比を検出する。
【００１５】
そしてマイコン３は、入力回路４を介して入力される上記各信号に基づいてエンジンの状態を検出するとともに、その検出結果に基づいて、スロットルバルブの開度を変えるスロットルモータ、各気筒内の点火プラグ、および各気筒内のインジェクタなどの各種アクチュエータを駆動するための駆動信号を出力回路５を介して出力してエンジンを作動させる。
【００１６】
リセット回路６は、マイコン３へリセット信号を出力することにより、マイコン３全体にリセットをかける。
またマイコン３は、ＣＰＵ１１、ＲＯＭ１２、ＲＡＭ１３、フラッシュＲＯＭ１４、Ｉ／Ｏ１５及びこれらの構成を接続するバスラインなどから構成され、ＲＯＭ１２に記憶されたプログラムに基づいて、エンジンを制御するための各種制御処理を実行する。なお、フラッシュＲＯＭ１４は、記憶内容を書き換え可能な不揮発性メモリである。
【００１７】
マイクロコンピュータの各種機能は、ＣＰＵ１１が非遷移的実体的記録媒体に格納されたプログラムを実行することにより実現される。この例では、ＲＯＭ１２が、プログラムを格納した非遷移的実体的記録媒体に該当する。また、このプログラムの実行により、プログラムに対応する方法が実行される。
【００１８】
さらにＣＰＵ１１は、プログラムを実行するための演算ユニットおよびレジスタなどを含むＣＰＵコア（以下、コア）２１，２２，２３を備える。コア２１，２２，２３は、エンジンを制御するための各種制御処理を分散して実行する。そして、コア２１，２２，２３は互いにデータ通信可能に接続されている。
【００１９】
またＣＰＵ１１は、レジスタ２４と、クロック供給回路２５を備える。レジスタ２４は、コア２１，２２，２３からアクセス可能に構成されている。クロック供給回路２５は、図示しない発振回路からマイコン３へ入力されたクロック信号をコア２１，２２，２３へ供給する。クロック供給回路２５は、レジスタ２４に記憶されている後述の起動コア情報に基づいて、クロック信号を供給するコアを選択することが可能に構成されている。
【００２０】
コア２１，２２は、図２に示すように、コア異常検出部３１、コア異常管理部３２、動作モード判定部３３、リセット部３４、起動コア制御部３５および処理実行部３６を備える。なお、図２に示していないが、コア２３は、コア２１，２２と同様に、コア異常検出部３１、コア異常管理部３２、動作モード判定部３３、リセット部３４、起動コア制御部３５および処理実行部３６を備える。
【００２１】
コア異常検出部３１は、自コア異常検出機能４１とコア相互監視機能４２を備える。自コア異常検出機能４１は、例えば、ＷＤＴ割り込み及び例外割り込みにより、コア異常検出部３１を搭載しているコア（以下、自コア）の異常を検出する。ＷＤＴは、Watch Dog Timerの略である。例外割り込みとしては、例えば、未定義命令例外、特権命令例外、アクセス例外および浮動小数例外などが挙げられる。またコア異常検出部３１は、ロックステップ動作により異常を検出するようにしてもよい。以下、コア２１，２２，２３のうち、自コア以外のコアを他コアという。
【００２２】
コア相互監視機能４２は、コア２１，２２，２３の間で相互に異常を監視する。具体的には、監視される側のコア相互監視機能４２は、監視用のテスト演算を実行する。監視する側のコア相互監視機能４２は、定期的に、監視される側のコア相互監視機能４２が実行したテスト演算の結果を確認し、この演算結果が正しいか否かを判断する。なお、図２は、コア２１のコア相互監視機能４２とコア２２のコア相互監視機能４２との間で相互監視している状態を示している。しかし、コア２１のコア相互監視機能４２とコア２２のコア相互監視機能４２はそれぞれ、コア２３のコア相互監視機能４２との間で相互監視している。図２の矢印Ｙ１は、コア２１のコア相互監視機能４２が、コア２２のコア相互監視機能４２を監視していることを示している。図２の矢印Ｙ２は、コア２２のコア相互監視機能４２が、コア２１のコア相互監視機能４２を監視していることを示している。
【００２３】
コア異常検出部３１は、自コア異常検出機能４１またはコア相互監視機能４２がコアの異常を検出すると、異常が発生しているコア（以下、異常発生コア）を示す異常コア情報を、自コアのコア異常管理部３２へ出力する。図２の矢印Ｙ３は、コア２１のコア異常検出部３１が異常コア情報をコア２１のコア異常管理部３２へ出力することを示している。図２の矢印Ｙ４は、コア２２のコア異常検出部３１が異常コア情報をコア２２のコア異常管理部３２へ出力することを示している。
【００２４】
コア異常管理部３２は、異常通知受信機能４３を備える。異常通知受信機能４３は、コア異常検出部３１から異常コア情報が入力されると、後述するリセット前通知を他コアの異常通知受信機能４３へ送信する。また異常通知受信機能４３は、コア異常検出部３１から異常コア情報が入力されると、異常コア情報を自コアの動作モード判定部３３へ出力する。また異常通知受信機能４３は、他コアからのリセット前通知を受信する。図２の矢印Ｙ５は、コア２１の異常通知受信機能４３が、コア２２の異常通知受信機能４３へリセット前通知を送信することを示している。図２の矢印Ｙ６は、コア２２の異常通知受信機能４３が、コア２１の異常通知受信機能４３へリセット前通知を送信することを示している。図２の矢印Ｙ７は、コア２１の異常通知受信機能４３が、コア２１の動作モード判定部３３へ異常コア情報を送信することを示している。図２の矢印Ｙ８は、コア２２の異常通知受信機能４３が、コア２２の動作モード判定部３３へ異常コア情報を送信することを示している。
【００２５】
動作モード判定部３３は、動作モード判定機能４４を備える。動作モード判定機能４４は、コア異常管理部３２から異常コア情報が入力されると、異常コア情報が示す異常発生コアに基づいて、リセット後の動作モードと、リセット後に起動させるコアとを決定する。リセット後に起動させるコアは、異常コア情報が示す異常発生コア以外のコアである。リセット後の動作モードを決定する処理についての詳細は後述する。
【００２６】
そして動作モード判定部３３は、決定した動作モードを示す動作モード情報を、フラッシュＲＯＭ１４に設けられている動作モード記憶部５１に記憶する。図２の矢印Ｙ９は、コア２１の動作モード判定部３３が、動作モード情報を動作モード記憶部５１に記憶することを示している。図２の矢印Ｙ１０は、コア２２の動作モード判定部３３が、動作モード情報を動作モード記憶部５１に記憶することを示している。
【００２７】
また動作モード判定部３３は、コア異常管理部３２から異常コア情報が入力されると、リセットされる前に予め設定されたリセット前処理を実行する。リセット前処理としては、例えば、コアの起動後に必要な情報を保存したり、コアのポートを安全側に設定したりすることが挙げられる。リセット前処理が完了した後に、自コアのリセット部３４へリセット要求を出力する。図２の矢印Ｙ１１は、コア２１の動作モード判定部３３が、コア２１のリセット部３４へリセット要求を出力することを示している。図２の矢印Ｙ１２は、コア２２の動作モード判定部３３が、コア２２のリセット部３４へリセット要求を出力することを示している。
【００２８】
リセット部３４は、リセット要求が入力されると、リセット回路６へリセット要求を出力する。これにより、リセット回路６はマイコン３全体にリセットをかける。
また動作モード判定部３３は、リセット後に起動させるコアを決定すると、リセット後に起動させるコアを示す起動コア情報を起動コア制御部３５へ出力する。図２の矢印Ｙ１３は、コア２１の動作モード判定部３３が、コア２１の起動コア制御部３５へ起動コア情報を出力することを示している。図２の矢印Ｙ１４は、コア２２の動作モード判定部３３が、コア２２の起動コア制御部３５へ起動コア情報を出力することを示している。
【００２９】
起動コア制御部３５は、起動コア情報が入力されると、起動コア情報をレジスタ２４に記憶させる。これにより、クロック供給回路２５は、リセット後に、レジスタ２４に記憶されている起動コア情報を参照し、クロック信号を供給するコアを選択する。具体的には、起動コア情報がコア２１，２２を示す場合には、クロック供給回路２５は、コア２１，２２へクロック信号を供給し、コア２３へクロック信号を供給しない。これにより、リセット後に、コア２１，２２は起動し、コア２３は起動しない。同様に、起動コア情報がコア２１，２３を示す場合には、クロック供給回路２５は、コア２１，２３へクロック信号を供給し、コア２２へクロック信号を供給しない。また、起動コア情報がコア２２，２３を示す場合には、クロック供給回路２５は、コア２２，２３へクロック信号を供給し、コア２１へクロック信号を供給しない。
【００３０】
処理実行部３６は、実行処理判定機能４５および処理実行機能４６を備える。
処理実行部３６は、動作モード記憶部５１から動作モード情報を取得する。図２の矢印Ｙ１５は、コア２１の処理実行部３６が、動作モード記憶部５１から動作モード情報を取得することを示している。図２の矢印Ｙ１６は、コア２２の処理実行部３６が、動作モード記憶部５１から動作モード情報を取得することを示している。
【００３１】
実行処理判定機能４５は、処理実行部３６により取得された動作モード情報に基づいて動作モードを決定し、決定した動作モードに基づいて、処理実行機能４６が実行する処理を設定する。図２の矢印Ｙ１７は、コア２１の実行処理判定機能４５が、コア２１の処理実行機能４６が実行する処理を設定することを示している。図２の矢印Ｙ１８は、コア２２の実行処理判定機能４５が、コア２２の処理実行機能４６が実行する処理を設定することを示している。
【００３２】
処理実行機能４６は、実行処理判定機能４５により設定された動作モードで、処理を実行する。
コア２１，２２，２３を構成するこれらの要素を実現する手法はソフトウェアに限るものではなく、その一部又は全部の要素について、一つあるいは複数のハードウェアを用いて実現してもよい。例えば、上記機能がハードウェアである電子回路によって実現される場合、その電子回路は多数の論理回路を含むデジタル回路、又はアナログ回路、あるいはこれらの組合せによって実現してもよい。
【００３３】
次に、コア２１，２２，２３が実行する異常対応処理の手順を説明する。異常対応処理は、コア２１，２２，２３が起動した後に開始される処理である。
この異常対応処理が実行されると、コア２１，２２，２３は、図３に示すように、まずＳ１０にて、自コア異常検出機能４１とコア相互監視機能４２により、コアの異常を検出する。そしてＳ２０にて、Ｓ１０での検出結果に基づいて、異常発生コアが存在するか否かを判断する。ここで、異常発生コアが存在していない場合には、Ｓ１０に移行する。一方、異常発生コアが存在する場合には、Ｓ３０にて、異常発生コアに基づいて、リセット後の動作モードを決定する。具体的には、異常発生コアがコア２３である場合には動作モードは第１フェールセーフモード、異常発生コアがコア２２である場合には動作モードは第２フェールセーフモード、異常発生コアがコア２１である場合には動作モードは第３フェールセーフモードであると決定する。以下、第１フェールセーフモード、第２フェールセーフモードおよび第３フェールセーフモードをまとめて単にフェールセーフモードともいう。
【００３４】
そしてＳ４０にて、Ｓ３０で決定した動作モードを示す動作モード情報を動作モード記憶部５１に記憶する。さらにＳ５０にて、異常発生コアに基づいて、リセット後に起動させるコア（以下、起動コア）を決定する。具体的には、異常発生コアがコア２３である場合には起動コアはコア２１，２２であり、異常発生コアがコア２２である場合には起動コアはコア２１，２３であり、異常発生コアがコア２１である場合には起動コアはコア２２，２３であると決定する。
【００３５】
そしてＳ６０にて、Ｓ５０で決定した起動コアを示す起動コア情報をレジスタ２４に記憶する。次にＳ７０にて、異常発生コアを除く他コアへリセット前通知を送信する。これにより、リセット前通知を受信したコアは、リセット前処理を実行する。
【００３６】
さらにＳ８０にて、上述のリセット前処理を実行する。そして、リセット前処理が終了すると、Ｓ９０にて、リセット回路６へリセット要求を出力し、異常対応処理を終了する。
【００３７】
次に、コア２１，２２，２３が実行する初期化処理の手順を説明する。初期化処理は、コア２１，２２，２３が起動した直後に１回のみ実行される処理である。
この初期化処理が実行されると、コア２１，２２，２３は、図４に示すように、まずＳ２１０にて、動作モード記憶部５１から動作モード情報を取得する。そしてＳ２２０にて、動作モード記憶部５１に動作モード情報が記憶されていたか否かを判断する。ここで、動作モード情報が記憶されていなかった場合には、Ｓ２３０にて、実行処理テーブルに基づいて、後述する正常モードで実行する処理を設定する。
【００３８】
実行処理テーブルは、ＲＯＭ１２に記憶されており、コア２１，２２，２３により実行される処理が動作モード毎に設定されている。
例えば図５に示すように、実行処理テーブルは、正常モードでは、コア２１は、処理Ａ１，Ａ２，Ａ３，Ａ４，Ａ５，Ａ６を順次実行し、コア２２は、処理Ｂ１，Ｂ２，Ｂ３，Ｂ４，Ｂ５を順次実行し、コア２３は、処理Ｃ１，Ｃ２，Ｃ３，Ｃ４，Ｃ５を順次実行するように設定されている。
【００３９】
また実行処理テーブルは、第１フェールセーフモードでは、コア２１は、処理Ａ１，Ｃ２，Ａ３，Ａ５，Ａ６を順次実行し、コア２２は、処理Ｂ１，Ｃ４，Ｂ４を順次実行し、コア２３は、処理を実行しないように設定されている。
【００４０】
また実行処理テーブルは、第２フェールセーフモードでは、コア２１は、処理Ａ１，Ｂ２，Ａ３，Ａ５，Ａ６を順次実行し、コア２３は、処理Ｃ２，Ｂ４，Ｃ４を順次実行し、コア２２は、処理を実行しないように設定されている。
【００４１】
また実行処理テーブルは、第３フェールセーフモードでは、コア２２は、処理Ａ１，Ｂ２，Ｂ４，Ａ６を順次実行し、コア２３は、処理Ｃ２，Ａ３，Ａ５，Ｃ４を順次実行し、コア２１は、処理を実行しないように設定されている。
【００４２】
従って、Ｓ２３０では、例えば、コア２１は、処理Ａ１，Ａ２，Ａ３，Ａ４，Ａ５，Ａ６を順次実行するように設定され、コア２２は、処理Ｂ１，Ｂ２，Ｂ３，Ｂ４，Ｂ５を順次実行するように設定され、コア２３は、処理Ｃ１，Ｃ２，Ｃ３，Ｃ４，Ｃ５を順次実行するように設定される。
【００４３】
なお、図５に示す実行処理テーブルは、コア２１，２２，２３により実行される処理の一部を示している。例えば、コア２１，２２，２３は、少なくとも、角度同期タスクと時間同期タスクを実行する。角度同期タスクは、予め設定された角度イベント生成条件が成立する毎に実行される。角度イベント生成条件は、例えば、クランク軸が予め設定されたイベント生成角度（例えば、３０°ＣＡ）回転することである。時間同期タスクは、予め設定された時間イベント生成条件が成立する毎に実行される。時間イベント生成条件は、例えば、予め設定されたイベント生成時間（例えば、１ｍｓ）が経過することである。
【００４４】
そして、実行処理テーブルは、少なくとも、角度同期タスクで実行される処理と、時間同期タスクで実行される処理が設定されている。図５に示す実行処理テーブルは、例えば、時間同期タスクで実行される処理を示している。
【００４５】
一方、図４に示すように、Ｓ２２０にて、動作モード記憶部５１に動作モード情報が記憶されていた場合には、Ｓ２４０にて、動作モード情報と実行処理テーブルに基づいて、第１フェールセーフモード、第２フェールセーフモードまたは第３フェールセーフモードで実行する処理を設定する。例えば、動作モード情報により示される動作モードが第２フェールセーフモードである場合には、コア２１は、処理Ａ１，Ｂ２，Ａ３，Ａ５，Ａ６を順次実行するように設定され、コア２３は、処理Ｃ２，Ｂ４，Ｃ４を順次実行するように設定される。
【００４６】
その後Ｓ２５０にて、Ｓ２４０で設定された処理の実行を処理実行部３６に開始させて、初期化処理を終了する。
これにより、図６に示すように、コア２１，２２，２３が正常（すなわち、正常モード）である場合には、実行タイミングが到来する毎に、コア２１は、処理Ａ１，Ａ２，Ａ３，Ａ４，Ａ５，Ａ６を順次実行し、コア２２は、処理Ｂ１，Ｂ２，Ｂ３，Ｂ４を順次実行し、コア２３は、処理Ｃ１，Ｃ２，Ｃ３，Ｃ４，Ｃ５を順次実行する。
【００４７】
また、コア２３が異常（すなわち、第１フェールセーフモード）である場合には、実行タイミングが到来する毎に、コア２１は、処理Ａ１，Ｃ２，Ａ３，Ａ５，Ａ６を順次実行し、コア２２は、処理Ｂ１，Ｃ４，Ｂ４を順次実行し、コア２３は、処理を実行しない。
【００４８】
また、コア２２が異常（すなわち、第２フェールセーフモード）である場合には、実行タイミングが到来する毎に、コア２１は、処理Ａ１，Ｂ２，Ａ３，Ａ５，Ａ６を順次実行し、コア２３は、処理Ｃ２，Ｂ４，Ｃ４を順次実行し、コア２２は、処理を実行しない。
【００４９】
また、コア２１が異常（すなわち、第３フェールセーフモード）である場合には、実行タイミングが到来する毎に、コア２２は、処理Ａ１，Ｂ２，Ｂ４，Ａ６を順次実行し、コア２３は、処理Ｃ２，Ａ３，Ａ５，Ｃ４を順次実行し、コア２１は、処理を実行しない。
【００５０】
このようにして、ＥＣＵ１は、フェールセーフ時には、正常時に実行する処理の中で退避走行に必要な処理のみを、正常なコアを使って実行させる。
ここで、異常となったコアの処理を他のコアで実行できるようにするための方法について説明する。説明を簡略化するために、図７に示すように、正常時には、コアＡが処理Ａ１，Ａ２，Ａ３を順次実行し、コアＢが処理Ｂ１，Ｂ２を順次実行する場合を想定して説明する。
【００５１】
ＲＯＭには、プログラムＰＧ１，ＰＧ２，ＰＧ３，ＰＧ４，ＰＧ５，ＰＧ６，ＰＧ７が記憶されているとする。プログラムＰＧ１は、コアＡが各種処理を実行するためのプログラムである。プログラムＰＧ２は、コアＢが各種処理を実行するためのプログラムである。プログラムＰＧ３は、処理Ａ１を実行するためのプログラムである。プログラムＰＧ４は、処理Ａ２を実行するためのプログラムである。プログラムＰＧ５は、処理Ａ３を実行するためのプログラムである。プログラムＰＧ６は、処理Ｂ１を実行するためのプログラムである。プログラムＰＧ７は、処理Ｂ２を実行するためのプログラムである。
【００５２】
実行処理テーブルは、ＲＯＭに記憶されており、コアＡとコアＢにより実行される処理が動作モード毎に設定されている。
この実行処理テーブルは、正常モードでは、コアＡは処理Ａ１，Ａ２，Ａ３を順次実行し、コアＢは処理Ｂ１，Ｂ２を順次実行するように設定されている。また実行処理テーブルは、第１フェールセーフモードでは、コアＡは処理Ａ１，Ａ２，Ｂ１を順次実行し、コアＢは処理を実行しないように設定されている。また実行処理テーブルは、第２フェールセーフモードでは、コアＢは処理Ａ１，Ａ２，Ｂ１を順次実行し、コアＡは処理を実行しないように設定されている。
【００５３】
プログラムＰＧ１は、処理数ｉを順次インクリメントしながら、実行処理テーブル［０］と、［動作モード］と、処理数［ｉ］とにより、実行処理ＩＤを特定して、特定した処理を実行する。同様に、プログラムＰＧ２は、処理数ｉを順次インクリメントしながら、実行処理テーブル［１］と、［動作モード］と、処理数［ｉ］とにより、実行処理ＩＤを特定して、特定した処理を実行する。
【００５４】
なお、実行処理テーブル［０］は、実行処理テーブルにおいてコアＡを指定する。実行処理テーブル［１］は、実行処理テーブルにおいてコアＢを指定する。そして、［動作モード］は、「正常」、「第１フェールセーフモード」および「第２フェールセーフモード」の何れかに設定される。
【００５５】
例えば、プログラムＰＧ１において、［動作モード］が「正常」である場合には、処理数［０］，［１］，［２］であるときにそれぞれ、実行処理テーブルを参照することにより、処理Ａ１，Ａ２，Ａ３を示す実行処理ＩＤが設定される。これにより、プログラムＰＧ１において、処理実行（実行処理ＩＤ）により、処理Ａ１，Ａ２，Ａ３が順次実行される。
【００５６】
同様に、プログラムＰＧ２において、［動作モード］が「正常」である場合には、処理数［０］，［１］であるときにそれぞれ、処理Ｂ１，Ｂ２を示す実行処理ＩＤが設定される。これにより、プログラムＰＧ２において、処理実行（実行処理ＩＤ）により、処理Ｂ１，Ｂ２が順次実行される。
【００５７】
また、プログラムＰＧ１において、［動作モード］が「第１フェールセーフモード」である場合には、処理数［０］，［１］，［２］であるときにそれぞれ、実行処理テーブルを参照することにより、処理Ａ１，Ａ２，Ｂ１を示す実行処理ＩＤが設定される。これにより、プログラムＰＧ１において、処理実行（実行処理ＩＤ）により、処理Ａ１，Ａ２，Ｂ１が順次実行される。
【００５８】
同様に、プログラムＰＧ２において、［動作モード］が「第２フェールセーフモード」である場合には、処理数［０］，［１］，［２］であるときにそれぞれ、処理Ａ１，Ａ２，Ｂ１を示す実行処理ＩＤが設定される。これにより、プログラムＰＧ２において、処理実行（実行処理ＩＤ）により、処理Ａ１，Ａ２，Ｂ１が順次実行される。
【００５９】
次に、コア２１〜２３の動作の具体例を説明する。
図８に示すように、まず、コア２３で異常が発生し、コア２２がコア２３の異常を検出したとする。この場合に、コア２２が、動作モードを決定するとともに、リセット後に起動させるコアを決定する。そして、コア２２が、コア２１へリセット前通知を送信する。リセット前通知を受信したコア２１はリセット前処理を実行する。さらにコア２２は、リセット前処理を実行した後にリセット回路６へリセット要求を送信する。これにより、リセット回路６は、マイコン３全体にリセットをかける。その後、コア２１，２２が起動する。起動したコア２１，２２はそれぞれ、コア２２が決定した動作モードに基づいて、実行する処理を設定して、設定された処理の実行を開始する。
【００６０】
このように構成されたマイコン３は、処理Ａ１，Ａ２，Ａ３，Ａ４，Ａ５，Ａ６を実行するコア２１と、処理Ｂ１，Ｂ２，Ｂ３，Ｂ４を実行するコア２２と、処理Ｃ１，Ｃ２，Ｃ３，Ｃ４，Ｃ５を実行するコア２３とを備える。
【００６１】
コア２１，２２，２３のコア異常検出部３１は、コア２１，２２，２３のうち、異常発生コアを特定する。
コア２１，２２，２３の動作モード判定部３３は、特定された異常発生コアに基づいて、動作モードを決定する。
【００６２】
コア２１，２２，２３のリセット部３４は、異常発生コアを特定した場合に、リセット回路６へリセット要求を送信することにより、コア２１，２２，２３をリセットさせる。
コア２１，２２，２３の起動コア制御部３５は、起動コア情報をレジスタ２４に記憶することにより、コア２１，２２，２３がリセットされた後に、コア２１，２２，２３のうち、異常発生コア以外のコアを起動させる。
【００６３】
コア２１，２２，２３の実行処理判定機能４５は、決定された動作モードに基づいて、起動したコア毎に、異常発生コア以外のコアが起動した後にコアに実行させる処理を設定する。
【００６４】
このようにマイコン３は、異常発生コアを特定した場合にコア２１，２２，２３がリセットされるため、１つのコアで異常が発生したときにおける異常の影響を解消することができる。またマイコン３は、コア２１，２２，２３のうち異常発生コア以外のコアを起動させるため、リセット後に、異常発生コアに起因した異常が他のコアに及ぼす影響を抑制することができる。そしてマイコン３は、動作モードに基づいて、起動したコア毎に実行させる処理を設定する。このため、マイコン３は、リセット前に異常発生コアが実行していた処理を正常なコアに割り当てることが可能となり、リセット後に実行できなくなる処理を必要最低限に抑制することができる。
【００６５】
またマイコン３は、コア２１，２２，２３がリセットされる前に、コア２１，２２，２３がリセットされる前に実行するように予め設定されたリセット前処理を異常発生コア以外のコアに実行させる。これにより、マイコン３は、リセット待ちの期間においてマイコン３を適切な状態とすることができ、リセットに起因した異常の発生を抑制することができる。
【００６６】
以上説明した実施形態において、コア異常検出部３１は異常特定部に相当し、動作モード判定部３３はモード決定部に相当し、起動コア制御部３５は起動部に相当し、実行処理判定機能４５は処理設定部に相当する。
【００６７】
また、処理Ａ１〜Ａ６，Ｂ１〜Ｂ４，Ｃ１〜Ｃ５は演算処理に相当し、Ｓ７０，Ｓ８０は前処理実行部としての処理に相当する。
以上、本開示の一実施形態について説明したが、本開示は上記実施形態に限定されるものではなく、種々変形して実施することができる。
【００６８】
［変形例１］
例えば上記実施形態では、異常発生コアをリセット後に起動させないようにしたものを示したが、異常発生コアにおいて処理を無限ループに入れて異常発生コアを無効にするようにしてもよい。また、コアの動作モードに適切なものがあるマイコンでは、異常発生コアの動作モード（例えば、Ｓｌｅｅｐ，Ｓａｆｅ，Ｒｕｎ等）を変更するようにしてもよい。
【００６９】
［変形例２］
上記実施形態では、異常発生コアに基づいて動作モードを決定するものを示したが、異常発生コアに加えて、異常の種類および現在のソフトの状況の少なくとも一つに基づいて、動作モードを決定するようにしてもよい。異常の種類は、例えば、ＷＤＴ割り込み及び例外割り込み等である。現在のソフトの状況は、例えば、Ｉｎｉｔ中、Ｓｈｕｔｄｏｗｎ中およびベース処理中などである。
【００７０】
［変形例３］
上記実施形態では、異常発生コアが１つである場合に動作モードとして３つのフェールセーフモードの何れかに決定するものを示したが、異常発生コアが２つ以上である場合を想定して、フェールセーフモードを設定するようにしてもよい。また、正常に動作するコアの組み合わせに応じて、４つ以上のフェールセーフモードの何れかに決定するようにしてもよい。
【００７１】
［変形例４］
上記実施形態では、異常発生コアが存在する場合に、正常なコアを用いて正常モード時よりは少ない処理を実行するものを示した。しかし、マイコンの処理負荷が小さい状況（例えば、エンジン回転速度が小さい状況）では、異常発生コアが実行していた全ての処理を正常なコアに割り当てることによって、フェールセーフモードであっても、正常モード時と同様に全ての処理を実行するようにしてもよい。
【００７２】
［変形例５］
上記実施形態では、コアで異常が発生すると動作モードをフェールセーフモードに切り替えるものを示したが、予め設定された切替判定回数のリセットを繰り返しても、同一コアで異常が継続する場合に、動作モードをフェールセーフモードに切り替えるようにしてもよい。また、上記の切替判定回数は、車両状態またはマイコン状態に応じて変えるようにしてもよい。例えば、車速が０ｋｍ／ｈである場合、または、マイコンのイニシャル中は、安全にリセットをかけることができるため、切替判定回数を多くするようにしてもよい。
【００７３】
［変形例６］
上記実施形態では、マイコンが３つのコアを備えるものを示した。今後、マイコンに搭載されるコアの数が増えると、コアの故障発生確率も増加する。しかし、１つのコア当たりの処理比率は下がるため、例えば、１つのコアを予備のコアとして、他のコアが故障したときに、予備のコアで代替させるようにしてもよい。
【００７４】
［変形例７］
上記実施形態では、異常発生コアに基づいて動作モードを決定するものを示したが、異常発生コアにおける過去複数回の情報を確認して動作モードを決定するようにしてもよいし、異常発生コアにおける直前の１回の情報を確認して動作モードを決定するようにしてもよい。
【００７５】
［変形例８］
上記実施形態では、マイコンが３つのコアを備えるものを示した。しかし、１つのコアがマスタコアであり、残りのコアがスレーブコアであるという関係が設定されており、マスタコアがスレーブコアを監視している場合において、マスタコアで異常は発生したときには、マスタコアの機能をスレーブコアに移すようにしてもよい。二重故障が発生しないとすれば、退避走行が可能となる。
【００７６】
［変形例９］
上記実施形態では、異常が発生した場合に異常発生コアをリセット後に起動させないようにしたものを示したが、正常コアの一部もリセット後に起動させないようにしてもよい。
【００７７】
［変形例１０］
上記実施形態では、異常を検出したコアが、動作モードを決定するとともに、リセット後に起動させるコアを設定するものを示した。しかし、コアに予め優先度を設定し、コアに異常が発生した場合には、異常が発生していないコアの中で最も優先度が高いコアが、動作モードを決定するとともに、リセット後に起動させるコアを設定するようにしてもよい。ここで、最も優先度が高いコアが動作モードを決定するように構成されている場合におけるコア２１〜２３の動作の具体例を説明する。
【００７８】
図９に示すように、まず、コア２３で異常が発生し、コア２２がコア２３の異常を検出したとする。この場合に、コア２２が、異常が発生していないコアの中で最も優先度が高いコアであるコア２１を制御コアとして決定する。そして、コア２２は、制御コアであるコア２１へ異常発生通知を送信する。これにより、コア２１は、動作モードを決定するとともに、リセット後に起動させるコアを設定する。さらにコア２１は、リセット回路６へリセット要求を送信する。これにより、リセット回路６は、マイコン３全体にリセットをかける。その後、コア２１，２２が起動する。起動したコア２１，２２はそれぞれ、コア２２が決定した動作モードに基づいて、実行する処理を設定して、設定された処理の実行を開始する。
【００７９】
［変形例１１］
上記実施形態では、異常発生コアが検出された後に、リセット回路６がリセットをかけるものを示したが、リセット回路６がリセットをかける前に、異常発生コアの動作を停止するようにしてもよい。異常発生コアの動作を停止するために、例えば、異常発生コアへのクロック供給を停止するとよい。これにより、リセットをかける前に異常発生コアが異常な動作をしてしまうのを抑制することができる。
【００８０】
［変形例１２］
上記変形例１１では、リセットをかける前に異常発生コアの動作を停止させるものを示したが、異常発生コアの処理を無限ループに入れるようにしてもよい。
【００８１】
［変形例１３］
上記実施形態では、異常が発生していない正常なコアがリセットをかける前にリセット前処理を実行するものを示したが、リセットをかける前に、正常なコアが、異常発生コアがリセット前に実行するべき処理も実行するようにしてもよい。これにより、リセット前においてマイクロコンピュータを適切な状態とすることができ、リセットに起因した異常の発生を抑制することができる。
【００８２】
また、上記実施形態における１つの構成要素が有する機能を複数の構成要素に分担させたり、複数の構成要素が有する機能を１つの構成要素に発揮させたりしてもよい。また、上記実施形態の構成の一部を省略してもよい。また、上記実施形態の構成の少なくとも一部を、他の上記実施形態の構成に対して付加、置換等してもよい。なお、特許請求の範囲に記載の文言から特定される技術思想に含まれるあらゆる態様が本開示の実施形態である。
【００８３】
上述したマイコン３の他、当該マイコン３を構成要素とするシステム、当該マイコン３としてコンピュータを機能させるためのプログラム、このプログラムを記録した媒体、異常時処理実行方法など、種々の形態で本開示を実現することもできる。
【符号の説明】
【００８４】
３…マイコン、２１，２２，２３…コア、３１…コア異常検出部、３３…動作モード判定部、３４…リセット部、３５…起動コア制御部、４５…実行処理判定機能、
【図１】
2018112977.tif 000003
【図２】
2018112977.tif 000004
【図３】
2018112977.tif 000005
【図４】
2018112977.tif 000006
【図５】
2018112977.tif 000007
【図６】
2018112977.tif 000008
【図７】
2018112977.tif 000009
【図８】
2018112977.tif 000010
【図９】
2018112977.tif 000011