(57)【要約】【課題】コスト増を抑制して、割込み要因の発生した順番で対応する処理を実行可能な電子制御ユニット等を提供すること。【解決手段】第１のタスクＡを起床させた第１の割込み要求の他に登録されている第２の割込み要求を検出する第１の割込み要求検出手段２５Ａと、第２の割込み要求の発生時刻が、第１の割込み要求の発生時刻よりも前か否かを判定する第１の時刻判定手段２４Ａと、記第２の割込み要求の発生時刻が、第１の割込み要求の発生時刻よりも前の場合、第１のタスクＡが実行する第１の処理Ａに先立ち、第２の割込み要求により起床される第２のタスクＢが提供する第２の処理Ｂと同等な第２の処理Ａを実行する第２の処理実行手段２７Ａと、第２の処理Ａの実行の終了後、第１の処理Ａを実行する第１の処理実行手段２６Ａと、  を有することを特徴とする車両用電子制御ユニット。【選択図】図１
2010157014.tif 000002
【特許請求の範囲】
【請求項１】
発生した割込み要因毎に割込み要求及び発生時刻を登録しておき、前記割込み要求に対応したいずれかのタスクが実行可能になると、１以上の前記割込み要求を走査して第１のタスクを起床する電子制御ユニットであって、
前記第１のタスクを起床させた第１の割込み要求の他に登録されている第２の割込み要求を検出する第１の割込み要求検出手段と、
前記第２の割込み要求の発生時刻が、前記第１の割込み要求の発生時刻よりも前か否かを判定する第１の時刻判定手段と、
前記第２の割込み要求の発生時刻が、前記第１の割込み要求の発生時刻よりも前の場合、前記第１のタスクが実行する第１の処理に先立ち、前記第２の割込み要求により起床される第２のタスクが提供する処理と同等な第２の処理を実行する第２の処理実行手段Ａと、
前記第２の処理の実行の終了後、前記第１の処理を実行する第１の処理実行手段Ａと、
を有することを特徴とする車両用電子制御ユニット。
【請求項２】
前記第２のタスク以外のタスクで前記第２の処理が実行された場合にオンとなる第２の実行フラグを有し、
前記第２の処理実行手段Ａは、前記第２の処理を実行した後、前記第２の実行フラグをオンに設定する、
ことを特徴とする請求項１記載の車両用電子制御ユニット。
【請求項３】
前記第１のタスク以外のタスクで前記第１処理が実行された場合にオンとなる第１の実行フラグを有し、
前記第１の処理実行手段Ａは、前記第１の処理の実行の終了後、前記第１の実行フラグをオフに設定する、
ことを特徴とする請求項１記載の車両用電子制御ユニット。
【請求項４】
前記第１の処理実行手段Ａは、前記第１の実行フラグがオフの場合にのみ、前記第１の処理を実行する、
ことを特徴とする請求項３記載の車両用電子制御ユニット。
【請求項５】
前記第１のタスクの実行の終了後、前記割込み要求が走査され前記第２のタスクが起床された場合、
前記第２の実行フラグがオフの場合にのみ、前記第２の処理を実行する第２の処理実行手段Ｂ、
を有することを特徴とする請求項２記載の車両用電子制御ユニット。
【請求項６】
前記第２のタスクを起床させた第２の割込み要求の他に登録されている前記第１の割込み要求を検出する第２の割込み要求検出手段と、
前記第１の割込み要求の発生時刻が、前記第２の割込み要求の発生時刻よりも前か否かを判定する第２の時刻判定手段と、
前記第１の割込み要求の発生時刻が、前記第２の割込み要求の発生時刻よりも前の場合、前記第２のタスクが実行する前記第２の処理に先立ち、前記第１の割込み要求により起床される第１のタスクが提供する処理と同等な前記第１の処理を実行する第１の処理実行手段Ｂと、
前記第１の処理の実行の終了後、前記第２の処理を実行する第２の処理実行手段Ｂと、
を有することを特徴とする請求項５記載の車両用電子制御ユニット。
【請求項７】
前記第１のタスク以外のタスクで前記第１処理が実行された場合にオンとなる第１の実行フラグを有し、
前記第１の処理実行手段Ｂは、
前記第１の処理を実行した後、前記第１の実行フラグをオンに設定する、
ことを特徴とする請求項６記載の車両用電子制御ユニット。
【請求項８】
前記第２の処理実行手段Ｂは、前記第２の処理を実行した後、前記第２の実行フラグをオフに設定する、
ことを特徴とする請求項６記載の車両用電子制御ユニット。
【請求項９】
前記第１の割込み要求と、前記第２の割込み要求の優先順位は等しい、
ことを特徴とする請求項１記載の車両用電子制御ユニット。
【請求項１０】
ＣＰＵが、発生した割込み要因に対応した割込み要求及び発生時刻を登録するステップと、
スケジューラが、割込み要求に対応したいずれかのタスクが実行可能になると、前記割込み要求を走査して第１のタスクを起床するステップと、
割込み要求検出手段が、前記第１のタスクを起床させた第１の割込み要求の他に、登録されている第２の割込み要求を検出するステップと、
時刻判定手段が、前記第２の割込み要求の発生時刻が、前記第１の割込み要求の発生時刻よりも前か否かを判定するステップと、
第２の処理実行手段が、前記第２の割込み要求の発生時刻が、前記第１の割込み要求の発生時刻よりも前の場合、前記第１のタスクが実行する第１の処理に先立ち、前記第２の割込み要求により起床される第２のタスクが提供する処理と同等な第２の処理を実行するステップと、
前記第２の処理の実行の終了後、第１の処理実行手段が前記第１の処理を実行するステップと、
を有することを特徴とする車両用電子制御ユニットの割込み制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、車両用電子制御ユニット及び割込み制御方法に関し、特に、割込み要因の発生とハンドラの起動順を調整できる車両用電子制御ユニット及び割込み制御方法に関する。
【背景技術】
【０００２】
車両には、パワートレーン系、ボディ系、マルチメディア系など、種々のシステムが搭載されており、各システムはセンサが検出する信号やシステム間のデータ通信等を利用して所望の制御を所望のタイミングで実行している。このような制御を実現するため、車両にはマイコンを搭載した種々の電子制御ユニット２０が搭載されている。電子制御ユニット２０には各種のセンサ、アクチュエータ及びスイッチ等が接続されており、電子制御ユニット２０はセンサの検出した信号に演算を施し、演算結果に応じてアクチュエータやスイッチ等を制御している。
【０００３】
ここで、電子制御ユニット２０が実行する演算は１つとは限らないので、例えばセンサが検出した信号によってマイコンに割込みを発生させ、マイコンが必要な演算を必要なタイミングで実行できるように設計されている。
【０００４】
しかしながら、割込みが短時間に複数発生することもあり、このような場合に割込みに対応した複数の演算が、時間的に前後することがあることが知られている。図１は、割込み要因の発生タイミングと、対応するハンドラの実行順の関係の一例を示す。Ａｎ（ｎ：１〜９）の割込み要因は、クランク角の所定の回転角度毎に発生する割込みで、同じハンドラＡが起動する。同様に、Ｂｎ（ｎ：１、２）の割込み要因は、クランク角のより大きな回転角度毎に発生する割込みで、同じハンドラＢが起動する。図示するように、割込み要因Ａ３に対しハンドラＡが起動した後、割込み要因Ｂ１に対しハンドラＢが起動し、ついで、割込み要因Ａ４に対しハンドラＡが起動する。このように、割込み要因の発生タイミングと、ハンドラの起動順が一致していれば制御ロジックの不整合が生じない。
【０００５】
しかし、図示するように電子制御ユニット２０には割込み要因Ａｎ、Ｂｎ以外の割込み要因が発生することがある。図１では、割込み要因Ｂ２とＡ８が、共に、他の割込み要因に起因したハンドラＣ（ハンドラＣは同じものとは限らない）の実行中に発生している。割込み要因が発生すると、マイコンは割込みテーブルに割込み要求を登録するが、他の割込み要求が登録されていなければ、マイコンは割込みテーブルに登録された割込み要求に対応したハンドラをすぐに起動する。
【０００６】
これに対し、他の割込み要因に起因したハンドラＣの実行中である等の理由により、複数の割込み要求が割込みテーブルに登録された場合、他の割込み要因に対応したハンドラCが終了した時点で、マイコンは割込みテーブルの例えばアドレス順に割込み要求を走査し次に起動するハンドラを決定する。すなわち、割込み要因が発生した順番にハンドラが起動するとは限らない。このため、図示するように、割込み要因Ｂ２、Ａ８の順序で割込み要因が発生しているのに、ハンドラＡが先に起動しハンドラＢが後に起動することになり、割込み要因の発生とハンドラの起動順の整合性がとれない状況が生じてしまう。この場合、制御ロジックの不整合が生じることが懸念される。
【０００７】
割込み要因の発生順とハンドラの起動順を整合させるため、割込み要求が短時間に複数発生した場合、割込み要求の順に対応した演算の起動要求を記憶する電子制御ユニットが開示されている（例えば、特許文献１参照。）。これにより、起動要求が重なる場合でも、割込み要求が順番に全て実行されるので、処理抜けを防止できるとしている。
【特許文献１】特開２０００−３４９４８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、特許文献１記載の電子制御ユニットでは、起動要求を割込み要求の順に記憶するという構成が必要となる。すなわち、起動要求を識別する識別情報をメモリやレジスタに割込みの要求順に記憶することが必要となるため、電子制御ユニットのマイコンに複雑な実装が必要となるという問題がある。このため、電子制御ユニットのハード的な改良が必要となりコスト増となったり、特定の電子制御ユニットでしか実現できないことになってしまう。
【０００９】
本発明は、上記課題に鑑み、コスト増を抑制して、割込み要因の発生した順番で対応する処理を実行可能な電子制御ユニット及び割込み制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記課題に鑑み、本発明は、発生した割込み要因毎に割込み要求及び発生時刻を登録しておき、割込み要求に対応したいずれかのタスクが実行可能になると、１以上の割込み要求を走査して第１のタスク（例えば、タスクＡ）を起床する電子制御ユニットであって、第１のタスクを起床させた第１の割込み要求（例えば、割込み要求フラグＡ）の他に登録されている第２の割込み要求（例えば、割込み要求フラグＢ）を検出する第１の割込み要求検出手段（例えば、フラグ判定部２５Ａ）と、第２の割込み要求の発生時刻が、第１の割込み要求の発生時刻よりも前か否かを判定する第１の時刻判定手段（例えば、キャプチャ時刻２４Ａ）と、第２の割込み要求の発生時刻が、第１の割込み要求の発生時刻よりも前の場合、第１のタスクが実行する第１の処理（例えば、処理Ａ）に先立ち、第２の割込み要求により起床される第２のタスク（例えば、タスクＢ）が提供する処理（例えば、処理Ｂ）と同等な第２の処理（タスクＡが実行する処理Ｂ）を実行する第２の処理実行手段Ａ（例えば、処理Ｂ実行部２７Ａ）と、第２の処理の実行の終了後、第１の処理を実行する第１の処理実行手段Ａ（例えば、処理Ａ実行部２６Ａ）と、を有することを特徴とする。
【発明の効果】
【００１１】
コスト増を抑制して、割込み要因の発生した順番で対応する処理を実行可能な電子制御ユニット及び割込み制御方法を提供するができる。
【発明を実施するための最良の形態】
【００１２】
以下、本発明を実施するための最良の形態について図面を参照しながら説明する。
【００１３】
〔本実施形態の電子制御ユニット２０の概略〕
図２は、本実施形態の電子制御ユニット２０が割込みを処理する手順を模式的に説明する図の一例である。電子制御ユニット２０のマイコン（以下、ＣＰＵ１４という）は各種の割込み要因を受け付ける。ＣＰＵ１４は、割込み要因が発生すると発生時刻（以下、キャプチャ時刻という）をキャプチャ時刻レジスタ３０に記憶すると共に、割込み要因に対応づけられている割込み要求フラグをオンにする。一連の割込み要求フラグの状態を記憶したテーブルを割込み定義テーブル４０という。
【００１４】
ここで、割込み要因に優先順位が付与されている場合があるが、本実施形態では割込み要因の優先順位は同一であるものとする。そして、優先順位が同一の複数の割込み要因が発生した場合、ＣＰＵ１４は割込み定義テーブル４０の割込みベクタ順やアドレス順に（以下、単に「アドレス順に」という）対応するハンドラを起動する。例えば、ＣＰＵ１４は、割込み要求フラグＡ、割込み要求フラグＢ、割込み要求フラグＣ、の順に割込み定義テーブル４０を参照し、オンになっているフラグが見つかり次第、割込み要求フラグに対応するハンドラを起動するものとする。なお、割込み要求フラグＡに対してはハンドラＡが起動され、割込み要求フラグＢに対してはハンドラＢが起動され、割込み要求フラグＣに対してはハンドラＣが起動される。割込み要求フラグＣは、割込み要因Ａ、Ｂとは別の他の割込み要因に対応したフラグで、他の割込み要因は互いに同じ割込みとは限らないが、区別せずにハンドラＣが起動されるものとする。
【００１５】
例えば、割込み要求フラグＡ、Ｂがオンになっている状態で、ハンドラＣの実行が終了したとする。この場合、ＣＰＵ１４が割込み定義テーブル４０をアドレス順に参照すると、割込み要求フラグＡがオンなので、ハンドラＡを起動する。ハンドラＡは、割込み要因Ａに対応した処理Ａ（以下、「割込み要因Ａに付随する」という）を実行するタスクＡを起床する（ハンドラＡがそのまま処理Ａを実行してもよい）。
【００１６】
そして本実施形態の電子制御ユニット２０は、タスクＡが処理Ａ以外の処理を実行可能な点が特徴の１つになっている。すなわち、本来、タスクＡが実行する処理は、割込み要因Ａに付随した処理Ａだけであるが、本実施形態のタスクＡは、割込み要因Ｂに付随する処理Ｂを実行することができる。タスクと処理を区別するため、タスクＡと処理Ａ、タスクＢと処理Ｂ等、のようにタスクと処理を区別して表記する。
【００１７】
タスクＡは、次の２つの条件がいずれも成立する場合、処理Ａよりも処理Ｂを先に実行すべきであると判定する。
（ａ１）割込み要求フラグＢがオン
（ａ２）割込み要因Ｂのキャプチャ時刻が割込み要因Ａのキャプチャ時刻よりも前
すなわち、この２つの条件が共に成立する場合、割込み要因Ｂが割込み要因Ａよりも先に発生したことになるので、処理Ａが先に実行されると、後に発生した割込み要因Ａに付随する処理Ａを、先に発生した割込み要因Ｂに付随する処理Ｂよりも先に実行することになってしまう。そこで、２つの条件（ａ１）（ａ２）が共に成立する場合、タスクＡは処理Ａよりも先に処理Ｂを実行する。
【００１８】
こうすることで、割込み要因が発生したタイミングと割込み要因に付随する処理の実行順序の整合性を保つことができる。キャプチャ時刻の記憶と割込み要求フラグの操作は、従来から可能なＣＰＵ１４が多いので、そのようなＣＰＵ１４では構成を追加する必要がない。したがって、コスト増となることもない。
【００１９】
なお、タスクＡが処理Ｂを実行するため、次にタスクＢが起床されると処理Ｂが重複して実行されるおそれが生じる。このため、電子制御ユニット２０は、フラグ（後述する処理Ａ実行フラグ３１と処理Ｂ実行フラグ３２）を利用して重複実行を回避する。
【００２０】
〔ハードウェア構成の例〕
図３は、電子制御ユニット２０のハードウェア構成図の一例を示す。電子制御ユニット２０はコンピュータを実体とし、ＣＰＵ１４、ＥＥＰＲＯＭ１３、ＲＡＭ１５、入力インターフェイス１２、出力インターフェイス１６、及び、ＡＳＩＣ（Application  Specific  Integrated  Circuit）１７がバスを介して接続された構成を有する。車両には数多くの電子制御ユニット２０が搭載されており、上記の割込み制御はどの電子制御ユニット２０にも適用できる。しかし、割込み要因と付随する処理の順番に厳密なロジックが要求されるのは制御系であることが多いので、特にパワートレーン系、エンジン系、トランスミッション系、ブレーキ系等の制御系の電子制御ユニット２０に好適に適用できる。
【００２１】
例えば、パワートレーン系の電子制御ユニット２０の入力インターフェイス１２に接続されるセンサＡ〜Ｃ（区別しない場合、センサ１１という）は、例えば、クランク角センサ、エアフローセンサ、Ｏ２センサ、ＥＧＲ（Exhaust  Gas  Recirculation）センサ等である。また、出力インターフェイス１６はＭＯＳＦＥＴやＩＧＢＴ（Insulated  Gate  Bipolar  Transistor）等を実体とし、出力インターフェイス１６に接続されるアクチュエータＡ〜Ｃ（区別しない場合、アクチュエータ１８という）は、例えば、イグニッションプラグ、インジェクタ、ＶＶＴソレノイド、各種のソレノイド、スロットルモータ等である。なお、ＡＳＩＣ１７は、特定の演算や制御に対応して実装されており、ＡＳＩＣ１７にアクチュエータやソレノイド等が接続されてもよい。
【００２２】
ＣＰＵ１４は、ＥＥＰＲＯＭ１３に記憶されたプログラムやパラメータデータを読み出し、ＲＡＭ１５を作業メモリにして各種のタスクを実行する。この電子制御ユニット２０では１つのＣＰＵ（複数のコアを有していてもよい）１４が複数のタスクを切り替えて実行することが前提になっているので、各処理はプリエンプティブに実行される。このため、電子制御ユニット２０はリアルタイムＯＳを搭載していることが好ましい。リアルタイムＯＳはマルチタスク環境を提供し、各タスクの最大の実行待ち時間、最大割り当て時間等を制御して、タスク・スケジューリングする。一般にはタスクの優先度を考慮してスケジューリングするものである。
【００２３】
〔処理Ａ、処理Ｂの例〕
タスクＡが実行する処理Ａ、タスクＢが実行する処理Ｂについて図４に基づき説明する。処理Ｂは、例えばクランク角の２４０度毎に発生する割込みに付随した処理で、ＶＶＴ（Variable  Valve  Timing）入力履歴を記憶する処理に相当する。すなわちタスクＢは、ＶＶＴ入力履歴の有無を示す例えばフラグをオンにする。
【００２４】
また、処理Ａは、例えばクランク角の３０度毎に発生する割込みに付随した処理で、エンジン回転数を算出する処理、及び、ＶＶＴ入力角度を算出する処理に相当する。クランク角度が３０度変化する毎に割込みが発生する場合、割込み要因Ａ３が発生した時刻と割込み要因Ａ４が発生した時刻からクランク角が３０度変化するために必要な時間Ｔ０が計算される。割り込み発生要因Ａ４により起床されたタスクＡは、算出された時間Ｔ０を１２倍した値からエンジンの１回転の時間を求め、例えば１分間当たりのエンジン回転数を算出する。
【００２５】
また、ＶＶＴ入力角度の算出のため、タスクＡは、割込み要因Ａ３が発生した時刻から割込み要因Ａ４が発生した時刻までの時間Ｔ０と、割込み要因Ａ３が発生した時刻から割込み要因Ｂ１が発生した時刻までの時間Ｔ１の比を求める。すなわち、タスクＡは、ＶＶＴ入力履歴の有無を示すフラグがオンの場合、Ｔ１／Ｔ０（又はＴ２／Ｔ０でもよい）を算出する。割込み要因Ａ、Ｂが発生したキャプチャ時刻は記憶されているので、Ｔ１／Ｔ０は容易に算出される。
【００２６】
そして、タスクＡは、次式からＶＶＴ入力角度を算出する。
ＶＶＴ入力角度＝割込み要因Ａ３が発生した時刻のクランク角度  
＋  Ｔ１×定数／Ｔ０
なお、定数は、割り込み要因Ａ３が発生してから割り込み要因Ａ４が発生するまでのクランク角度（例えば３０度）である。
【００２７】
以上のような処理Ａ、処理Ｂの内容によれば、図１を用いて説明したように、割込み要因Ｂ２に付随する処理Ｂが、割り込み要因Ａ８に付随する処理Ａ８の実行の終了後に実行されると、ＶＶＴ入力履歴の有無を示すフラグがオンになっていないことになる。したがって、タスクＡは、ＶＶＴ入力角度の算出ができない。本実施形態の電子制御ユニット２０は、このような不都合を防止することができる。
【００２８】
〔割込み要求フラグの設定、キャプチャ時刻の記憶〕
図５は、タスクＡが起床される手順を模式的に示す図の一例である。センサＡ〜Ｃは、入力インターフェイス１２を介してＣＰＵ１４の割込みポート２１に接続される。割込みポート２１は、割込み要求が入力されると「１」になる。割込みポート２１の出力はマスクレジスタ２２に入力される。マスクレジスタ２２は割込みポート２１毎に受付の可否を決定するレジスタで、ＣＰＵ１４は割込み要因に応じてマスクレジスタ２２の値を可変に設定する。割込み要求の受付が許可されると、割込み定義テーブル４０に信号がラッチされる。これにより、割込み要求フラグＡ〜Ｃがオンになる。
【００２９】
また、ＣＰＵ１４は割込み要求フラグＡ〜Ｃがオンになった時にＣＰＵ１４が有する時計の時刻情報をキャプチャ時刻としてキャプチャ時刻レジスタ３０に記憶する。キャプチャ時刻レジスタ３０は複数の記憶エリアを有し、割込み要因と予め対応づけられている。
【００３０】
〔タスク・スケジューリング〕
スケジューラ２３はリアルタイムＯＳにより提供される機能で、ＣＰＵ１４に割り当てるタスクＡ〜Ｃをスケジューリングする。図６は、状態遷移図の一例を示す。よく知られているように、タスクは３つの状態を取り得る。実行状態は、ＣＰＵ１４によりそのタスクが実行されている状態を、実行可能状態は、タスクの実行に必要な条件は整っているが、当該タスクよりも優先順位が高いタスクや同一の優先順位だが先に実行可能となったタスクが実行状態であるため、ＣＰＵ１４が開放されるのを待っている状態である。実行待ち状態は、タスクを実行するための条件、例えば、ユーザの操作、他のタスクの演算結果の終了、時間の経過等の成立を待っている状態である。実行待ち状態のタスクは、ＣＰＵ１４が他のタスクを実行していなくても、実行状態にならない。
【００３１】
スケジューラ２３により各タスクは、例えば次のような手順で状態間を遷移する。
Ｉ．実行状態のタスクは実行が終了すると消滅する。
II．ＣＰＵ１４が開放されると、スケジューラ２３は実行可能状態のタスクを実行状態にディスパッチする。
III．実行状態のタスクより優先度の高いタスクが実行可能状態になると、スケジューラ２３は実行中のタスクを実行可能状態に遷移させる。
VI．実行状態のタスクが、タスクを実行するための条件を待つようになると、スケジューラ２３はそのタスクを実行待ち状態に遷移させる。
Ｖ．実行待ち状態のタスクが実行するための条件が成立すると、スケジューラ２３は実行可能状態に遷移させる。
【００３２】
〔タスクＡがタスクＢより先に起床された場合の処理Ａ、処理Ｂの実行順の調整〕
例えば、割込み要因が発生した直後（割込み要求フラグＡ〜Ｃがオンになった直後）は、タスクＡ〜Ｃはタスクを実行するための条件が成立していると見なせるのでタスクＡ〜Ｃは当初、実行可能状態となる。本実施形態ではタスクＡ〜Ｃの優先順位は同一なので、タスクＡ〜Ｃは実行可能状態になった順番に、ＣＰＵ１４にディスパッチされる。
【００３３】
図５の丸数字が示すように割込み要因Ｃ、Ｂ、Ａの順番で、３つの割込みが発生した場合を例に具体的に説明する。割込み要因Ｃが最初に発生するので、スケジューラ２３はタスクＣを実行状態にする。タスクＣの実行中に、割込み要因Ｂが発生した場合、スケジューラ２３はタスクＢは実行可能状態にする（図６（ａ））。この状態で、さらに割込み要因Ａが発生した場合、タスクＡはタスクＢと同様に実行可能状態となる（図６（ｂ））。
【００３４】
タスクＣの実行が終了すると、スケジューラ２３は、割込み定義テーブル４０を参照し、オンになっている割込み要求フラグＡ〜Ｃをアドレス順に走査する。図６（ｂ）では複数のタスクＡ、Ｂが実行可能状態となっているため、スケジューラ２３は、割込み要因Ａに対応したハンドラＡを起動する。ハンドラＡはタスクＡを起床する（図６（ｃ））。
【００３５】
したがって、先に発生した割込み要因ＢのタスクＢよりもタスクＡが先に起床されてしまう。本実施形態の電子制御ユニット２０はこの不整合を調整するため、タスクＡは処理Ａと処理Ｂを実行する順番を調整する。
【００３６】
図５に戻り、具体的にタスクＡは、割込み要求フラグＢがオンか否かを判定するフラグ判定部２５Ａと、割込み要因Ｂのキャプチャ時刻が割込み要因Ａのキャプチャ時刻よりも前か否かを判定するキャプチャ時刻判定部２４Ｂと、を有する。また、タスクＡは、処理Ａを実行するための処理Ａ実行部２６Ａ、処理Ｂを実行するための処理Ｂ実行部２７Ａを有する。
【００３７】
フラグ判定部２５Ａは割込み定義テーブル４０を参照し上記（ａ１）の条件が成立するか否かを判定し、キャプチャ時刻判定部２４Ａはキャプチャ時刻レジスタ４０から割込み要因Ａと割込み要因Ｂのキャプチャ時刻を参照し、上記（ａ２）の条件が成立するか否かを判定する。条件（ａ１）（ａ２）が成立する場合、処理Ｂ実行部２７Ａが処理Ａよりも先に処理Ｂを実行する。そして、処理Ｂの実行の終了後、処理Ａ実行部２６Ａが処理Ａを実行する。こうすることで、割込み要因が発生したタイミングと割込み要因に付随する処理の実行順序の整合性を保つことができる。
【００３８】
なお、処理Ｂ実行部２７Ａが処理Ｂを実行する態様は、処理Ａの一部に処理Ｂのコードを記述しておく態様や、処理Ａから処理Ｂのサブルーチンを呼び出す態様等がある。すなわち、処理Ｂ実行部２７ＡはタスクＢそのもの起床させるわけではないので、厳密にはタスクＡが実行する処理Ｂと、タスクＢが実行する処理Ｂは異なるが、得られる演算結果は同じである。
【００３９】
ところで、図６（ｄ）に示すように、タスクＡの実行が終了するとＣＰＵ１４はタスクＢを実行することになる。しかし、処理Ｂはすでに実行されているので、タスクＢがそのまま処理Ｂを実行すると重複実行となってしまう。そこで、タスクＢが処理Ｂの重複実行を回避できるよう、タスクＡは処理Ａ実行フラグ３１及び処理Ｂ実行フラグ３２を参照したり操作することができる。
【００４０】
処理Ａ実行フラグ３１は、処理ＡがタスクＢ内で実行された場合にオンとなるフラグであり、処理Ｂ実行フラグ３２は、処理ＢがタスクＡ内で実行された場合にオンとなるフラグである。例えば、タスクＡの処理Ｂ実行部２７Ａが処理Ｂを実行すると処理Ｂ実行フラグ３２をオンにする。こうすることで、図６（ｄ）に示すように、タスクＢが実行状態になった際、処理Ｂの重複実行を防止する。すなわち、タスクＢの処理Ｂ実行部２６Ｂが処理Ｂを実行する際、処理Ｂ実行フラグ３２を参照し、オンの場合は処理Ｂを実行しないようにすることで、重複実行を防止できる。
【００４１】
なお、タスクＡの処理Ａ実行部２６Ａは処理Ａを実行すると処理Ａ実行フラグ３１をオフにする。これは、タスクＡにおける処理Ａの実行は、タスクＢ内の実行ではないからである。
【００４２】
重複実行を防止するため、処理Ａ実行フラグ３１や処理Ｂ実行フラグ３２を利用するのでなく、割込み要求フラグＡ、Ｂをオフにしてもよい。例えば、タスクＡが割込み要求フラグＢをオフにすることで、スケジューラ２３が実行可能状態のタスクＢを消去することができれば、スケジューラ２３がタスクＢを起床することがなく、処理Ｂが重複実行されることもない。
【００４３】
〔タスクＢがタスクＡより先に起床された場合の処理Ａ、処理Ｂの実行順の調整〕
タスクＢもタスクＡと同様に、処理Ｂだけでなく処理Ａを実行することができ、処理Ｂと処理Ａを実行するタイミングを調整することができる。
【００４４】
タスクＢは、次の２つの条件がいずれも成立する場合、処理Ｂよりも処理Ａを先に実行すべきであると判定する。
（ｂ１）割込み要求フラグＡがオン
（ｂ２）割込み要因Ａのキャプチャ時刻が割込み要因Ｂのキャプチャ時刻よりも前
図７は、タスクＢが起床される手順を模式的に示す図の一例である。図７において図５と同一部の説明は省略する。タスクＢは、割込み要求フラグＡがオンか否かを判定するフラグ判定部２５Ｂと、割込み要因Ａのキャプチャ時刻が割込み要因Ｂのキャプチャ時刻よりも前か否かを判定するキャプチャ時刻判定部２４Ｂと、を有する。また、タスクＢも処理Ａ実行部２６Ｂと処理Ｂ実行部２７Ｂを有し、処理Ｂだけでなく処理Ａを実行することができる。
【００４５】
フラグ判定部２５Ｂが上記（ｂ１）の条件が成立するか否かを判定し、キャプチャ時刻判定部２４Ｂが上記（２）の条件が成立するか否かを判定する。条件（１）（２）が成立する場合、タスクＢは処理Ｂよりも先に処理Ａを実行する。
【００４６】
図８は、タスクＢが処理Ａと処理Ｂの実行順を調整する際の状態遷移図の一例を示す。割込み要因Ｃ、Ａ、Ｂの順番で，３つの割込みが発生した場合を例に説明する。タスクＣの実行中に、割込み要因Ａが発生した場合、タスクＡは実行可能状態となる（図８（ａ））。この状態で、割込み要因Ｂが発生した場合、タスクＢはタスクＡと同様に実行可能状態となる（図８（ｂ））。
【００４７】
スケジューラ２３は割込み定義テーブル４０を参照し、オンになっている割込み要求フラグＡ〜Ｃをアドレス順に参照する。スケジューラ２３が、割込み要求フラグＡ〜Ｃのアドレスの影響で、例えば割込み要因Ａに対応したハンドラＡを起動する場合、タスクＢが処理Ａと処理Ｂの実行順を調整する状況にならない。しかしここでは、説明のため、スケジューラ２３がハンドラＢをディスパッチし、ハンドラＢがタスクＢを起床したものとする（図８（ｃ））。
【００４８】
このため、タスクＢは処理Ｂと処理Ａを実行するタイミングを調整する。フラグ判定部２５Ｂは上記（ｂ１）の条件が成立するか否かを判定し、キャプチャ時刻判定部２４Ｂは上記（ｂ２）の条件が成立するか否かを判定する。条件（ｂ１）（ｂ２）が成立する場合、処理Ａ実行部２６Ｂが処理Ｂよりも先に処理Ａを実行する。そして、処理Ａの実行の終了後、処理Ｂ実行部２７Ｂが処理Ｂを実行する。こうすることで、割込み要因が発生したタイミングと割込み要因に付随する処理の実行順序の整合性を保つことができる。
【００４９】
また、処理Ａの重複実行を回避するため、タスクＢの処理Ａ実行部２６Ｂが処理Ａを実行すると処理Ａ実行フラグ３１をオンにする。こうすることで、図８（ｄ）に示すように、タスクＡが実行状態になった際、処理Ａの重複実行を防止する。すなわち、タスクＡの処理Ａ実行部２６Ａが処理Ａを実行する際、処理Ａ実行フラグ３１を参照し、オンの場合は処理Ａを実行しないようにすることで、重複実行を防止できる。
【００５０】
また、タスクＢの処理Ｂ実行部２７Ｂは処理Ｂを実行すると処理Ｂ実行フラグ３２をオフにする。これは、タスクＢにおける処理Ｂの実行は、タスクＡ内の実行ではないからである。
【００５１】
〔動作手順〕
図９（ａ）は割込み要因Ａの発生によるＣＰＵ１４の動作手順を、図９（ｂ）は割込み要因Ｂの発生によるＣＰＵ１４の動作手順をそれぞれ示す。
【００５２】
例えば、ＣＰＵ１４はシステムクロックのサイクル毎にセンサＡ〜Ｃからの信号を検出しており、センサＡから割込み要求があると割込み定義テーブル４０の対応する割込み要求フラグＡをオンにする（Ｓ１０）。これにより、タスクＡは実行可能状態となる。
【００５３】
また、ＣＰＵ１４は割込み要求フラグＡをオンにした時の時刻情報をキャプチャ時刻として、キャプチャ時刻レジスタ３０の割込み要因Ａに対応した領域に記憶させる（Ｓ２０）。
【００５４】
同様にして、ＣＰＵ１４はシステムクロックのサイクル毎にセンサＡ〜Ｃからの信号を検出しており、センサＢから割込み要求があると割込み定義テーブル４０の対応する割込み要求フラグＢをオンにする（Ｓ１０）。これにより、タスクＢは実行可能状態となる。
【００５５】
また、ＣＰＵ１４は割込み要求フラグＢをオンにした時の時刻情報をキャプチャ時刻として、キャプチャ時刻レジスタ３０の割込み要因Ｂに対応した領域に記憶させる（Ｓ２０）。
【００５６】
図１０（ａ）はタスクＡが処理Ａと処理Ｂの実行順序を調整する手順の一例を、図１０（ｂ）はタスクＢが処理Ａと処理Ｂの実行順序を調整する手順の一例を、それぞれ示す。図１０（ａ）、図１０（ｂ）のフローチャート図の処理は、スケジューラ２３がハンドラＡ又はハンドラＢをＣＰＵ１４にディスパッチするとそれぞれどちらか一方がスタートする。
【００５７】
ハンドラＡがディスパッチされた場合から説明する。ハンドラＡはタスクＡを起床する。まず、タスクＡが起床されることで、割込み要求フラグＡの役割は終了したので、ハンドラＡは割込み要求フラグＡオフにする（Ｓ１１０）。
【００５８】
そして、フラグ判定部２５Ａは、（ａ１）割込み要求フラグＢがオンか否かを、キャプチャ時刻判定部２４Ａは（ａ２）割込み要因Ｂのキャプチャ時刻が割込み要因Ａのキャプチャ時刻よりも前か否かを判定する（Ｓ１２０）。
（ａ１）（ａ２）の条件が成立した場合（Ｓ１２０のＹｅｓ）、タスクＡは先に割込み要因が発生したタスクＢを追い越して起床されたと判定する（Ｓ１３０）。このため、処理Ｂ実行部２７Ａが処理Ａよりも先に処理Ｂを実行する（Ｓ１４０）。また、重複実行を回避するため、処理Ｂ実行部２７Ａは処理Ｂ実行フラグ３２をオンにする。
【００５９】
ついで、タスクＡの処理Ａ実行部２６Ａは、処理Ａ実行フラグ３１がオンかオフかを判定し、オフの場合にのみ処理Ａを実行する（Ｓ１５０）。タスクＡの処理Ａ実行部２６Ａが処理Ａを実行したので、処理Ａ実行フラグ３１をオフに設定する（Ｓ１６０）。
【００６０】
ハンドラＢがディスパッチされた場合を説明する。ハンドラＢはタスクＢを起床する。まず、タスクＢが起床されることで、割込み要求フラグＢの役割は終了したので、ハンドラＢは割込み要求フラグＢオフにする（Ｓ１１０）。
【００６１】
そして、フラグ判定部２５Ｂは、（ｂ１）割込み要求フラグＡがオンか否かを、キャプチャ時刻判定部２４Ａは（ｂ２）割込み要因Ａのキャプチャ時刻が割込み要因Ｂのキャプチャ時刻よりも前か否かを判定する（Ｓ１２０）。
（ｂ１）（ｂ２）の条件が成立した場合（Ｓ１２０のＹｅｓ）、タスクＢは先に割込み要因が発生したタスクＡを追い越して起床されたと判定する（Ｓ１３０）。このため、処理Ｂ実行部２７Ｂは処理Ｂよりも先に処理Ａを実行する（Ｓ１４０）。また、重複実行を回避するため、処理Ａ実行部２６Ｂは処理Ａ実行フラグ３１をオンにする。
【００６２】
ついで、タスクＢの処理Ｂ実行部２７Ｂは、処理Ｂ実行フラグ３２がオンかオフかを判定し、オフの場合にのみ処理Ｂを実行する（Ｓ１５０）。タスクＢの処理Ｂ実行部２７Ｂが処理Ｂを実行したので、処理Ｂ実行フラグ３２をオフに設定する（Ｓ１６０）。
【００６３】
以上説明したように、各タスクが割込み要求フラグがオンになっている割込み要求のキャプチャ時刻を比較してタスクの追い越しを検出することで、割込み要因が発生したタイミングと割込み要因に付随する処理の実行順序の整合性を保つことができる。ＣＰＵ１４の構成を修正する必要もないので、コスト増を最小限に抑制できる。
【００６４】
なお、上記では、タスクＡとタスクＢという２つのタスクの間で、処理Ａ、処理Ｂの実行順を調整したが、タスクＡはタスクＢ以外のタスクＤ、Ｅ、Ｆ…の処理Ｄ、Ｅ、Ｆを追い越しているか否かを判定することもでき、タスクＢはタスクＡ以外のタスクＤ、Ｅ、Ｆ…の処理Ｄ、Ｅ、Ｆを追い越しているか否かを判定することもできる。したがって、本実施形態の電子制御ユニット２０は、３以上のタスクが実行する処理の順番を、割込み要因が発生した順番と一致させることができる。一般にはスケジューラ２３が優先度の高いタスクを優先的にディスパッチするので、本実施形態の実行順序の調整方法は、特に優先度の同じタスクが含む処理の実行順序を調整する場合に有効である。
【図面の簡単な説明】
【００６５】
【図１】割込み要因の発生タイミングと、対応するハンドラの実行順の関係の一例を示す図である（従来図）。
【図２】電子制御ユニットが割込みを処理する手順を模式的に説明する図の一例である。
【図３】電子制御ユニットのハードウェア構成図の一例である。
【図４】処理Ａ、処理Ｂを説明する図の一例である。
【図５】タスクＡが起床される手順を模式的に示す図の一例である。
【図６】状態遷移図の一例である。
【図７】タスクＢが起床される手順を模式的に示す図の一例である。
【図８】タスクＢが処理Ａと処理Ｂの実行順を調整する際の状態遷移図の一例である。
【図９】割込み要因Ａの発生によるＣＰＵの動作手順と、割込み要因Ｂの発生によるＣＰＵの動作手順をそれぞれ示すフローチャート図の一例である。
【図１０】タスクＡが処理Ａと処理Ｂの実行順序を調整する手順の一例と、タスクＢが処理Ａと処理Ｂの実行順序を調整する手順の一例を、それぞれ示すフローチャート図の一例である。
【符号の説明】
【００６６】
１１    センサ
１４    ＣＰＵ
１８    アクチュエータ
２０    電子制御ユニット
２４Ａ、２４Ｂ    キャプチャ時刻判定部
２５Ａ、２５Ｂ    フラグ判定部
２６Ａ、２６Ｂ    処理Ａ実行部
２７Ａ、２７Ｂ    処理Ｂ実行部
３１    処理Ａ実行フラグ
３２    処理Ｂ実行フラグ
３０    キャプチャ時刻レジスタ
４０    割込み定義テーブル
【図１】
2010157014.tif 000003
【図２】
2010157014.tif 000004
【図３】
2010157014.tif 000005
【図４】
2010157014.tif 000006
【図５】
2010157014.tif 000007
【図６】
2010157014.tif 000008
【図７】
2010157014.tif 000009
【図８】
2010157014.tif 000010
【図９】
2010157014.tif 000011
【図１０】
2010157014.tif 000012