(57)【特許請求の範囲】
【請求項１】
演算処理を実行する第１のプロセッサと、
前記第１のプロセッサの演算処理の実行とは並列に演算処理を実行する第２のプロセッサと、
を備えた電子制御装置であって、
前記第１のプロセッサは、第１の演算処理と複数の第２の演算処理とを所定の実行順序に従って周期的に実行するように構成され、
前記第２のプロセッサは、第３の演算処理を周期的に実行するように構成され、
前記第１の演算処理と前記第３の演算処理は、排他的に共有リソースにアクセスする演算処理であり、
前記第１の演算処理と前記第３の演算処理とのうちの何れか一方が、前記共有リソースに排他的にアクセスしたときにセットされるロックフラグと、
前記第３の演算処理により前記共有リソースが排他的にアクセスされていて前記第１の演算処理が前記ロックフラグをセットできないとき、前記第１の演算処理が前記ロックフラグをセットできるまでセット試行を繰り返すセット試行回数を計数するセット試行カウンタと、
を備え、
前記セット試行カウンタの値が所定の閾値を超過したとき、
前記セット試行カウンタの値に基づいて、前記複数の第２の演算処理のうちの少なくとも一つを選択し、
前記選択された前記第２の演算処理と前記第１の演算処理との実行順序を変更して、前記第１のプロセッサの演算処理を実行するように構成されている、
ことを特徴とする電子制御装置。
【請求項２】
前記複数の第２の演算処理の夫々の処理時間に基づき、前記複数の第２の演算処理のうちの一つを選択するように構成されている、
ことを特徴とする、請求項１に記載の電子制御装置。
【請求項３】
前記第２の演算処理の現在の実行順序に基づき、前記複数の第２の演算処理のうち一つを選択するように構成されている、
ことを特徴とする、請求項１に記載の電子制御装置。
【請求項４】
前記実行順序の変更を複数回実行しても前記セット試行カウンタの値が前記所定の閾値を超過したときには、前記セット試行カウンタの値が最も小さい値ときの実行順序により、前記第１のプロセッサの演算処理を実行するように構成されている、
ことを特徴とする請求項１に記載の電子制御装置。
【請求項５】
前記第２のプロセッサは、
前記第３の演算処理と第４の演算処理を周期的に実行するように構成されていると共に、
前記実行順序の変更を実行しても前記セット試行カウンタの値が前記所定の閾値を超過したときには、前記第３の演算処理と、前記第４の演算処理の実行順序を変更するように構成されている、
ことを特徴とする請求項１に記載の電子制御装置。
【請求項６】
前記第１のプロセッサの動作周波数を変更する機能を備え、
前記第１のプロセッサの動作周波数が変更されたときは、変更した前記実行順序を変更前の実行順序に戻すように構成されている、
ことを特徴とする請求項１に記載の電子制御装置。
【請求項７】
前記第２のプロセッサの動作周波数を変更する機能を備え、
前記第２のプロセッサの動作周波数が変更されたときは、変更した前記実行順序を変更前の実行順序に戻すように構成されている、
ことを特徴とする請求項１に記載の電子制御装置。
【請求項８】
前記第１のプロセッサは、
前記複数の第２の演算処理のうちの少なくとも一つを選択することが出来ないときは、変更要求フラグをセットするように構成され、
前記第２のプロセッサは、
前記変更要求フラグがセットされているときは、前記第３の演算処理と、前記第４の演算処理の実行順序を変更するように構成されている、
ことを特徴とする請求項５に記載の電子制御装置。
【請求項９】
前記電子制御装置は、
前記第１の演算処理と前記第２の演算処理の実行順序を監視する監視処理を備え、
前記第１の演算処理と前記第２の演算処理は、その実行時に自身が実行されたことを示す第１の処理情報と第２の処理情報を夫々前記監視処理へ通知し、
前記監視処理は、前記第１の処理情報と前記第２の処理情報の通知順序が、所定の通知順序と異なる場合には異常と判断する処理であって、前記第２の演算処理と前記第２の演算処理の実行順序を変更すると、前記変更した実行順序に基づき前記所定の通知順序を変更するように構成されている、
ことを特徴とする請求項１に記載の電子制御装置。
【請求項１０】
前記電子制御装置は、
前記セット試行カウンタの値が、所定の値を超過した場合には、異常であると判断するように構成されている、
ことを特徴とする請求項１に記載の電子制御装置。
【請求項１１】
前記電子制御装置は、不揮発性の記憶領域を備え、
変更した実行順序を前記不揮発性の記憶領域に格納するように構成されている、
ことを特徴とする請求項１に記載の電子制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、マルチコアマイクロコントローラにおける共有リソースへの排他制御に伴う演算処理の遅延を回避可能とするようにした電子制御装置に関する。
【背景技術】
【０００２】
自動車や船舶には、エンジンの点火時期やステアリングモータの制御を行う電子制御装置（以下、ＥＣＵと称する）が搭載されている。近年、制御の複雑化に伴う処理量の増加への対応や、消費電力の抑制を目的として、マルチコアマイクロコントローラを実装したＥＣＵが使用されるようになってきた。
【０００３】
マルチコアマイクロコントローラでは、各コアが複数の演算処理を並列して実行する。これらの演算処理がリソースを共有する場合、例えば同じメモリアドレスに各演算処理から同時に書込みアクセスすることによって、意図しないデータ書換えなどが発生する場合がある。このような競合を回避するため、共有リソースへのアクセス時には、一度に一つのコアからのみアクセスできるように、排他制御を行う必要がある。
【０００４】
排他制御の方法として、排他状態を示すロックフラグを用いる方法がある。演算処理は共有リソースへアクセスする前にロックフラグをセットし、アクセス終了後にロックフラグをクリアする。既にロックフラグがセットされている場合には、他のコアが共有リソースへアクセス中であることを示しているため、ロックフラグがクリアされるまで、共有リソースへアクセスを回避することで、排他制御を実現することができる。
【０００５】
ここで、ロックフラグをセットできなかった演算処理は、ロックフラグをセットできるようになるまで、ロックフラグのセット試行を繰り返すスピンロックと呼ばれる方式が知られている。このようにすることで、他の演算処理がロックフラグをクリアすれば直ちにセットし、共有リソースへアクセスすることが可能である。しかし、ロックフラグがクリアされるまでセット試行を継続するため、コアの処理能力が有効に活用できない上、同じコア内の後続の演算処理の実行が遅延するという問題がある。
【０００６】
これを、図２６の例を用いて説明する。図２６は、この発明の背景技術に係る排他制御実行例を示す説明図である。図２６において、コア０では周期ｔ０で演算処理ｅ０が起動し、コア１では周期ｔ１（ｔ０の２倍の長さ）で演算処理ｅ１とそれに続く演算処理ｅ２が起動して、処理を行うＥＣＵにおいて、演算処理ｅ０と演算処理ｅ１内で、共有リソースにアクセスするための排他制御が実行されるものとする。この排他制御の実行タイミングが２つのコアで重複しており、演算処理ｅ０が先にロックフラグをセットし、共有リソースにアクセスしているため、演算処理ｅ１は、演算処理ｅ０がロックフラグをクリアするまでの時間ｔｓの間、自動車や船舶の制御には直接関係のないセット試行のみを繰り返し実行することになる。
【０００７】
その結果、演算処理ｅ１の処理時間が長くなり、コア１の処理負荷が増大する上、演算処理ｅ１内の排他制御後に実行される演算処理ｅ２の開始時間が遅延してしまう。さらにセット試行時間ｔｓの長さは、演算処理ｅ０と演算処理ｅ１の実行タイミングや演算処理ｅ０の排他制御の処理時間に依存するため、制御に関係する実質的な処理時間よりも、セット試行時間ｔｓの方が長くなり、コア１の処理負荷が増大する可能性がある。また、図２６に示すように、排他制御を行う演算処理が周期起動であれば、排他制御処理の重複時間（セット試行時間ｔｓ）も、周期的に発生することになる。
【０００８】
そこでこのロックフラグのセット試行時間を短縮する方法として、例えば特許文献１では、セット試行時間が所定の条件を満たした場合に、演算処理の実行順序を変更する方法が提案されている。特許文献２では、セット試行時間に応じて、演算処理をスリープさせるか、待ち行列の最後に追加して待機させるか選択し、他の演算処理を実行させる方法が提案されている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】ＷＯ２０１２／００１８３５号
【特許文献２】特開２０１１−１７０４１４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら上記特許文献１では、セット試行時間に応じてどのように演算処理の実行順序を変更するかについては開示されていない。従ってセット試行時間、すなわち排他制御処理の重複時間を考慮した実行順序でないために、演算処理の実行順序を変更してもなお排他制御処理が重複し、セット試行時間を低減できない可能性があるという課題がある。
【００１１】
これに対し上記特許文献２では、セット試行時間に応じて演算処理の状態を決定している。しかしスリープや待機から復帰し、排他制御を再開するまでの長さや、その間に実行される別の演算処理の選択方法については開示されておらず、特許文献１と同様に、セット試行時間を低減できない可能性がある、という課題がある。
【００１２】
この発明は、従来の装置における前述のような課題を解決するためになされたものであり、排他制御処理の重複時間であるセット試行時間に応じて、演算処理の実行順序を最適化し、効率的にセット試行時間を短縮することで、共有リソースに対する排他制御を確実に実行しながらも、排他制御によるマイクロコントローラの処理負荷を低減し、処理性能を効率的に利用できる電子制御装置を提供することを目的としている。
【課題を解決するための手段】
【００１３】
この発明による電子制御装置は、
演算処理を実行する第１のプロセッサと、
前記第１のプロセッサの演算処理の実行とは並列に演算処理を実行する第２のプロセッサと、
を備えた電子制御装置であって、
前記第１のプロセッサは、第１の演算処理と複数の第２の演算処理とを所定の実行順序に従って周期的に実行するように構成され、
前記第２のプロセッサは、第３の演算処理を周期的に実行するように構成され、
前記第１の演算処理と前記第３の演算処理は、排他的に共有リソースにアクセスする演算処理であり、
前記第１の演算処理と前記第３の演算処理とのうちの何れか一方が、前記共有リソースに排他的にアクセスしたときにセットされるロックフラグと、
前記第３の演算処理により前記共有リソースが排他的にアクセスされていて前記第１の演算処理が前記ロックフラグをセットできないとき、前記第１の演算処理が前記ロックフラグをセットできるまでセット試行を繰り返すセット試行回数を計数するセット試行カウンタと、
を備え、
前記セット試行カウンタの値が所定の閾値を超過したとき、
前記セット試行カウンタの値に基づいて、前記複数の第２の演算処理のうちの少なくとも一つを選択し、
前記選択された前記第２の演算処理と前記第１の演算処理との実行順序を変更して、前記第１のプロセッサの演算処理を実行するように構成されている、
ことを特徴とするものである。 
【発明の効果】
【００１４】
本発明に係る電子制御装置によれば、セット試行カウンタの値に基づいて、複数の第２の演算処理のうちの少なくとも一つを選択し、選択された第２の演算処理と第１の演算処理との実行順序を変更して、第１のプロセッサの演算処理を実行するようにしているので、複数の演算処理が排他的に共有リソースにアクセスする重複時間を抑制して、排他制御による処理負荷を低減し、マイクロコントローラの処理性能を効率的に利用できる。これにより、例えばメモリのテストなどの最低優先度タスクとして行うような処理を、より長く実行することが可能になり、マイクロコントローラの処理性能を効率的に利用できることに加えて、異常を早く検出できるようになる。
【図面の簡単な説明】
【００１５】
【図１】この発明の実施の形態１に係る電子制御装置の構成図である。
【図２】この発明の実施の形態１に係る電子制御装置における、演算処理時間テーブルを示す図である。
【図３】この発明の実施の形態１に係る電子制御装置における、演算処理ｂによる排他制御処理に関するフローチャートである。
【図４】この発明の実施の形態１に係る電子制御装置における、コアＡで実行される管理処理のタスクＴＡ０の起動タイミングに関するフローチャートである。
【図５】この発明の実施の形態１に係る電子制御装置における、演算処理ａ〜演算処理ｉ、ロックフラグ、セット試行カウンタ、および超過時セット試行回数に関するタイムチャートである。
【図６】この発明の実施の形態２に係る電子制御装置の構成図である。
【図７】この発明の実施の形態２に係る電子制御装置における、実行順序変更前の演算処理実行順序テーブルを示す説明図である。
【図８】この発明の実施の形態２に係る電子制御装置における、コアＡで実行される管理処理のタスクＴＡ０の起動タイミングに関するフローチャートである。
【図９】この発明の実施の形態２に係る電子制御装置における、演算処理ａ〜演算処理ｉ、ロックフラグ、セット試行カウンタ、超過時セット試行回数に関するタイムチャートである。
【図１０】この発明の実施の形態２に係る電子制御装置における、実行順序変更後の演算処理実行順序テーブルを示す説明図である。
【図１１】この発明の実施の形態３に係る電子制御装置の構成図である。
【図１２】この発明の実施の形態３に係る電子制御装置における、実行順序変更前の演算処理実行順序記憶テーブルを示す説明図である。
【図１３】この発明の実施の形態３に係る電子制御装置における、コアＡで実行される管理処理のタスクＴＡ０の起動タイミングにおけるフローチャートである。
【図１４】この発明の実施の形態３に係る電子制御装置における、コアＢで実行される管理処理のタスクＴＢの起動タイミングにおけるフローチャートである。
【図１５】この発明の実施の形態３に係る電子制御装置における、演算処理ａ〜演算処理ｉ、ロックフラグ、セット試行カウンタ、超過時セット試行回数、変更要求フラグのタイムチャートである。
【図１６】この発明の実施の形態３に係る電子制御装置における、１回目の実行順序変更後の演算処理実行順序記憶テーブルを示す説明図である。
【図１７】この発明の実施の形態３に係る電子制御装置における、１回目の実行順序変更後の演算処理実行順序テーブルを示す説明図である。
【図１８】この発明の実施の形態３に係る電子制御装置における、２回目の実行順序変更後の演算処理実行順序記憶テーブルを示す説明図である。
【図１９】この発明の実施の形態４に係る電子制御装置の構成図である。
【図２０】この発明の実施の形態４に係る電子制御装置における、演算処理実行順序初期設定テーブルを示す説明図である。
【図２１】この発明の実施の形態４に係る電子制御装置における、演算処理ｂによる排他制御処理のフローチャートである。
【図２２】この発明の実施の形態４に係る電子制御装置における、コアＡで実行される管理処理のタスクＴＡ０の起動タイミングにおけるフローチャートである。
【図２３】この発明の実施の形態４に係る電子制御装置における、動作周波数変更時の演算処理ａ〜演算処理ｉ、ロックフラグ、セット試行カウンタ、超過時セット試行回数、周波数変更フラグ、コアＢ状態変数のタイムチャートである。
【図２４】この発明の実施の形態４に係る電子制御装置における、コアＢの状態変化時の演算処理ａ〜演算処理ｉ、ロックフラグ、セット試行カウンタ、超過時セット試行回数、周波数変更フラグ、コアＢ状態変数のタイムチャートである。
【図２５】この発明の実施の形態４に係る電子制御装置における、セット試行カウンタのセット試行回数上限値超過時の演算処理ａ〜ｉ、ロックフラグ、セット試行カウンタ、超過時セット試行回数、周波数変更フラグ、コアＢ状態変数のタイムチャートである。
【図２６】この発明の背景技術に係る排他制御実行例を示す説明図である。
【発明を実施するための形態】
【００１６】
実施の形態１．
以下に、この発明の実施の形態１に係る電子制御装置について説明する。図１は、この発明の実施の形態１に係る電子制御装置の構成図であって、自動車に搭載される電子制御装置としてのＥＣＵを示している。図１に於いて、電子制御装置（以下、ＥＣＵと称する）１０１は、ＣＡＮ通信線１０２を介して他のＥＣＵ（図示せず）と接続しており、通信プロトコルＣＡＮに従ってデータの送受信を行うことにより、高度な車両制御を実現している。
【００１７】
ＥＣＵ１０１は、演算を実行する第１のプロセッサとしてのコアＡ１０３と、コアＡの演算の実行と並列に演算を実行する第２のプロセッサとしてのコアＢ１０４と、メモリ１０５と、ＣＡＮ通信線１０２と接続されるＣＡＮ通信インタフェース１２２とを備える。メモリ１０５は、管理処理１０６と、演算処理ａ１０７と、演算処理ｂ１０８と、演算処理ｃ１０９と、演算処理ｄ１１０と、演算処理ｅ１１１と、演算処理ｆ１１２と、演算処理ｇ１１３と、演算処理ｈ１１４と、演算処理ｉ１１５と、共有リソースとしての共有データ１１６と、ロックフラグ１１７と、セット試行カウンタ１１８と、セット試行回数閾値１１９と、超過時セット試行回数１２０と、演算処理時間テーブル１２１とを備えている。
【００１８】
コアＡ１０３は、管理処理１０６と、演算処理ａ１０７〜演算処理ｆ１１２を実行する。コアＢ１０４は、管理処理１０６と、演算処理ｇ１１３〜演算処理ｉ１１５を実行する。ここで、第１のプロセッサとしてのコアＡ１０３で実行される演算処理ｂ１０８は、本願発明に於ける第１の演算処理に相当し、演算処理ａ１０７、演算処理ｃ１０９〜演算処理ｆ１１２は、本願発明における第２の演算処理に相当する。また第２のプロセッサとしてのコアＢ１０４で実行される演算処理ｈ１１４は、本願発明における第３の演算処理に相当し、演算処理ｇ１１３、演算処理ｉ１１５は、本願発明における第４の演算処理に相当する。
【００１９】
管理処理１０６は、演算処理ａ１０７〜演算処理ｉ１１５の起動や終了を管理したり、実行順序の調整を行う。  
【００２０】
演算処理ａ１０７〜演算処理ｉ１１５は、自動車の制御に関わる演算を行う。演算処理ｂ１０８、演算処理ｆ１１２、演算処理ｈ１１４は、排他制御を実行して共有データ１１６にアクセスする。
【００２１】
共有リソースとしての共有データ１１６は、演算処理ｂ１０８と演算処理ｈ１１４から書込みアクセスされる。また、演算処理ｆ１１２から読込みアクセスされる。
【００２２】
ロックフラグ１１７は、演算処理ｂ１０８、演算処理ｆ１１２、演算処理ｈ１１４が、共有データ１１６にアクセスする際に「１」を書込み（セットし）、共有データ１１６へのアクセスを終了する際に「０」を書込む（クリアする）フラグである。
【００２３】
セット試行カウンタ１１８は、初期値は「０」であり、コアＢ１０４の演算処理ｈ１１４がロックフラグ１１７をセットした状態で、コアＡ１０３の演算処理ｂ１０８が、ロックフラグ１１７をセットしようと試行する度にインクリメントされるカウンタである。すなわち、セット試行カウンタ１１８の値としてのカウント値は、第１の演算処理としての演算処理ｂ１０８によるロックフラグ１１７のセットに失敗した回数を指す。
【００２４】
セット試行回数閾値１１９は、セット試行カウンタ１１８との比較に用いられる閾値である。この実施の形態１では、その閾値を「５０」とする。
【００２５】
超過時セット試行回数１２０は、セット試行カウンタ１１８の値がセット試行回数閾値「５０」を超過した場合に、セット試行カウンタ１１８の値を格納するものである。
【００２６】
演算処理時間テーブル１２１は、演算処理ａ１０７〜演算処理ｅ１１１の処理時間を記載したテーブルである。これを図２に示す。すなわち、図２は、この発明の実施の形態１に係る電子制御装置の演算処理時間テーブルを示す図である。演算処理ａ１０７と演算処理ｃ１０９は０．４［ｍｓ］、演算処理ｄ１１０は１．０［ｍｓ］、演算処理ｅ１１１は１．５［ｍｓ］とする。このようにこの実施の形態１では、演算処理ａ１０７、演算処理ｃ１０９、演算処理ｄ１１０、演算処理ｅ１１１の処理時間の概算値が明らかになっているものとする。
【００２７】
ＣＡＮ通信インタフェース１２２は、コアＡ１０３で実行される演算処理ｆ１１２のトリガによって、演算処理ｆ１１２から受け取った共有データ１１６の値を、ＣＡＮメッセージとしてＣＡＮ通信線１０２へ送信する。
【００２８】
続いて、コアＡ１０３、コアＢ１０４による管理処理１０６、演算処理ａ１０７〜演算処理ｉ１１５の実行について説明する。コアＡ１０３では、管理処理１０６が演算処理ａ１０７〜演算処理ｅ１１１を１つのタスクＴＡ０として、周期ｔＡで実行する。また、演算処理ｆ１１２を１つのタスクＴＡ１として、同じ周期ｔＡで実行する。コアＢ１０４では、管理処理１０６が演算処理ｇ１１３〜演算処理ｉ１１５を１つのタスクＴＢとして、周期ｔＢで実行する。この実施の形態１では、周期ｔＢは周期ｔＡの２倍の長さであるとする。また、初期設定（デフォルト）では、タスクＴＡ０では演算処理ａ１０７→演算処理ｂ１０８→演算処理ｃ１０９→演算処理ｄ１１０→演算処理ｅ１１１の順で実行され、タスクＴＢでは演算処理ｇ１１３→演算処理ｈ１１４→演算処理ｉ１１５の順で実行される。コアＡ１０３、コアＢ１０４とも、実行する演算処理が無い間は、バックグラウンドタスク（図１には図示していない）を実行し、メモリ１０５のエラーチェックなどの異常検出処理を低優先度で実行する。
【００２９】
次に、演算処理ｂ１０８が共有データ１１６へアクセスする際に実行する排他制御について説明する。図３は、この発明の実施の形態１に係る電子制御装置の演算処理ｂによる排他制御処理に関するフローチャートである。図３において、演算処理ｂ１０８は、ロックフラグ１１７の値を読込む（ステップＳ３０１）。読込んだロックフラグ１１７の値がセットされているか、クリアされているか、判断する（ステップＳ３０２）。ロックフラグ１１７の値がクリアされている場合には、ロックフラグ１１７をセットし（ステップＳ３０３）し、共有データ１１６へアクセスして値を書込む（ステップＳ３０４）。一方、ロックフラグ１１７がクリアされていない場合には、セット試行カウンタ１１８をインクリメントし（ステップＳ３０７）、ロックフラグ１１７の値の読込み（ステップＳ３０１）に戻る。共有データ１１６への書込みアクセスを完了すると、ロックフラグ１１７をクリアする（ステップＳ３０５）。そしてセット試行カウンタ１１８の値をセット試行回数閾値（「５０」）と比較し（ステップＳ３０６）、セット試行カウンタ１１８の値がセット試行回数閾値以下である場合には、一連の処理を終了する。一方、セット試行カウンタ１１８の値がセット試行回数閾値を超過している場合には、セット試行カウンタ１１８を、超過時セット試行回数１２０へ格納（ステップＳ３０８）した後、セット試行カウンタ１１８をリセットし（ステップＳ３０９）、一連の処理を終了する。
【００３０】
演算処理ｆ１１２と演算処理ｈ１１４も排他制御を実行して共有データ１１６へアクセスするが、図３のフローチャートのうち、セット試行カウンタ１１８のインクリメント（ステップＳ３０７）は実行されず、ロックフラグ１１７がセットされている場合には、ロックフラグ１１７の値の読込み（ステップＳ３０１）に戻る。また、ロックフラグ１１７をクリア（ステップＳ３０５）した後は、セット試行カウンタ１１８に関する処理は実行せず、直ちに処理を終了する。これ以外は演算処理ｂ１０８と同じである。
【００３１】
次に、コアＡ１０３におけるタスクＴＡ０起動時の管理処理１０６について説明する。図４は、この発明の実施の形態１に係る電子制御装置における、コアＡ１０３で実行される管理処理１０６のタスクＴＡ０の起動タイミングに関するフローチャートである。図４において、管理処理１０６は、超過時セット試行回数１２０の値を参照し（ステップＳ４０１）、その値が「０」以下である場合には、実行順序の変更は不要であるため、演算処理ａ１０７〜演算処理ｅ１１１の実行を初期設定の順序で開始し、管理処理１０６を終了する。超過時セット試行回数１２０の値が「０」より大きい場合には、超過時セット試行回数１２０を用いて、セット試行時間を算出する（ステップＳ４０２）。この実施の形態１では、セット試行にかかる処理時間として１０［ｕｓ／回］を用いる。なお、この値はコアＡ１０３の動作周波数と実行コードからの算出結果や、実際の測定結果から求めることができる。
【００３２】
続いて、演算処理時間テーブル１２１を参照し、算出したセット試行時間に最も近い処理時間を持つ演算処理を選択する（ステップＳ４０３）。そして選択した演算処理が、共有データ１１６にアクセスするために排他制御を行う演算処理ｂ１０８の前に実行されるように、実行順序を変更する（ステップＳ４０４）。次に超過時セット試行回数１２０を「０」にリセットし（ステップＳ４０５）、決定した実行順序に従って演算処理ａ１０７〜演算処理ｅ１１１の実行を開始し、管理処理１０６を終了する。
【００３３】
次に、図３と図４に示すフローチャートに従って動作する管理処理１０６と、各演算処理の実行動作と、そのときのロックフラグ１１７と、セット試行カウンタ１１８と、超過時セット試行回数１２０とを、図５のタイムチャートを用いて説明する。図５は、この発明の実施の形態１に係る電子制御装置における、演算処理ａ〜演算処理ｉ、ロックフラグ、セット試行カウンタ、および超過時セット試行回数に関するタイムチャートである。なお、管理処理１０６の処理時間は、図５のタイムチャート上には記載していない。
【００３４】
図５において、時刻ｔ５００でコアＡ１０３のタスクＴＡ０が初回起動すると、管理処理１０６は超過時セット試行回数１２０の値が「０」であることから、実行順序の変更は不要であると判断する。その結果、タスクＴＡ０に含まれる演算処理ａ１０７〜演算処理ｅ１１１が、演算処理ａ１０７→演算処理ｂ１０８→演算処理ｃ１０９→演算処理ｄ１１０→演算処理ｅ１１１の初期設定の順序で実行される。このときコアＢ１０４のタスクＴＢは起動タイミングではないため、ロックフラグ１１７はクリアされており、演算処理ｂ１０８による排他制御では、直ちにロックフラグ１１７をセットして共有データ１１６へ書込むことができる。共有データ１１６への書込みを完了すると、ロックフラグ１１７をクリアし、セット試行カウンタ１１８は「０」のままであることから、排他制御処理を終了する。
【００３５】
時刻ｔ５０１では、コアＡ１０３のタスクＴＡ１が初回起動し、タスクＴＡ１に含まれる演算処理ｆ１１２が実行される。演算処理ｆ１１２も排他制御を行うが、直ちにロックフラグ１１７をセットすることができる。そして演算処理ｆ１１２は共有データ１１６の値を読込むとＣＡＮ通信インタフェース１２２を介してＣＡＮ通信線１０２への送信処理を行う。
【００３６】
時刻ｔ５０２では、コアＢ１０４のタスクＴＢが初回起動し、タスクＴＢに含まれる演算処理ｇ１１３〜演算処理ｉ１１５が、演算処理ｇ１１３→演算処理ｈ１１４→演算処理ｉ１１５の初期設定の順序で実行される。第３の演算処理としての演算処理ｈ１１４の実行開始時には、ロックフラグ１１７はクリアされているため、演算処理ｆ１１２と同様、演算処理ｈ１１４は直ちにロックフラグ１１７をセットすることができる。
【００３７】
続いて、コアＢ１０４で演算処理ｈ１１４を実行中に、時刻ｔ５０３（=ｔ５００+（タスクＴＡ０の周期ｔＡ））になり、コアＡ１０３で再びタスクＴＡ０が起動する。ここでも、管理処理１０６は超過時セット試行回数１２０の値が「０」であることから、実行順序の変更は不要であると判断し、時刻ｔ５００での起動時と同じ順序で、演算処理ａ１０７〜演算処理ｅ１１１が実行される。ただし、共有データ１１６に書込みアクセスする演算処理ｂ１０８の開始時間になっても、コアＢ１０４の演算処理ｈ１１４によりロックフラグ１１７がセットされたままであるため、演算処理ｂ１０８は直ちにロックフラグ１１７をセットすることはできず、図３で示したように、セット試行を繰り返す。ロックフラグ１１７のセットを失敗する毎に、セット試行カウンタ１１８がインクリメントされる。そして時刻ｔ５０４において、セット試行カウンタ１１８の値がセット試行回数閾値（「５０」）を超過する。それでもなお、演算処理ｂ１０８はロックフラグ１１７がクリアされるまでセット試行を繰り返す。
【００３８】
次に、時刻ｔ５０５において、演算処理ｈ１１４が共有データ１１６への書込みを終了し、ロックフラグ１１７をクリアすると、セット試行を繰り返していた演算処理ｂ１０８はロックフラグ１１７をセットできるようになる。このとき、セット試行カウンタ１１８はこの実施の形態１では「９０」をセットするものとする。そして共有データ１１６へ書込みアクセスし、ロックフラグ１１７をクリア後、セット試行カウンタ１１８の値（「９０」）の方がセット試行回数閾値（「５０」）より大きいことから、超過時セット試行回数１２０にセット試行カウンタ１１８の値（「９０」）を格納し、セット試行カウンタ１１８をリセットする。そして演算処理ｂ１０８が終了すると、演算処理ｃ１０９〜演算処理ｅ１１１が実行される。
【００３９】
起動するタスクＴＡ１の演算処理ｆ１１２の処理内容は、時刻ｔ５０１と同じであるため、省略する。
【００４０】
次に、時刻ｔ５０６において再びタスクＴＡ０が起動する。ここで管理処理１０６は、超過時セット試行回数１２０の値が「９０」であり、「０」より大きいことから、超過時セット試行回数１２０（「９０」）を用いてセット試行時間を算出する。セット試行時間は［１０［μｓ］×９０＝０．９［ｍｓ］］と算出することができる。そして図２の演算処理時間テーブル１２１を参照し、セット試行時間０．９［ｍｓ］に最も近い処理時間を持つ演算処理を検索する。これにより、処理時間が１．０［ｍｓ］である演算処理ｄ１１０が選択される。そこで演算処理ｂ１０８の前に、選択した演算処理ｄ１１０を実行するように、実行順序を変更する。すなわちタスクＴＡ０は、時刻ｔ５００、ｔ５０３での起動時には、演算処理ａ１０７→演算処理ｂ１０８→演算処理ｃ１０９→演算処理ｄ１１０→演算処理ｅ１１１の順に実行されていたが、時刻ｔ５０６以降は、演算処理ａ１０７→演算処理ｄ１１０→演算処理ｂ１０８→演算処理ｃ１０９→演算処理ｅ１１１の順に実行されることになる。次に超過時セット試行回数１２０を「０」にリセットし、変更した実行順序に従って、演算処理ａ１０７〜演算処理ｅ１１１の実行を開始する。時刻ｔ５０６でのタスクＴＡ０の起動中は、コアＢ１０４のタスクＴＢは起動タイミングではないため、演算処理ｂ１０８は直ちにロックフラグ１１７をセットして共有データ１１６へ書込むことができる。よって、タスクＴＡ０の総処理時間は、時刻ｔ５００に起動したときの総処理時間と同じになる。
【００４１】
次に、時刻ｔ５０７（=ｔ５０２+（タスクＴＢの周期ｔＢ））において、コアＢ１０４のタスクＴＢが起動する。時刻ｔ５０２と同様、演算処理ｈ１１４が直ちにロックフラグ１１７をセットすることができる。
【００４２】
次に、時刻ｔ５０８（=ｔ６+（タスクＴＡ０の周期ｔＡ））において、タスクＴＡ０が起動する。管理処理１０６は超過時セット試行回数１２０の値が「０」であることから、実行順序の変更は不要であると判断し、時刻ｔ５０６で決定した実行順序で、演算処理ａ１０７〜演算処理ｅ１１１の実行を開始する。これにより、演算処理ｂ１０８の前に演算処理ｄ１１０が実行される。従って時刻ｔ５０３での起動時と異なり、時刻ｔ５０９で演算処理ｈ１１４がロックフラグ１１７をクリアして処理を終了した後、時刻ｔ５１０に演算処理ｂ１０８が起動するようになるため、演算処理ｂ１０８はセット試行を繰り返すことなく、ロックフラグ１１７をセットできる。このようにすることで、タスクＴＡ０は、周期ｔＡを守りながら演算処理ｇ１１３との排他制御を避けることができ、総処理時間は時刻ｔ５００や時刻ｔ５０６に起動したときの総処理時間と同じとなり、時刻ｔ５０３に起動したときよりも、セット試行時間０．９ ｍｓ分短縮することができる。
【００４３】
このように、ＥＣＵ１０１は、演算処理ｂ１０８のセット試行回数が所定の回数を超過した場合に、そのセット試行時間に最も近い処理時間を持つ演算処理ｄ１１０を演算処理ｂ１０８の前に実行するように、実行順序を変更する。これにより、実行順序を変更する前と比べて、演算処理ｂ１０８の処理時間をセット試行時間分短縮することができ、結果的にタスクＴＡ０の総処理時間が短くなる。従って、排他制御によるコアＡ１０３の処理負荷を低減し、メモリ１０５のエラーチェック等の異常検出機能を備えるバックグラウンドタスクの処理時間を長く実行可能となり、異常が存在する場合に早く検出することができるようになる。
【００４４】
また、この実施の形態１によれば、コアＡ１０３のどの演算処理が共有データ１１６へアクセスするかのみ把握しておけば、コアＢ１０４でどのような演算処理が実行されるか把握していなくても、適切に実行順序を変更することができ、排他制御を達成しながら、セット試行時間を抑制し、排他制御に関わる処理時間を短くすることができる。
【００４５】
なお、この実施の形態１では、演算処理時間テーブル１２１にはあらかじめ演算処理ｂ１０８を除く演算処理ａ１０７〜演算処理ｅ１１１の処理時間が記載されているものとしたが、実行中に計測し、記録するものであってもよい。
【００４６】
また、この実施の形態１では、コアＡ１０３のタスクＴＡ０に含まれる演算処理ｂ１０８を除く全ての演算処理ａ１０７〜演算処理ｅ１１１を、実行順序の変更に対応可能としたが、実行順序を変更してはならない演算処理は、変更対象から除外するものであってもよい。
【００４７】
また、この実施の形態１では、セット試行回数閾値を「５０」に設定したが、「０」として、排他制御の重複が発生する場合には、常に実行順序を変更するものであってもよい。
【００４８】
実施の形態２．
次に、この発明の実施の形態２に係る電子制御装置について説明する。図６は、この発明の実施の形態２に係る電子制御装置の構成図であって、自動車に搭載される電子制御装置としてのＥＣＵを示している。図６において、図１と同一、又は相当部分には同一符号を付してあり、その部分の説明は省略する。ＥＣＵ１０１は、メモリ１０５内に、演算処理実行順序テーブル６０４と演算処理実行ＦＩＦＯ６０５を保持している。また、メモリ１０５の他に、不揮発メモリ６０３を備える。
【００４９】
演算処理ａ１０７〜演算処理ｅ１１１は、自動車の制御に関わる演算に加えて、実行毎に自身のＩＤ（ａ〜ｅ）を演算処理実行ＦＩＦＯ６０５へ格納する。演算処理ｆ１１２は、共有データ１１６への読込みアクセス、ＣＡＮメッセージの送信トリガの他、制御フロー監視機能を備え、演算処理実行順序テーブル６０４と演算処理実行ＦＩＦＯ６０５を参照して、演算処理ａ１０７〜演算処理ｅ１１１が正しい実行順序で実行されているか監視する。演算処理ｆ１１２は、実行毎に演算処理実行ＦＩＦＯ６０５を参照し、格納されている値が、演算処理実行順序テーブル６０４と等しいか否かを確認し、等しくない場合には異常と判断する。
【００５０】
演算処理実行順序テーブル６０４は、演算処理ａ１０７〜演算処理ｅ１１１の実行順序（インデックス）を記載したテーブルである。図７は、この発明の実施の形態２に係る電子制御装置における、実行順序変更前の演算処理実行順序テーブルを示す説明図であって、初期設定（デフォルト）での演算処理実行順序テーブル６０４の内容を示している。排他制御を実行する第１の演算処理としての演算処理ｂ１０８を常に基準（「０」）とし、演算処理ａ１０７は演算処理ｂ１０８よりひとつ前の「−１以下」、演算処理ｃ１０９は演算処理ｂ１０８の次に実行されるため「１」、演算処理ｄ１１０は演算処理ｂ１０８の２つ後に実行されるため「２」、演算処理ｅ１１１は演算処理ｂ１０８の３つ後に実行されるため「３以上」とする。
【００５１】
演算処理実行ＦＩＦＯ６０５は、演算処理ａ１０７〜演算処理ｅ１１１が実行される毎に、自身のＩＤ（ａ〜ｅ）を格納するバッファである。演算処理ａ１０７〜演算処理ｅ１１１の実行順に格納されるため、初期設定の実行順序で正しく実行された場合、演算処理ａ１０７→演算処理ｂ１０８→演算処理ｃ１０９→演算処理ｄ１１０→演算処理ｅ１１１の順に値が格納される。
【００５２】
不揮発メモリ６０３は、リセットなどにより電源を喪失しても、値を保持することが可能なメモリ１０５である。
【００５３】
第１のプロセッサとしてのコアＡ１０３、第２のプロセッサとしてのコアＢ１０４による管理処理１０６、演算処理ａ１０７〜演算処理ｉ１１５の実行については実施の形態１と同じであるため省略する。
【００５４】
第１の演算処理としての演算処理ｂ１０８、第２の演算処理としての演算処理ｆ１１２、第３の演算処理としての演算処理ｈ１１４が、共有リソースとしての共有データ１１６へアクセスする際に実行する排他制御は、実施の形態１と同じであるため省略する。
【００５５】
次に、コアＡ１０３におけるタスクＴＡ０の起動時の管理処理１０６を図８のフローチャートを用いて説明する。図８は、この発明の実施の形態２に係る電子制御装置における、コアＡ１０３で実行される管理処理１０６のタスクＴＡ０の起動タイミングに関するフローチャートである。図８において、図４と同一の処理には同一符号を付してあり、これについては説明を省略する。管理処理１０６は、超過時セット試行回数１２０の値が「０」より大きい場合には、超過時セット試行回数１２０を用いて、入れ替え対象とする演算処理のインデックスを算出する（ステップＳ８０１）。この実施の形態２では、下記の式（１）を用いて入れ替え対象とする演算処理のインデックスを算出する。なお、除算結果は切り捨てとする。
（入れ替え対象とする演算処理のインデックス）
=（超過時セット試行回数１２０） / ５０ + １  ・・・・・式（１）
【００５６】
続いて、演算処理実行順序テーブル６０４を参照し、算出したインデックスを持つ演算処理が存在するか確認する（ステップＳ８０２）。存在する場合には、算出したインデックスを持つ演算処理と、共有データ１１６にアクセスするために排他制御を行う演算処理ｂ１０８の実行順序を入れ替える（ステップＳ８０３）。そして演算処理ｂ１０８を基準として、入れ替えた実行順序に従うように、演算処理実行順序テーブル６０４のインデックスを更新する（ステップＳ８０４）。一方、算出したインデックスを持つ演算処理が存在しない場合には、実行順序の入れ替えは行わない。
【００５７】
次に、図８のフローチャートに従って動作する管理処理１０６と、演算処理の実行動作と、そのときのロックフラグ１１７と、セット試行カウンタ１１８と、超過時セット試行回数１２０を、図９のタイムチャートを用いて説明する。図９は、この発明の実施の形態２に係る電子制御装置における、演算処理ａ〜演算処理ｉ、ロックフラグ、セット試行カウンタ、超過時セット試行回数に関するタイムチャートである。なお、管理処理１０６の処理時間は、このタイムチャート上には記載していない。
【００５８】
図９に於いて、時刻ｔ５００から時刻ｔ５０５までの動作は、時刻ｔ５０１での演算処理ｆ１１２を除き、実施の形態１と同じである。演算処理ｆ１１２は、排他制御を伴う共有データ１１６の読込みや、ＣＡＮメッセージの送信に加えて、演算処理実行順序テーブル６０４と演算処理実行ＦＩＦＯ６０５を参照して、演算処理ａ１０７〜ｅ１１１が正しい実行順序で実行されているか監視する。ここでは、時刻ｔ５００で起動したタスクＴＡ０の演算処理ａ１０７〜演算処理ｅ１１１の実行順序は、演算処理実行順序テーブル６０４と等しいため、演算処理ｆ１１２は正常であると判断する。
【００５９】
時刻ｔ９００（=ｔ５０３+（タスクＴＡ０の周期ｔＡ））では、再びタスクＴＡ０が起動する。ここで管理処理１０６は、超過時セット試行回数１２０の値が「９０」であり、「０」より大きいことから、超過時セット試行回数１２０（「９０」）と前述の式（１）を用いて、入れ替え対象とする演算処理のインデックスを算出する。インデックスは「２」と算出することができる。そして図７の演算処理実行順序テーブル６０４を参照し、インデックス２を持つ演算処理が存在するか確認する。そこで演算処理ｄ１１０がインデックス「２」を持つため、演算処理ｂ１０８と演算処理ｄ１１０の実行順序を入れ替え、図１０に示すように演算処理実行順序テーブル６０４のインデックスを更新する。すなわち図１０は、この発明の実施の形態２に係る電子制御装置における、実行順序変更後の演算処理実行順序テーブルを示す説明図である。タスクＴＡ０は、時刻ｔ９００以降は、演算処理ａ１０７→演算処理ｄ１１０→演算処理ｃ１０９→演算処理ｂ１０８→演算処理ｅ１１１の順に実行されることになる。次に、超過時セット試行回数１２０を「０」にリセットし、変更した実行順序に従って、演算処理ａ１０７〜演算処理ｅ１１１の実行を開始する。時刻ｔ９００でのタスクＴＡ０の起動中は、コアＢ１０４のタスクＴＢは起動タイミングではないため、演算処理ｂ１０８は直ちにロックフラグ１１７をセットして共有データ１１６へ書込むことができる。よって、タスクＴＡ０の総処理時間は、時刻ｔ５００に起動したときの総処理時間と同じになる。
【００６０】
次に、時刻ｔ９０１において、コアＡ１０３のタスクＴＡ１が起動する。時刻ｔ５０１の場合と同様、演算処理ｆ１１２は演算処理実行順序テーブル６０４と演算処理実行ＦＩＦＯ６０５を参照して、演算処理ａ１０７〜演算処理ｅ１１１が正しい実行順序で実行されているか監視する。時刻ｔ９００で起動したタスクＴＡ０の演算処理ａ１０７〜演算処理ｅ１１１の実行順序は、時刻ｔ５００やｔ５０３からは変更されているが、時刻ｔ９００での実行順序の変更と同時に、演算処理実行順序テーブル６０４も更新されたため、演算処理ａ１０７〜演算処理ｅ１１１の実行順序と演算処理実行順序テーブル６０４の示す実行順序は等しくなる。これにより演算処理ｆ１１２は正常であると判断することができる。
【００６１】
次に、時刻ｔ９０２（=ｔ５０２+（タスクＴＢの周期ｔＢ））において、コアＢ１０４のタスクＴＢが起動する。時刻ｔ５０２の場合と同様、演算処理ｈ１１４が直ちにロックフラグ１１７をセットすることができる。
【００６２】
次に、時刻ｔ９０３（=ｔ９００+（タスクＴＡ０の周期ｔＡ））において、タスクＴＡ０が起動する。管理処理１０６は超過時セット試行回数１２０の値が「０」であることから、実行順序の変更は不要であると判断し、時刻ｔ９００で決定した実行順序で、演算処理ａ１０７〜演算処理ｅ１１１の実行を開始する。従って、時刻ｔ５０３での起動時と異なり、時刻ｔ９０４で演算処理ｈ１１４がロックフラグ１１７をクリアして処理を終了した後、時刻ｔ９０５に演算処理ｂ１０８が開始されるようになるため、演算処理ｂ１０８はセット試行を繰り返すことなく、ロックフラグ１１７をセットできる。このようにすることで、タスクＴＡ０は、周期ｔＡを守りながら演算処理ｇ１１３との排他制御を避けることができ、総処理時間は、時刻ｔ５００や時刻ｔ９００に起動したときの総処理時間と同じとなり、時刻ｔ５０３に起動したときよりも、セット試行時間分、短縮することができる。
【００６３】
次に、時刻ｔ９０６において、バックグラウンドタスクがメモリ１０５エラーを検出し、メモリ１０５のリセットが必要になったとする。そこで管理処理１０６は、ｔ９００で更新した演算処理実行順序テーブル６０４を不揮発メモリ６０３に書込む。管理処理１０６は処理を再開する際に不揮発メモリ６０３を参照し、演算処理実行順序テーブル６０４へコピーすることによって、再開後の初回のタスクＴＡ０の起動時から、ｔ９００で変更した実行順序に従って演算処理ａ１０７〜演算処理ｅ１１１を実行することができるようになる。
【００６４】
このように、ＥＣＵ１０１は、演算処理ｂ１０８のセット試行回数が所定の回数を超過した場合に、その超過回数に相当するインデックスを持つ演算処理ｄ１１０を、演算処理ｂ１０８の実行順序と入れ替える。これにより、実施の形態１と同様に、実行順序を変更する前と比べて、演算処理ｂ１０８の処理時間をセット試行時間分短縮することができる。従って、排他制御によるコアＡ１０３の処理負荷を低減し、メモリ１０５のエラーチェック等の異常検出機能を備えるバックグラウンドタスクの処理時間を長く実行可能となり、異常が存在する場合に早く検出することができるようになる。
【００６５】
また、この実施の形態２によれば、入れ替え対象とする演算処理の処理時間が明らかになっていなくても、実行順序を変更することができ、演算処理の処理時間の測定といった開発工数を削減することができる。
【００６６】
さらにまた、この実施の形態２では、ＥＣＵ１０１が不揮発メモリ６０３を備え、演算処理の実行順序を不揮発メモリ６０３に書込むことで、メモリ１０５リセットや電源喪失によって揮発するメモリ１０５がクリアされた後も、変更後の演算処理の実行順序に従って演算処理を実行することができ、リセットのたびに、排他制御処理の実行タイミングの重複を検出して実行順序を変更する、という処理を行わずに済み、総処理時間を短縮することができる。
【００６７】
さらにまた、ＥＣＵ１０１は演算処理実行ＦＩＦＯ６０５を備え、演算処理実行順序テーブル６０４と比較することにより、演算処理の実行順序が正しいか否かを判断する。演算処理実行順序テーブル６０４を用いることで、排他制御の実行タイミングの重複により演算処理の実行順序が変更されても、演算処理実行順序テーブル６０４も変更された実行順序を示すように更新されるため、演算処理の実行順序を常に監視することができる。
【００６８】
なお、この実施の形態２では、排他制御の実行タイミングが重複した演算処理を、式（１）に従って、常に後続の演算処理の実行順序と変更するように、演算処理実行順序テーブル６０４を設定していた。ただし、本発明はこの式に限定されるものではなく、前の演算処理の実行順序とも変更可能なより複雑な条件式を用いるものであってもよい。
【００６９】
実施の形態３．
次に、この発明の実施の形態３に係る電子制御装置について説明する。図１１は、この発明の実施の形態３に係る電子制御装置の構成図であって、自動車に搭載される電子制御装置としてのＥＣＵを示している。図１１において、図６と同一、相当部分には同一符号を付してあり、その部分の説明を省略する。ＥＣＵ１０１は、メモリ１０５内に、演算処理実行順序記憶テーブル１１０１と、変更要求フラグ１１０２を保持している。
【００７０】
演算処理実行順序記憶テーブル１１０１は、演算処理ａ１０７〜演算処理ｅ１１１の実行順序の変更を繰り返した場合に、その中で超過時セット試行回数１２０が最小値であったときの演算処理実行順序（最小時実行順序）と、最小超過時セット試行回数１２０を記憶するテーブルである。演算処理の実行前の初期設定では、図１２に示すように、何も記載されていない。すなわち、図１２は、この発明の実施の形態３に係る電子制御装置における、実行順序変更前の演算処理実行順序記憶テーブルを示す説明図である。
【００７１】
変更要求フラグ１１０２は、タスクＴＢの演算処理の実行順序変更を要求するために、コアＡ１０３の管理処理１０６がセットするフラグである。コアＢ１０４の管理処理１０６はタスクＴＢ起動時にこのフラグを参照する。
【００７２】
コアＡ１０３、コアＢ１０４による管理処理１０６、演算処理ａ１０７〜演算処理ｉ１１５の実行方法は実施の形態１と同じであるため省略する。
【００７３】
演算処理ｂ１０８、演算処理ｆ１１２、演算処理ｈ１１４が共有データ１１６へアクセスする際に実行する排他制御は、実施の形態１と同じであるため省略する。
【００７４】
次に、コアＡ１０３におけるタスクＴＡ０起動時の管理処理１０６を図１３のフローチャートを用いて説明する。図１３は、この発明の実施の形態３に係る電子制御装置における、コアＡで実行される管理処理のタスクＴＡ０の起動タイミングにおけるフローチャートである。図１３において、図８と同一の処理には同一符号を付しており、その部分の説明を省略する。図１３において、管理処理１０６は、超過時セット試行回数１２０の値が「０」より大きい場合には、演算処理実行順序記憶テーブル１１０１の最小超過時セット試行回数１２０と、現在の超過時セット試行回数１２０と比較し（ステップＳ１３０１）、現在の超過時セット試行回数１２０の方が小さければ、演算処理実行順序記憶テーブル１１０１に、現在の演算処理実行順序と、現在の超過時セット試行回数１２０を格納する（ステップＳ１３０３）。
【００７５】
現在の超過時セット試行回数１２０の方が演算処理実行順序記憶テーブル１１０１の最小超過時セット試行回数１２０より小さくない場合には、演算処理実行順序記憶テーブル１１０１の最小超過時セット試行回数１２０に値が記載されているか判断し（ステップＳ１３０２）、演算処理実行順序記憶テーブル１１０１の最小超過時セット試行回数１２０に値が記載されている、すなわち現在の超過時セット試行回数１２０の方が大きい場合には、演算処理の実行順序の変更は不要であると判断し、超過時セット試行回数１２０のリセットのみ実行する（ステップＳ４０５）。演算処理実行順序記憶テーブル１１０１の最小超過時セット試行回数１２０に値が未記載である場合には、現在の超過時セット試行回数１２０の方が小さい場合と同様に、演算処理実行順序記憶テーブル１１０１に、現在の演算処理実行順序と、現在の超過時セット試行回数１２０を格納する（ステップＳ１３０３）。
【００７６】
続いて、インデックスの算出を経て（ステップＳ８０１）、算出したインデックスを持つ演算処理が存在しない場合には、実行順序を変更できないため、管理処理１０６は変更要求フラグ１１０２をセットし、超過時セット試行回数１２０のリセットを実行する（ステップＳ４０５）。
【００７７】
次に、コアＢ１０４におけるタスクＴＢ起動時の管理処理１０６を図１４のフローチャートを用いて説明する。図１４は、この発明の実施の形態３に係る電子制御装置における、コアＢで実行される管理処理のタスクＴＢの起動タイミングにおけるフローチャートである。図14において、管理処理１０６は、変更要求フラグ１１０２がセットされているか確認し（ステップＳ１４０１）、セットされている場合には、排他制御を行う第３の演算処理としての演算処理ｈ１１４と、その前に実行される第４の演算処理としての演算処理ｇ１１３の実行順序を入れ替え(ステップＳ１４０２)、変更要求フラグ１１０２をクリアし（ステップＳ１４０３）、変更した実行順序に従って演算処理ｇ１１３〜ｉ１１５の実行を開始し、管理処理１０６を終了する。一方、変更要求フラグ１１０２がセットされていない場合には、実行順序の変更は不要であるため、初期設定された実行順序に従って演算処理ｇ１１３〜ｉ１１５の実行を開始し、管理処理１０６を終了する。なお、演算処理ｉ１１５は、演算処理ｇ１１３とともにこの発明における第４の演算処理に相当する
【００７８】
次に、図１３と図１４のフローチャートに従って動作する管理処理１０６、演算処理の実行動作と、そのときのロックフラグ１１７と、セット試行カウンタ１１８と、超過時セット試行回数１２０と、変更要求フラグ１１０２を、図１５のタイムチャートを用いて説明する。図１５は、この発明の実施の形態３に係る電子制御装置における、演算処理ａ〜演算処理ｉ、ロックフラグ、セット試行カウンタ、超過時セット試行回数、変更要求フラグのタイムチャートである。なお、管理処理１０６の処理時間は、このタイムチャート上には記載していない。
【００７９】
図１５において、時刻ｔ５００から時刻ｔ５０４までの動作は、実施の形態１と同じであるため省略する。
【００８０】
時刻ｔ１５００において、演算処理ｈ１１４が共有データ１１６への書込みを終了し、ロックフラグ１１７をクリアすると、セット試行を繰り返していた演算処理ｂ１０８はロックフラグ１１７をセットできるようになる。このとき、セット試行カウンタ１１８は「２８０」を指しているものとする。そして共有データ１１６へ書込みアクセスし、ロックフラグ１１７をクリア後、セット試行カウンタ１１８の値（「２８０」）の方がセット試行回数閾値１１９（「５０」）より大きいことから、超過時セット試行回数１２０にセット試行カウンタ１１８の値（「２８０」）を格納し、セット試行カウンタ１１８をリセットする。そして演算処理ｂ１０８が終了すると、演算処理ｃ１０９〜演算処理ｅ１１１が実行される。
【００８１】
次に、時刻ｔ１５０１（=ｔ５０３+（タスクＴＡ０の周期ｔＡ））において、再びタスクＴＡ０が起動する。ここで管理処理１０６は、超過時セット試行回数１２０の値が「２８０」であり、「０」より大きいことから、図１２の演算処理実行順序記憶テーブル１１０１の最小超過時セット試行回数１２０と現在の超過時セット試行回数１２０を比較する。このとき、最小超過時セット試行回数１２０が記載されていないことから、図１６に示すように、現在の演算処理実行順序（ａ→ｂ→ｃ→ｄ→ｅ）と、現在の超過時セット試行回数１２０（「２８０」）を格納して更新する。すなわち、図１６は、この発明の実施の形態３に係る電子制御装置における、１回目の実行順序変更後の演算処理実行順序記憶テーブルを示す説明図である。
【００８２】
次に超過時セット試行回数１２０（「２８０」）と前述の式（１）を用いて、入れ替え対象とする演算処理のインデックスを算出する。インデックスは「６」と算出することができる。そして図７の演算処理実行順序テーブル６０４を参照し、インデックス６を持つ演算処理が存在するか確認する。そこで演算処理ｅ１１１がインデックス「３以上」であるため、演算処理ｂ１０８と演算処理ｅ１１１の実行順序を入れ替え、図１７に示すように演算処理実行順序テーブル６０４のインデックスを更新する。すなわち図１７は、この発明の実施の形態３に係る電子制御装置における、１回目の実行順序変更後の演算処理実行順序テーブルを示す説明図である。
【００８３】
タスクＴＡ０は、時刻ｔ１５０１以降は、演算処理ａ１０７→演算処理ｅ１１１→演算処理ｃ１０９→演算処理ｄ１１０→演算処理ｂ１０８の順に実行されることになる。次に、超過時セット試行回数１２０を「０」にリセットし、変更した実行順序に従って、演算処理ａ１０７〜演算処理ｅ１１１の実行を開始する。時刻ｔ１５０１でのタスクＴＡ０の起動中は、コアＢ１０４のタスクＴＢは起動タイミングではないため、演算処理ｂ１０８は直ちにロックフラグ１１７をセットして共有データ１１６へ書込むことができる。よって、タスクＴＡ０の総処理時間は時刻ｔ５００に起動したときの総処理時間と同じになる。
【００８４】
さらに次の周期である時刻ｔ１５０２において、タスクＴＡ０が起動する。管理処理１０６は超過時セット試行回数１２０の値が「０」であることから、実行順序の変更は不要であると判断し、時刻ｔ１５０１で決定した実行順序で演算処理ａ１０７〜演算処理ｅ１１１の実行を開始する。しかし、演算処理ｈ１１４が終了する前に、演算処理ｂ１０８の処理が開始されるため、演算処理ｂ１０８はセット試行を繰り返し、時刻ｔ１５０３で再びセット試行カウンタ１１８の値がセット試行回数閾値１１９（「５０」）を超過する。それでもなお、演算処理ｂ１０８はロックフラグ１１７がクリアされるまでセット試行を繰り返す。
【００８５】
次に、時刻ｔ１５０４において、演算処理ｈ１１４が共有データ１１６への書込みを終了すると、演算処理ｂ１０８はロックフラグ１１７をセットできるようになる。このとき、セット試行カウンタ１１８は「１００」を指しているものとする。そして共有データ１１６へ書込みアクセスし、ロックフラグ１１７をクリア後、セット試行カウンタ１１８の値（「１００」）の方がセット試行回数閾値１１９（「５０」）よりもまだ大きいことから、超過時セット試行回数１２０にセット試行カウンタ１１８の値（「１００」）を格納し、セット試行カウンタ１１８をリセットする。
【００８６】
次に、時刻ｔ１５０５において、タスクＴＡ０が起動する。管理処理１０６は、超過時セット試行回数１２０の値が「１００」であり、「０」より大きいことから、図１６の演算処理実行順序記憶テーブル１１０１の最小超過時セット試行回数１２０と現在の超過時セット試行回数１２０を比較する。このとき、最小超過時セット試行回数１２０は「２８０」であり、現在の超過時セット試行回数１２０の「１００」の方が小さいことから、図１８に示すように、現在の演算処理実行順序（ａ→ｅ→ｃ→ｄ→ｂ）と、現在の超過時セット試行回数１２０（「１００」）を格納して更新する。すなわち、図１８は、この発明の実施の形態３に係る電子制御装置における、２回目の実行順序変更後の演算処理実行順序記憶テーブルを示す説明図である。
【００８７】
次に超過時セット試行回数１２０（「１００」）と前述の式（１）を用いて、入れ替え対象とする演算処理のインデックスを算出する。インデックスは「３」と算出される。そして図１７の演算処理実行順序テーブル６０４を参照し、インデックス「３」を持つ演算処理が存在するか確認する。しかし、インデックス「３」を持つ演算処理が存在しないことから、管理処理１０６は変更要求フラグ１１０２をセットし、超過時セット試行回数１２０を「０」にリセットして、タスクＴＡ０の演算処理の実行順序変更は行わずに、演算処理の実行を開始する。時刻ｔ１５０５でのタスクＴＡ０の起動中は、コアＢ１０４のタスクＴＢは起動タイミングではないため、演算処理ｂ１０８はステップＳ３０２から直ちにステップＳ３０３に進み、ロックフラグ１１７をセットできる。よって、タスクＴＡ０の総処理時間は、時刻ｔ０に起動したときの総処理時間と同じになる。
【００８８】
次に、時刻ｔ１５０６において、コアＢ１０４のタスクＴＢが起動する。管理処理１０６は、変更要求フラグ１１０２がセットされていることから、排他制御を行う第３の演算処理としての演算処理ｈ１１４と、その前に実行される第４の演算処理としての演算処理ｇ１１３の実行順序を入れ替える。すなわち、タスクＴＢでは時刻ｔ１５０６以降は、演算処理ｈ１１４→演算処理ｇ１１３→演算処理ｉ１１５の順に実行されることになる。そして変更要求フラグ１１０２をクリアし、変更した実行順序に従って演算処理ｇ１１３〜ｉ１１５の実行を開始し、管理処理１０６を終了する。
【００８９】
次に、時刻ｔ１５０７において、タスクＴＡ０が起動する。タスクＴＡ０の演算処理ａ１０７〜演算処理ｅ１１１の実行順序は時刻ｔ１５０２起動時と同じであるが、時刻ｔ１５０６でタスクＴＢの演算処理ｇ１１３〜演算処理ｉ１１５の実行順序を変更したことにより、演算処理ｈ１１４が終了した後に、演算処理ｂ１０８の処理が開始されるようになったため、演算処理ｂ１０８はセット試行を繰り返すことなく、ロックフラグ１１７をセットすることができる。
【００９０】
このように、ＥＣＵ１０１は、それまで変更された実行順序のうち、超過時セット試行回数１２０が最も小さい値であるときの実行順序を記憶する演算処理実行順序記憶テーブル１１０１を備え、演算処理ｂ１０８のセット試行回数が所定の回数を常に超過し、かつそれ以上実行順序を変更できなくなった場合に、この演算処理実行順序記憶テーブル１１０１に保持されている実行順序を、それ以降の演算処理の実行順序とする。このようにすることで、複数の実行順序のパターンを実行してもなお、セット試行回数が所定の時間を超過してしまう場合であっても、それらの実行順序パターンのうち、セット試行回数が最小である最適な実行順序を選択することができ、排他制御処理の重複時間を短縮してコアＡ１０３の処理負荷を低減し、バックグラウンドタスクの処理時間を長く実行可能となる。
【００９１】
さらに、ＥＣＵ１０１では、コアＡ１０３の排他制御処理の重複時間が所定の時間を超過してしまう場合には、同じ共有データ１１６にアクセスするコアＢ１０４で実行される演算処理ｈ１１４の実行タイミングを変更する。これにより、コアＡ１０３の演算処理ａ１０７〜演算処理ｅ１１１の実行順序のみを最適化する場合と比較して、さらにセット試行時間を短縮することができ、メモリ１０５のエラーチェック等の異常検出機能を備えるバックグランドタスクの処理時間を長く実行可能である。
【００９２】
実施の形態４．
次に、この発明の実施の形態４に係る電子制御装置について説明する。図１９は、この発明の実施の形態４に係る電子制御装置の構成図であって、自動車に搭載される電子制御装置としてのＥＣＵを示している。
【００９３】
図１９において、図１１と同一、相当部分には同一符号を付しており、その部分の説明を省略する。ＥＣＵ１０１は、メモリ１０５内に、周波数変更フラグ１９０１、演算処理実行順序初期設定テーブル１９０２、コアＢ状態変数１９０３、セット試行回数上限値１９０４を保持している。
【００９４】
第２の演算処理としての演算処理ｆ１１２は、共有データ１１６への読込みアクセス、ＣＡＮメッセージの送信トリガの他、演算結果に応じてコアＡ１０３の動作周波数を変更する機能を備える。処理負荷が低いと判断した場合には、コアＡ１０３の動作周波数を下げることで、消費電力を抑制し、逆に処理負荷が高いと判断した場合には、コアＡ１０３の動作周波数を上げることで、処理負荷がコアＡ１０３の処理能力を超えないようにすることができる。
【００９５】
周波数変更フラグ１９０１は、演算処理ｆ１１２が動作周波数を変更するとセットされるフラグである。
【００９６】
演算処理実行順序初期設定テーブル１９０２は、演算処理ａ１０７〜演算処理ｅ１１１のデフォルトの実行順序を格納しているテーブルである。すなわち、図２０は、この発明の実施の形態４に係る電子制御装置における、演算処理実行順序初期設定テーブル１９０２を示す説明図である。図２０に示すように、この実施の形態４では、演算処理ａ１０７→演算処理ｂ１０８→演算処理ｃ１０９→演算処理ｄ１１０→演算処理ｅ１１１の初期設定の実行順序が記載されている。
【００９７】
コアＢ状態変数１９０３は、コアＢ１０４の状態を示す変数である。コアＢ状態変数１９０３は、スタートアップ（０）、ノーマル（１）、シャットダウン（２）、エラー（３）の４つの状態のうちの何れかを示す。コアＢ１０４の演算処理ｇ１１３〜演算処理ｉ１１５実行によりコアＢ１０４の状態が変化し、コアＢ状態変数１９０３が変更される。
【００９８】
セット試行回数上限値１９０４は、セット試行毎にセット試行カウンタ１１８との比較に用いられる値である。この値を超過すると、コアＡ１０３の管理処理１０６は、コアＡ１０３にエラーが発生していると判断する。
【００９９】
コアＡ１０３、コアＢ１０４による管理処理１０６、演算処理ａ１０７〜ｉ１１５の実行方法は実施の形態１と、周期ｔＢの長さを除き同じである。この実施の形態４では、周期ｔＢは、周期ｔＡと同じ長さであるとする。
【０１００】
次に、演算処理ｂ１０８が共有データ１１６へアクセスする際に実行する排他制御について説明する。図２１は、この発明の実施の形態４に係る電子制御装置における、演算処理ｂによる排他制御処理のフローチャートである。図２１において、図３と同一、相当部分には同一符号を付してあり、その部分の説明を省略する。管理処理１０６は、ロックフラグ１１７がクリアされていないために、セット試行カウンタ１１８をインクリメントした（ステップＳ３０７）後、セット試行カウンタ１１８の値をセット試行回数上限値１９０４（「１００」）と比較し（ステップＳ２１０１）、セット試行カウンタ１１８の値がセット試行回数上限値１９０４以下である場合には、ロックフラグ１１７の値の読込み（ステップＳ３０１）に戻る。セット試行カウンタ１１８の値がセット試行回数上限値１９０４を超過している場合には、異常であると判断され、異常処理を開始する。
【０１０１】
また、ロックフラグ１１７をクリアした後（ステップＳ３０５）、セット試行カウンタ１１８の値がセット試行回数閾値１１９を超過している場合には、まずコアＢ状態変数１９０３がノーマル（１）を示しているか確認する（ステップＳ２１０２）。コアＢ状態変数１９０３がノーマル（１）である場合には、超過時セット試行回数１２０へ格納（ステップＳ３０８）した後、セット試行カウンタ１１８をリセットし（ステップＳ３０９）、一連の処理を終了する。一方、コアＢ状態変数１９０３がノーマル（１）以外の値を示している場合には、超過時セット試行回数１２０の更新はせず、セット試行カウンタ１１８をリセットし（ステップＳ３０９）、一連の処理を終了する。
【０１０２】
第２の演算処理としての演算処理ｆ１１２、および第３の演算処理としての演算処理ｈ１１４が共有データ１１６へアクセスする際に実行する排他制御は、実施の形態１と同じであるため省略する。
【０１０３】
次に、コアＡ１０３におけるタスクＴＡ０起動時の管理処理１０６について説明する。図２２は、この発明の実施の形態４に係る電子制御装置における、コアＡで実行される管理処理のタスクＴＡ０の起動タイミングにおけるフローチャートである。図２２において、図１３と同一の処理には同一符号を付してあり、その部分の説明を省略する。管理処理１０６は、まず周波数変更フラグ１９０１がセットされているか確認する（ステップＳ２２０１）。セットされていない場合には、超過時セット試行回数１２０の値の参照を開始し（ステップＳ４０１）、以降の処理は実施の形態３と同一である。一方、周波数変更フラグ１９０１がセットされている場合には、演算処理実行順序初期設定テーブル１９０２を参照し、演算処理ａ１０７〜演算処理ｅ１１１の実行順序をデフォルトの実行順序とする。また、演算処理実行順序記憶テーブル１１０１をクリア（未記載）の状態にする（ステップＳ２２０２）。そしてセットされていた周波数変更フラグ１９０１をクリアし（ステップＳ２２０３）、決定した実行順序に従って演算処理ａ１０７〜演算処理ｅ１１１の実行を開始し、管理処理１０６を終了する。
【０１０４】
次に、動作周波数変更を実行する場合の、管理処理１０６、演算処理の実行動作と、そのときのロックフラグ１１７、セット試行カウンタ１１８、セット試行回数閾値１１９、超過時セット試行回数１２０、周波数変更フラグ１９０１、コアＢ状態変数１９０３を、タイムチャートを用いて説明する。図２３は、この発明の実施の形態４に係る電子制御装置における、動作周波数変更時の演算処理ａ〜演算処理ｉ、ロックフラグ、セット試行カウンタ、超過時セット試行回数、周波数変更フラグ、コアＢ状態変数のタイムチャートである。なお、管理処理１０６の処理時間は、本タイムチャート上には記載していない。
【０１０５】
図２３において、時刻ｔ２３００でコアＡ１０３のタスクＴＡ０が初回起動すると、周波数変更フラグ１９０１はセットされておらず、また超過時セット試行回数１２０が「０」であることから、管理処理１０６は実行順序を変更せずにタスクＴＡ０に含まれる演算処理ａ１０７〜演算処理ｅ１１１を、演算処理ａ１０７→演算処理ｂ１０８→演算処理ｃ１０９→演算処理ｄ１１０→演算処理ｅ１１１の順で実行する。この時の演算処理の動作は、実施の形態１の時刻ｔ５００と同じである。
【０１０６】
時刻ｔ２３０１では、コアＡ１０３のタスクＴＡ１が初回起動し、タスクＴＡ１に含まれる演算処理ｆ１１２が実行される。この時点では、演算処理ｆ１１２は、コアＡ１０３の処理負荷を計測中であり、まだ動作周波数は変更しない。そのほかの演算処理ｆ１１２の動作は、実施の形態１の時刻ｔ５０１と同じである。
【０１０７】
次の時刻ｔ２３０２の動作は、実施の形態１の時刻ｔ５０２と同じであるため説明を省略する。
【０１０８】
続いて、コアＢ１０４で演算処理ｈ１１４を実行中に、時刻ｔ２３０３（=ｔ２３００+（タスクＴＡ０の周期ｔＡ））になり、コアＡ１０３で再びタスクＴＡ０が起動する。ここでも、周波数変更フラグ１９０１はセットされておらず、また超過時セット試行回数１２０が「０」であることから、管理処理１０６は実行順序を変更しない。しかし、共有データ１１６に書込みアクセスする演算処理ｂ１０８の開始時間になっても、コアＢ１０４の演算処理ｈ１１４によりロックフラグ１１７がセットされたままであるため、演算処理ｂ１０８は直ちにロックフラグ１１７をセットすることはできず、セット試行を繰り返す。ロックフラグ１１７のセットを失敗する毎に、セット試行カウンタ１１８がインクリメントされ、時刻ｔ２３０４において、セット試行カウンタ１１８の値がセット試行回数閾値１１９（「５０」）を超過する。それでもなお、演算処理ｂ１０８はロックフラグ１１７がクリアされるまでセット試行を繰り返すが、セット試行カウンタ１１８の値はセット試行回数上限値１９０４（「１００」）を超過しないため、異常とは判断されない。
【０１０９】
次に、時刻ｔ２３０５において、演算処理ｈ１１４が共有データ１１６への書込みを終了し、ロックフラグ１１７をクリアすると、セット試行を繰り返していた演算処理ｂ１０８はロックフラグ１１７をセットできるようになる。このとき、セット試行カウンタ１１８は「９０」を指しているものとする。そして共有データ１１６へ書込みアクセスし、ロックフラグ１１７をクリア後、セット試行カウンタ１１８の値（「９０」）の方がセット試行回数閾値１１９（「５０」）より大きいと判断される。このとき、コアＢ状態変数１９０３を参照すると、ノーマル（１）を示しているため、超過時セット試行回数１２０にセット試行カウンタ１１８の値（「９０」）を格納し、セット試行カウンタ１１８をリセットする。そして演算処理ｂ１０８が終了すると、演算処理ｃ１０９〜演算処理ｅ１１１が実行される。
【０１１０】
次の演算処理ｆ１１２の実行内容は、時刻ｔ２３０１と同じであるため、省略する。
【０１１１】
次に、時刻ｔ２３０６（=ｔ２３０３+（タスクＴＡ０の周期ｔＡ））において、再びタスクＴＡ０が起動する。ここでも、周波数変更フラグ１９０１はセットされていないため、管理処理１０６は超過時セット試行回数１２０の値が「９０」であり、「０」より大きいことから、図１２の演算処理実行順序記憶テーブル１１０１の最小超過時セット試行回数１２０と現在の超過時セット試行回数１２０を比較する。このとき、最小超過時セット試行回数１２０が記載されていないことから、図１６に示すように、現在の演算処理実行順序（ａ→ｂ→ｃ→ｄ→ｅ）と、現在の超過時セット試行回数１２０（「９０」）を格納して更新する。
【０１１２】
次に超過時セット試行回数１２０（「９０」）と、前述の式（１）を用いて、入れ替え対象とする演算処理のインデックスを算出する。インデックスは「２」と算出することができる。そして図７の演算処理実行順序テーブル６０４を参照し、インデックス「２」を持つ演算処理が存在するか確認する。ここで演算処理ｄ１１０がインデックス「２」であるため、演算処理ｂ１０８と、演算処理ｄ１１０の実行順序を入れ替え、図１０に示すように実行順序テーブルのインデックスを更新する。すなわち、タスクＴＡ０は、時刻ｔ２３０６以降は、演算処理ａ１０７→演算処理ｄ１１０→演算処理ｃ１０９→演算処理ｂ１０８→演算処理ｅ１１１の順に実行されることになる。次に、超過時セット試行回数１２０を「０」にリセットし、変更した実行順序に従って、演算処理ａ１０７〜演算処理ｅ１１１の実行を開始する。時刻ｔ２３０６でのタスクＴＡ０の起動中は、コアＢ１０４のタスクＴＢは起動タイミングではないため、演算処理ｂ１０８は直ちにロックフラグ１１７をセットできる。よって、タスクＴＡ０の総処理時間は時刻ｔ２３００に起動したときの総処理時間と同じになる。
【０１１３】
次に、時刻ｔ２３０７では、コアＡ１０３のタスクＴＡ１が起動し、タスクＴＡ１に含まれる演算処理ｆ１１２が実行される。このとき、演算処理ｆ１１２は計測したコアＡ１０３の処理負荷演算結果から、動作周波数を下げることができると判断し、コアＡ１０３の動作周波数を１／２とし、周波数変更フラグ１９０１をセットする。これにより演算処理ａ１０７〜演算処理ｆ１１２の処理時間が２倍になる。ただし、処理頻度やＣＡＮメッセージの送信周期は変更しないようにするため、周期ｔＡの長さは動作周波数の変更前と同じになるよう設定される。
【０１１４】
次に、時刻ｔ２３０８（= ｔ２３０６+（タスクＴＡ０の周期ｔＡ））において、タスクＴＡ０が起動する。周波数変更フラグ１９０１がセットされていることから、管理処理１０６は、演算処理実行順序初期設定テーブル１９０２を参照し、時刻ｔ２３０６に変更した実行順序をデフォルトの実行順序である演算処理ａ１０７→演算処理ｂ１０８→演算処理ｃ１０９→演算処理ｄ１１０→演算処理ｅ１１１に戻す。また、演算処理実行順序記憶テーブル１１０１をクリアし、未記載状態に戻す。そして周波数変更フラグ１９０１をクリアし、デフォルトの実行順序に従って演算処理ａ１０７〜演算処理ｅ１１１の実行を開始する。その結果、実行順序はセット試行カウンタ１１８がセット試行回数閾値１１９を超過した時刻ｔ２３０３と同じになるが、動作周波数が変更されているため、演算処理ｈ１１４の終了後に演算処理ｂ１０８が起動するようになり、セット試行を繰り返すことがなくなる。
【０１１５】
このように、ＥＣＵ１０１は動作周波数を変更すると、演算処理ａ１０７〜演算処理ｅ１１１の実行順序をデフォルト設定に戻す。これにより、設計者が初期設定とした実行順序になるため、設計者の意図が最も反映されている実行順序で演算処理を行うことができるようになる。また、デフォルト設定に戻さない場合、動作周波数変更後にセット試行カウンタ１１８がセット試行回数閾値１１９を超過しても、実行順序を変更したことによって排他制御が重複しているのか判断できず、式（１）のままでは使用に適さず、算出したインデックスを持つ演算処理が存在しなくなくなる可能性が高くなる。一方、動作周波数変更に伴い、デフォルト設定に戻すことで、実行順序変更の選択肢を増やすことができ、排他制御処理の重複時間を短縮できる可能性を高めることができる。
【０１１６】
また、この実施の形態４ではコアＡ１０３で実行される演算処理ａ１０７〜演算処理ｅ１１１の実行順序のみデフォルトに戻すこととしたが、実施の形態３に示したように、コアＢ１０４で実行される演算処理ｇ１１３〜演算処理ｉ１１５の実行順序を変更した場合には、動作周波数の変更とともに、コアＢ１０４の演算処理の実行順序もデフォルトに戻す設定としてもよい。さらにまた、コアＢ１０４の動作周波数を変更するようなＥＣＵ１０１の場合には、コアＢ１０４の動作周波数変更に伴って、コアＡ１０３やコアＢ１０４で実行される演算処理の実行順序をデフォルトに戻す設定としてもよい。このようにすることで、コアＡ１０３での実行順序のみをデフォルト設定に戻す場合と比べて、排他制御処理の重複時間を短縮できる可能性を、さらに高めることができる。
【０１１７】
次に、コアＢ１０４の状態が変化したときの、管理処理１０６、演算処理の実行動作と、そのときのロックフラグ１１７、セット試行カウンタ１１８、セット試行回数閾値１１９、超過時セット試行回数１２０、周波数変更フラグ１９０１、コアＢ状態変数１９０３を、タイムチャートを用いて説明する。図２４は、この発明の実施の形態４に係る電子制御装置における、コアＢの状態変化時の演算処理ａ〜演算処理ｉ、ロックフラグ、セット試行カウンタ、超過時セット試行回数、周波数変更フラグ、コアＢ状態変数のタイムチャートである。なお、管理処理１０６の処理時間は、本タイムチャート上には記載していない。
【０１１８】
時刻ｔ２４００までは、排他制御処理の重複時間（セット試行の繰り返し）は発生していないため、実行順序はデフォルトのままである。
【０１１９】
時刻ｔ２４００では、コアＢ１０４のタスクＴＢが起動し、演算処理ｈ１１４の実行中にコアＢ１０４に何らかの異常が発生したとする。演算処理ｈ１１４はコアＢ状態変数１９０３をエラー（３）とするが、ロックフラグ１１７をセットしたままリセットがかかるまでエラー状態を継続する。これにより、時刻ｔ２４０１に実行開始される演算処理ｂ１０８は、セット試行を繰り返す。ただし、セット試行カウンタ１１８の値はセット試行回数上限値１９０４（「１００」）を超過しないため、異常とは判断されない。
【０１２０】
時刻ｔ２４０２では、コアＢ１０４のみリセットされ、ロックフラグ１１７がクリアされる。これにより演算処理ｂ１０８がロックフラグ１１７をセットできるようになる。このとき、セット試行カウンタ１１８は「９０」を指しているものとする。そして共有データ１１６へ書込みアクセスし、ロックフラグ１１７をクリア後、セット試行カウンタ１１８の値（「９０」）の方がセット試行回数閾値１１９（「５０」）より大きいことから、コアＢ状態変数１９０３を参照する。このとき、コアＢ状態変数１９０３はエラー（１）を示しているため、超過時セット試行回数１２０の値は更新されずゼロのままとなる。そしてセット試行カウンタ１１８がゼロにリセットされる。演算処理ｂ１０８が終了すると、演算処理ｃ１０９〜演算処理ｅ１１１が実行される。
【０１２１】
時刻ｔ２４０３で、再びタスクＴＡ０が起動されると、周波数変更フラグ１９０１はセットされておらず、また超過時セット試行回数１２０が０であることから、管理処理１０６は実行順序を変更せずに演算処理ａ１０７〜演算処理ｅ１１１の実行を開始する。
【０１２２】
時刻ｔ２４０４で、再びタスクＴＡ０が起動されると、周波数変更フラグ１９０１はセットされておらず、また超過時セット試行回数１２０が「０」であることから、管理処理１０６は実行順序を変更せずに演算処理ａ１０７〜演算処理ｅ１１１の実行を開始する。このとき、演算処理ａ１０７〜演算処理ｅ１１１の実行順序は時刻ｔ２４０１から変更されていないが、コアＢ１０４の異常状態が解消されたことにより、排他制御処理の重複は発生しない。
【０１２３】
このように、ＥＣＵ１０１は、正常である間のみ、実行順序の変更を行うため、エラーによって一時的に排他制御の実行タイミングの重複が発生した状態において、不要な実行順序の変更を避けることができる。
【０１２４】
次に、コアＢ１０４に異常が発生し、ロックフラグ１１７がクリアされず、セット試行カウンタ１１８がセット試行回数上限値１９０４を超過したときの、管理処理１０６、演算処理の実行動作をタイムチャートを用いて説明する。図２５は、この発明の実施の形態４に係る電子制御装置における、セット試行カウンタのセット試行回数上限値超過時の演算処理ａ〜ｉ、ロックフラグ、セット試行カウンタ、超過時セット試行回数、周波数変更フラグ、コアＢ状態変数のタイムチャートである。
【０１２５】
時刻ｔ２４００から時刻ｔ２４０１の動作は、図２４のタイムチャートと同じであるため、説明は省略する。
【０１２６】
図２５において、時刻ｔ２５００では、演算処理ｂ１０８は、ロックフラグ１１７がクリアされないため、セット試行を繰り返し、スセット試行カウンタ１１８の値が、セット試行回数上限値１９０４（「１００」）を超過する。これにより、コアＡ１０３においても異常であると判断され、異常処理を開始する。異常処理とは、例えば、コアＡ１０３、コアＢ１０４やメモリ１０５などのＨ／Ｗリセットを指す。
【０１２７】
このように、ＥＣＵ１０１はセット試行カウンタ１１８の値がセット試行回数上限値１９０４を超過すると異常と判断し、異常処理を開始することで、ロックフラグ１１７がクリアされないため、セット試行を長時間繰返し、周期的な演算処理の実行が不可能になるような状況（デッドロック）を回避することができる。
【０１２８】
なお、この発明は、その発明の範囲内において、各実施の形態を自由に組み合わせたり、各実施の形態を適宜、変形、省略することが可能である。
【０１２９】
前述のこの発明の実施の形態１に係る電子制御装置は、下記の発明のうち、（１）、（２）、及び（３）を具体化したものである。
前述のこの発明の実施の形態２に係る電子制御装置は、下記の発明のうち、（１）、（３）、（９）、及び（１１）を具体化したものである。
前述のこの発明の実施の形態３に係る電子制御装置は、下記の発明のうち、（１）、（３）、（４）、及び（５）を具体化したものである。
前述のこの発明の実施の形態４に係る電子制御装置は、下記の発明のうち、（１）、（３）（６）、（７）、（８）、及び（１０）を具体化したものである。
【０１３０】
（１）演算処理を実行する第１のプロセッサと、
前記第１のプロセッサの演算処理の実行とは並列に演算処理を実行する第２のプロセッサと、
を備えた電子制御装置であって、
前記第１のプロセッサは、第１の演算処理と複数の第２の演算処理とを所定の実行順序に従って周期的に実行するように構成され、
前記第２のプロセッサは、第３の演算処理を周期的に実行するように構成され、
前記第１の演算処理と前記第３の演算処理は、排他的に共有リソースにアクセスする演算処理であり、
前記第１の演算処理と前記第３の演算処理とのうちの何れか一方が、前記共有リソースに排他的にアクセスしたときにセットされるロックフラグと、
前記第３の演算処理により前記共有リソースが排他的にアクセスされていて前記第１の演算処理が前記ロックフラグをセットできないとき、前記第１の演算処理が前記ロックフラグをセットできるまでセット試行を繰り返すセット試行回数を計数するセット試行カウンタと、
を備え、
前記セット試行カウンタの値が所定の閾値を超過したとき、
前記セット試行カウンタの値に基づいて、前記複数の第２の演算処理のうちの少なくとも一つを選択し、
前記選択された前記第２の演算処理と前記第１の演算処理との実行順序を変更して、前記第１のプロセッサの演算処理を実行するように構成されている、
ことを特徴とする電子制御装置。
【０１３１】
（２）前記複数の第２の演算処理の夫々の処理時間に基づき、前記複数の第２の演算処理のうちの一つを選択するように構成されている、
ことを特徴とする、上記（１）に記載の電子制御装置。
【０１３２】
（３）前記第２の演算処理の現在の実行順序に基づき、前記複数の第２の演算処理のうち一つを選択するように構成されている、
ことを特徴とする、上記（１）に記載の電子制御装置。
【０１３３】
（４）前記実行順序の変更を複数回実行しても前記セット試行カウンタの値が前記所定の閾値を超過したときには、前記セット試行カウンタの値が最も小さい値ときの実行順序により、前記第１のプロセッサの演算処理を実行するように構成されている、
ことを特徴とする上記（１）に記載の電子制御装置。
【０１３４】
（５）前記第２のプロセッサは、
前記第３の演算処理と第４の演算処理を周期的に実行するように構成されていると共に、
前記実行順序の変更を実行しても前記セット試行カウンタの値が前記所定の閾値を超過したときには、前記第３の演算処理と、前記第４の演算処理の実行順序を変更するように構成されている、
ことを特徴とする上記（１）に記載の電子制御装置。
【０１３５】
（６）前記第１のプロセッサの動作周波数を変更する機能を備え、
前記第１のプロセッサの動作周波数が変更されたときは、変更した前記実行順序を変更前の実行順序に戻すように構成されている、
ことを特徴とする上記（１）に記載の電子制御装置。
【０１３６】
（７）前記第２のプロセッサの動作周波数を変更する機能を備え、
前記第２のプロセッサの動作周波数が変更されたときは、変更した前記実行順序を変更前の実行順序に戻すように構成されている、
ことを特徴とする上記（１）に記載の電子制御装置。
【０１３８】
（８）前記第１のプロセッサは、
前記複数の第２の演算処理のうちの少なくとも一つを選択することが出来ないときは、変更要求フラグをセットするように構成され、
前記第２のプロセッサは、
前記変更要求フラグがセットされているときは、前記第３の演算処理と、前記第４の演算処理の実行順序を変更するように構成されている、
ことを特徴とする上記（５）に記載の電子制御装置。 
【０１３９】
（９）前記電子制御装置は、
前記第１の演算処理と前記第２の演算処理の実行順序を監視する監視処理を備え、
前記第１の演算処理と前記第２の演算処理は、その実行時に自身が実行されたことを示す第１の処理情報と第２の処理情報を夫々前記監視処理へ通知し、
前記監視処理は、前記第１の処理情報と前記第２の処理情報の通知順序が、所定の通知順序と異なる場合には異常と判断する処理であって、前記第２の演算処理と前記第２の演算処理の実行順序を変更すると、前記変更した実行順序に基づき前記所定の通知順序を変更する、
ことを特徴とする上記（１）に記載の電子制御装置。
【０１４０】
（１０）前記セット試行カウンタの値が、所定の値を超過した場合には、異常であると判断するように構成されている、
ことを特徴とする上記（１）に記載の電子制御装置。
（１１）前記電子制御装置は、不揮発性の記憶領域を備え、
変更した実行順序を前記不揮発性の記憶領域に格納する、
ことを特徴とする上記（１）に記載の電子制御装置。
【符号の説明】
【０１４１】
１０１  電子制御装置（ＥＣＵ）、１０２  ＣＡＮ通信線、１０３  第１のプロセッサ（コアＡ）、１０４  第２のプロセッサ（コアＢ）、１０５  メモリ、１０６  管理処理、１０７  演算処理ａ、１０８  演算処理ｂ、１０９  演算処理ｃ、１１０  演算処理ｄ、１１１  演算処理ｅ、１１２  演算処理ｆ、１１３  演算処理ｇ、１１４  演算処理ｈ、１１５  演算処理ｉ、１１６  共有リソース（共有データ）、１１７  ロックフラグ、１１８  セット試行カウンタ、１１９  セット試行回数閾値、１２０  超過時セット試行回数、１２１  演算処理時間テーブル、１２２  ＣＡＮ通信インタフェース、６０４  演算処理実行順序テーブル、６０５  演算処理実行ＦＩＦＯ、１１０１  演算処理実行順序記憶テーブル、１１０２  変更要求フラグ、１９０１  周波数変更フラグ、１９０２  演算処理実行順序初期設定テーブル、１９０３  コアＢ状態変数、１９０４  セット試行回数上限値。
【図１】
0006009518.tif 000002
【図２】
0006009518.tif 000003
【図３】
0006009518.tif 000004
【図４】
0006009518.tif 000005
【図６】
0006009518.tif 000006
【図７】
0006009518.tif 000007
【図８】
0006009518.tif 000008
【図１０】
0006009518.tif 000009
【図１１】
0006009518.tif 000010
【図１２】
0006009518.tif 000011
【図１３】
0006009518.tif 000012
【図１４】
0006009518.tif 000013
【図１９】
0006009518.tif 000014
【図２０】
0006009518.tif 000015
【図２１】
0006009518.tif 000016
【図２２】
0006009518.tif 000017
【図５】
0006009518.tif 000018
【図９】
0006009518.tif 000019
【図１５】
0006009518.tif 000020
【図１６】
0006009518.tif 000021
【図１７】
0006009518.tif 000022
【図１８】
0006009518.tif 000023
【図２３】
0006009518.tif 000024
【図２４】
0006009518.tif 000025
【図２５】
0006009518.tif 000026
【図２６】
0006009518.tif 000027