(57)【要約】      （修正有）【課題】低タスクの処理抜けを低減することが可能な電子制御装置を提供する。【解決手段】プログラムを優先度の高い順に演算装置に実行させる電子制御装置であって、第１のプログラムを定期的に起床させ、前記第１のプログラムを起床させる起床タイミングが到来した時に、前回の前記起床タイミングで起床された前記第１のプログラムの実行が完了していなかった場合、前記第１のプログラムの前記起床タイミングを、次回の前記第１のプログラムの前記起床タイミングまでの間で遅延させる。【選択図】図２
2013161363.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを記憶するプログラム記憶手段と、
前記プログラムを実行する演算装置と、
前記プログラムの優先度の高い順に、前記プログラムを前記演算装置に実行させる実行順序制御手段と、を有する電子制御装置であって、
第１のプログラムを定期的に起床させる第１のプログラム起床手段と、
前記第１のプログラムを起床させる起床タイミングが到来した時に、前回の前記起床タイミングで起床された前記第１のプログラムの実行が完了していなかった場合、前記第１のプログラムの前記起床タイミングを、次回の前記第１のプログラムの前記起床タイミングまでの間で遅延させる遅延手段と
を有することを特徴とする電子制御装置。
【請求項２】
前記第１のプログラムの前記起床タイミングを規定した起床タイミングテーブルを有し、
前記第１のプログラムの起床間隔よりも短い間隔で前記遅延手段を起床させる遅延手段起床手段と、
前記遅延手段の起床間隔毎にカウント値をカウントアップするタイミングカウント手段と、を有し、
前記第１のプログラム起床手段は、前記カウント値に基づき前記起床タイミングテーブルを参照して、前記第１のプログラムの前記起床タイミングか否かを判定し、
前記遅延手段は、前記第１のプログラムを起床させる前記起床タイミングが到来した時、前記遅延手段の起床間隔だけ後のタイミングを前記第１のプログラムの前記起床タイミングとして前記起床タイミングテーブルに登録する、
ことを特徴とする請求項１記載の電子制御装置。
【請求項３】
前記第１のプログラムを起床させる前記起床タイミングが到来した時、
前記遅延手段は、前回の前記起床タイミングで起床された前記第１のプログラムの実行が完了していない場合でも、前記遅延手段の起床間隔だけ後のタイミングが、前記起床タイミングテーブルにすでに前記起床タイミングとして規定されている場合、前記起床タイミングを遅延させない、
ことを特徴とする請求項２記載の電子制御装置。
【請求項４】
前記第１のプログラム起床手段は、前記第１のプログラムを起床した後、前記第１のプログラムが起床中であることを示すフラグをＯＮに設定し、
前記第１のプログラムにより実現される処理手段は前記フラグをＯＦＦに設定し、
前記遅延手段は、前記フラグの状態に基づき、前回の起床タイミングで起床された前記第１のプログラムの実行が完了しているか否かを判定する、
ことを特徴とする請求項２記載の電子制御装置。
【請求項５】
前記遅延手段を実現させる第２のプログラムは、前記第１のプログラムよりも優先度が高く、
前記第１のプログラムと前記第２のプログラムがどちらも起床されている場合、前記実行順序制御手段は前記第２のプログラムを先に前記演算装置に割り当てる、
ことを特徴とする請求項２記載の電子制御装置。
【請求項６】
プログラムを記憶するプログラム記憶手段と、
前記プログラムを実行する演算装置と、
前記プログラムの優先度の高い順に、前記プログラムを前記演算装置に実行させる実行順序制御手段と、を有する電子制御装置のプログラム実行方法であって、
第１のプログラム起床手段が、第１のプログラムを定期的に起床させるステップと、
前記第１のプログラムを起床させる起床タイミングが到来した時に、前回の起床タイミングで起床された前記第１のプログラムの実行が完了していなかった場合、遅延手段が、前記第１のプログラムの起床タイミングを、次回の前記第１のプログラムの起床タイミングまでの間で遅延させるステップと、
を有するプログラム実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、優先度の高い順にプログラムを実行する電子制御装置に関する。
【背景技術】
【０００２】
１つのマイコン上で複数のタスクやスレッド（以下、単にタスクという）が、時分割にＣＰＵへ割り当てられ実行されるマルチタスク処理が知られている。マルチタスク処理では、重要なタスクの実行を確保したり実行時間を保証するため、タスクに優先度を設定し、ＯＳ（Operating  System）などが高優先度のタスクを優先的にＣＰＵなどのリソースに割り当てるスケジューリング処理を行う場合がある（例えば、特許文献１参照。）。特許文献１には、現在、実行中のタスクよりも外部割込み要求の優先度の方が高い場合、当該実行中のタスクを一時中断し、外部割込み要求に対応するタスクを優先して実行した後、中断したタスクを再開するＣＰＵの負荷監視方法が開示されている。
【０００３】
車両の電子制御装置においても、いくつかの優先度の異なるタスクをスケジューリングしながら実行している。例えば、エンジンＥＣＵ（Electronic  Control  Unit）では、クランク角に同期して起床されるタスクが多く、いくつかの異なる優先度（例えば、低、中、高）のタスクがクランク角センサの割込みを契機に直接又は間接的に起床される。
【０００４】
図１は、従来のエンジンＥＣＵが実行するタスクを説明する図の一例である。図では、エンジンＥＣＵが上位タスクと低タスクを実行している。上位タスクはクランク角の割込みにより３０ＣＡ（クランクアングル）毎に起床され、その時のクランク角に応じて必要な処理を行ったり、その時のクランク角に応じて必要なタスクを起床する。図では点火タイミングを計算するＥＳＡ処理を行う低タスクを起床している。すなわち、上位タスクは、ＥＳＡタイミングテーブルを参照して（図のＥＳＡタイミング）、ＥＳＡの処理タイミングであることを示す“１”の場合、以下を行う。
・低タスクを起床する
・ＥＳＡイベントフラグをＯＮにする（ＥＳＡ処理の実行完了を検知するため）
これにより、低タスクは実行可能状態になり、不図示のスケジューラはＣＰＵなどのリソースが上位のタスクを実行中でない場合に限り、低タスクをＣＰＵなどのリソースに割り当てる。換言すると、上位タスクが実行中である場合、低タスクが実行されることはできないので、上位タスクが実行中である場合、低タスクは上位タスクの実行が完了すると実行される。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００３−０１５８８８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上位タスクの実行時間が長くなり、低タスクが実行される前に、低タスクが起床される次のタイミングが到来してしまう場合がある。この場合、すでにＥＳＡイベントフラグがＯＮなので、上位タスクは新たに低タスクを起床しない。したがって、低タスクは、起床されるべきタイミングで起床されず、処理が１回抜けてしまう。このように、従来のタスクの実行制御では、低タスクは実行のタイミングが後ずれするだけでなく、実行回数まで少なくなってしまう場合があった。
【０００７】
大半の場合、低タスクの実行遅れや処理抜けが発生しても、車両挙動が致命的な状態に至ることはないため、低タスクの実行遅れや処理抜けに対して厳密なフェールセーフ処理は用意されてない（上位タスクにはフェールセーフ処理が用意されている）。しかし、例として挙げた低タスクのＥＳＡ処理では、好ましくは定期的に実行さることが期待される処理が含まれている。例えば、ある状態の変化量を計算し、その変化量に応じて制御を変えるロジッグがこれに該当する。しかし、処理抜けが起きると、状態の変化量を誤計算することになり、結果的にロジックが正しく作用しないことになる。
【０００８】
本発明は、上記課題に鑑み、低タスクの処理抜けを低減することが可能な電子制御装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明は、プログラムを記憶するプログラム記憶手段と、前記プログラムを実行する演算装置と、前記プログラムの優先度の高い順に、前記プログラムを前記演算装置に実行させる実行順序制御手段と、を有する電子制御装置であって、第１のプログラムを定期的に起床させる第１のプログラム起床手段と、前記第１のプログラムを起床させる起床タイミングが到来した時に、前回の前記起床タイミングで起床された前記第１のプログラムの実行が完了していなかった場合、前記第１のプログラムの前記起床タイミングを、次回の前記第１のプログラムの前記起床タイミングまでの間で遅延させる遅延手段と、を有することを特徴とする。
【発明の効果】
【００１０】
低タスクの処理抜けを低減することが可能な電子制御装置を提供することができる。
【図面の簡単な説明】
【００１１】
【図１】従来のエンジンＥＣＵが実行するタスクを説明する図の一例である。
【図２】本実施形態のタスクの実行制御の概略を説明する図の一例である。
【図３】車両に搭載される電子制御装置のハードウェア構成図の一例である。
【図４】本実施形態の電子制御装置の機能を模式的に説明する図の一例である。
【図５】ＥＳＡタイミングテーブルと遅延処理を説明する図の一例である。
【図６】上位タスクの動作手順を示すフローチャート図の一例、及び、低タスクの動作手順を示すフローチャート図の一例をそれぞれ示す図である。
【図７】低タスクのキューイングを説明する図の一例である。
【発明を実施するための形態】
【００１２】
以下、本発明を実施するための形態について図面を参照しながら説明する。
図２は、本実施形態のタスクの実行制御の概略を説明する図の一例である。なお、図２では比較のため図１で説明した従来のタスクの実行制御が含まれている。また、上位タスクは３０ＣＡ（クランクアングル）毎に起床されるが、図では低タスクと関係する上位タスクのみを示している。
【００１３】
時刻ｔ１：上位タスクはＥＳＡタイミングが“１”なので、ＥＳＡイベントフラグをＯＮにする。また、上位タスクは低タスクを起床する。上位タスクの実行が終了すると、低タスクが実行される。低タスクはＥＳＡイベントフラグをＯＦＦにする。
【００１４】
時刻ｔ２：上位タスクはＥＳＡタイミングが“１”なので、ＥＳＡイベントフラグをＯＮにし、低タスクを起床する。しかし、上位タスクの実行時間が長いため、低タスクは実行可能状態のまま、実行されない。
【００１５】
時刻ｔ３：上位タスクはＥＳＡタイミングが“１”なので、低タスクの実行タイミングであると判定するが、ＥＳＡイベントフラグがすでにＯＮであることを検出する。本実施形態の上位タスクはＥＳＡイベントフラグがすでにＯＮである場合、ＥＳＡタイミングを３０ＣＡ遅延させる。
【００１６】
また、次回の３０ＣＡにおいても、ＥＳＡイベントフラグがすでにＯＮである場合、上位タスクはＥＳＡタイミングを３０ＣＡ遅延させる。この処理が本実施形態の特徴の１つとなる。これにより、上位タスクは、次回の３０ＣＡで再度、低タスクを起床する機会を得ることができる。図では時刻ｔ３の後、上位タスクの実行が完了したので、実行可能状態の低タスクが実行されている。
【００１７】
時刻ｔ４：３０ＣＡ後に起床された上位タスクは、遅延されたＥＳＡタイミングが“１”なので、低タスクの実行タイミングであると判定する。よって、本来は時刻ｔ３で起床されるはずだった低タスクが起床され、実行される。
【００１８】
このように、本実施形態の電子制御装置は、従来は、タスク抜けが生じていた時刻ｔ４の低タスクを、ＥＳＡタイミングを３０ＣＡずつ遅延させることで実行できる。よって、タスク抜けの発生を抑制することができる。
【００１９】
なお、ＥＳＡタイミングを３０ＣＡずつ遅延させることで、予めＥＳＡタイミングテーブルに“１”が登録された正規のＥＳＡタイミング（図の時刻ｔ５）に到達した場合、上位タスクはＥＳＡイタイミングの遅延を終了する。この場合は、低タスクが１回抜けることになるが、多くの場合は正規のＥＳＡタイミングに到達する前に低タスクが実行されるとしてよい。
【００２０】
〔構成例〕
図３は、車両に搭載される電子制御装置１００のハードウェア構成図の一例である。電子制御装置１００は、マイコン５０、電源回路２３、不図示の入出力インタフェース、その他ＩＰ（Intellectual  Property）などを有している。この電子制御装置（ＥＣＵ：Electronic  Control  Unit）１００は、エンジンＥＣＵに搭載されるものとするが、本実施形態のタスクの実行制御は特定のＥＣＵにのみ搭載されるものではない。例えば、ブレーキＥＣＵ、ボディＥＣＵ、ナビゲーションＥＣＵ（ＡＶ・情報処理ＥＣＵ）、ゲートウェイＥＣＵ等にも好適に適用できる。また、複数の機能が１つに統合されたＥＣＵに対しても適用できる。
【００２１】
電源回路２３はＩＧ−ＳＷ２４のＯＮ／ＯＦＦを検出する。ＩＧ−ＳＷ２４のＯＮを検出した場合、電源回路２３はバッテリ２５から供給される電力を必要に応じて降圧して、マイコン５０などに供給する。また、ＩＧ−ＳＷ２４のＯＦＦを検出した場合、例えば、ＲＡＭにだけ電力を供給したまま各回路への電力の供給を停止する。
【００２２】
マイコン５０は、メインバス２１に接続されたＣＰＵ１１、ＲＡＭ１２、ＲＯＭ１３、ＩＮＴＣ１４、ＷＤＴ１５、及び、ＤＭＡＣ１６を有し、周辺バス２２に接続されたＩ／Ｏ１８、ＡＤＣ（Analog  to  Digital  Converter）１９、及び、ＣＡＮコントローラ２０を有している。メインバスと周辺バス２２はブリッジ１７を介して通信可能に接続されている。
【００２３】
ＣＰＵ１１は１つ以上のコア１〜ｎを有する。１つのチップに複数のコア１〜ｎを有するＣＰＵ１１でなく、複数のＣＰＵ１１が独立にメインバス２１に接続されていてもよい。
【００２４】
ＲＯＭ１３はフラッシュメモリなどの不揮発メモリであり、ＣＰＵ１１が実行するプログラム３０、ＯＳ、ミドルウェア、デバイスドライバ、マップ及びパラメータ等を記憶している。
【００２５】
ＩＮＴＣ１４はセンサ信号やタイマなど、各種の割込み要求に応じてフラグがセットされる割込みレジスタを有している。ＩＮＴＣ１４は、割込みレジスタに設定される割り込み要求を、割込みの優先度に基づき調停してＣＰＵ１１に通知する。これによりＣＰＵ１１は、例えばＩＳＲ（Interrupt  Service  Routine）を実行して、割込みした周辺機器に応じて定められているタスクを起床させる。ＷＤＴ１５は、動作クロックをカウントして計測した時間が予め定められたリセット時間に達すると（オーバーフローすると）、異常検出（マイコンリセット、ＣＰＵ割込み等）する回路である。
【００２６】
ＲＡＭ１２は、ＣＰＵ１１がプログラム３０を実行するための作業領域である。ＣＰＵ１１はＲＯＭ１３からプログラム３０を読み込み、また、必要であればメインバス２１を介してＲＡＭ１２からデータを読み出しプログラム３０を実行する。ＤＭＡＣ１６は、ＣＰＵ１１からの指示によりＲＡＭ１２のデータをＩ／Ｏ１８などの送信バッファに記憶させる。また、ＤＭＡＣ１６は、周辺機器からＩ／Ｏ１８の受信バッファに記憶されたデータを、予め定められたＲＡＭ１２の記憶領域に記憶させ、ＩＮＴＣ１４を介してＣＰＵ１１に通知する。
【００２７】
ブリッジ１７は、メインバス２１と周辺バス２２との間の周波数等の違いを吸収し、メインバス側の回路と周辺バス側の回路のデータを互いに受け渡す。ブリッジ１７は、マルチプレクサやブリッジ回路などであり、チャネル毎に、１つ以上のＩ／Ｏ１８、ＡＤＣ１９、及び、ＣＡＮコントローラ２０とそれぞれ接続されており、これらの周辺機器とデータを送受信する。
【００２８】
Ｉ／Ｏ１８は、各種のセンサ、アクチュエータ２７、スイッチ、他のマイコンと通信するために使用される。センサの１つとしてＮＥセンサ（クランク角センサ）２６が接続されている。Ｉ／Ｏ１８はシリアル通信が可能になっており、通信規格としてＩ２Ｃ、ＵＡＲＴ等が知られている。ＡＤＣ１９は、各種のセンサが検出したアナログ信号をデジタル信号に変換する。ＣＡＮコントローラ２０は、車載ネットワークを介して接続された他のＥＣＵと通信するための通信装置である。
【００２９】
図４（ａ）は、本実施形態の電子制御装置１００の機能を模式的に説明する図の一例である。ＮＥセンサ２６は、クランクシャフトタイミングロータの突起部とのエアギャップの変化からクランク角を検出する。クランクシャフトタイミングロータの円周には例えば１０度毎に突起部が設けられているため、クランクシャフトの回転に連動して突起部が移動することで、ＮＥセンサ２６のクランクシャフトタイミングローラのエアギャップが変化する。ＮＥセンサ２６はエアギャップの変化を起電力に変換し、起電力の周期的な変化からクランクシャフトの回転角を検出する。Ｉ／Ｏ１８は起電力を矩形波に成形して、矩形波の数をカウントする。そして、カウント値が３回になるとＩＮＴＣ１４に割込み要求する。したがって、３０ＣＡ毎にＮＥ割込みが生じる。なお、４サイクルエンジンの場合、燃焼、排気、吸気、圧縮の各工程を経る間にクランクシャフトが２回転するため、クランクアングル（ＣＡ）は０〜６９０度の値を取る。
【００３０】
ＮＥ割込みによりＣＰＵがＩＳＲ３１を実行すると、ＩＳＲ３１は例えばシステムコールするか又は直接、予め定められている上位タスク３２を起床させる。上位タスク３２は、以下の処理を行う。上位タスク３２は一種類であるとは限らず、また、低タスクは複数あることが一般的である。
【００３１】
（１）クランクカウンタ３４の値を読み出す。なお、クランクカウンタ３４は、３０ＣＡ毎に１つカウントアップするカウンタであるので、０〜６９０ＣＡの間に、０〜２３の整数値を取る。
【００３２】
（２）クランクカウンタ３４の値に基づきＥＳＡタイミングテーブル３５を参照して、ＥＳＡ処理タイミングか否かを判定する。ＥＳＡタイミングテーブル３５については後述する。
【００３３】
ＥＳＡ処理タイミングでない場合、上位タスク３２はクランク角に応じた処理が必要であればそれを行う。なお、ＥＳＡ処理タイミングの場合でも、上位タスク３２はクランク角に応じた処理が必要であれそれを行う。
【００３４】
（３）ＥＳＡ処理タイミングの場合、上位タスク３２はＥＳＡイベントフラグ３６を参照して、前回、起床した低タスク３３が終了しているか否かを判定する（ＥＳＡイベントフラグ３６がＯＦＦであるか否かを判定する）。ＥＳＡイベントフラグ３６は、上位タスク３２がＯＮにして、低タスク３３がＯＦＦにするフラグであるので、ＥＳＡイベントフラグ３６がＯＮかＯＦＦかにより、低タスク３３の実行が完了したか否かが検知される。
【００３５】
（i）  ＥＳＡイベントフラグ３６がＯＦＦの場合、上位タスク３２は、ＥＳＡイベントフラグ３６をＯＮにする。また、上位タスク３２の起床部３８は、例えばシステムコールするなどして低タスク３３を起床する。この低タスク３３がＥＳＡ処理を行うタスクである。低タスク３３がＣＰＵ１１に割り当てられ実行状態になると、ＥＳＡイベントフラグ３６を参照し、ＯＮであればＥＳＡ処理を行う。
【００３６】
（ii）  ＥＳＡイベントフラグ３６がＯＮの場合、上位タスク３２の遅延処理部３９は、次の３０ＣＡにおけるＮＥ割込みで、低タスク３３を起床できるようにＥＳＡタイミングテーブルを書き換える（以下、この処理を遅延処理という場合がある。）。これにより、起床部３８は、次回のＮＥ割込みまでに、低タスク３３が実行された場合には、次の３０ＣＡにおけるＮＥ割込みで新たに低タスク３３を起床できる。
【００３７】
なお、遅延処理の際、遅延処理部３９は調整区間終了フラグ４０を参照する。調整区間終了フラグ４０は、クランクカウンタの値がＥＳＡタイミングテーブル３５を書き換えてよい場合にＯＦＦとなるフラグである。
【００３８】
（４）なお、遅延処理部３９は、ＥＳＡタイミングテーブル３５において書き換え対象のクランクカウンタに“１”が対応づけられている場合（正規のＥＳＡタイミングであることを示す場合）、書き換えを行わない（遅延処理を行わない）。これは、遅延処理を継続しても、上位タスク３２が終了した後にＥＳＡ処理が行われることになるため、上位タスク３２に対しては結局、処理抜けが生じていることになるためである。つまり、遅延処理を継続する効果が見込めない。また、正規のＥＳＡタイミングで低タスク３３を起床すればよいためである。また、上位タスク３２が、次回の正規のＥＳＡタイミングまでに実行完了しない場合、上位タスク３２のロジックを見直すことが有効である。
【００３９】
このように、本実施形態ではＥＳＡタイミングを３０ＣＡずつ遅延させることで、低タスク３３のＥＳＡ処理のタスク抜けを低減できる。なお、ＥＳＡ処理は、例えば、エンジン回転数と吸入空気量に基づきマップを参照して点火タイミングの基本進角を決定する処理である。ＥＳＡ処理ではこれをさらに温度などで補正して、最終的な点火タイミングを決定する。
【００４０】
低タスク３３には、ＥＳＡ処理の他、ＩＳＣ（アイドル・スピード・コントロール）処理、３６０ＣＡ処理が含まれる。ＩＳＣ処理はエンジン回転数をアイドル回転数になるようにスロットルバルブの開度を調整する処理である。３６０ＣＡ処理は例えば、カムポジションセンサの信号を利用した気筒判別処理である。各低タスク３３は予めＥＳＡタイミングテーブル３５に対応するスケジュール表、及び、ＥＳＡイベントフラグ３６に対応するイベントフラグを持っている。したがって、上位タスク３２は、ＥＳＡ処理と同様に各低タスクの処理抜けを抑制することができる。
【００４１】
図４（ｂ）は各タスクの実行のスケジューリングを説明する図の一例である。各タスクは、例えば、プログラムの起動時にタスクＩＤ、開始アドレス・終了アドレス、優先度等を引数にして、プログラムがシステムコールすることで生成される。スケジューラ３７は、タスクＩＤ等をＴＣＢ（タスクコントロールブロック）４１に登録する。ＴＣＢ４１には、これら引数に加え、タスクの状態やコンテキスト（例えば、汎用レジスタ、プログラムカウンタ、スタックポインタ、ステータスフラグの状態など）が登録される。
【００４２】
タスクの状態には、例えば休止状態、待機状態、実行待ち状態、及び、実行状態がある。休止状態は生成直後又は実行が完了したタスクの状態である。実行状態は、ＣＰＵ１１のコアにより現在、実行されているタスクの状態をいう。実行可能状態は、周辺機器の入出力などが完了し、実行の準備が整ったタスクの状態をいう。休止状態から実行可能状態への遷移を起床という。待ち状態は、周辺機器が入出力を完了させるなど、実行に必要な条件が整うまで待機しているタスクの状態をいう。
【００４３】
生成された直後のタスクは休止状態になっている。休止状態のタスクは起床により実行可能状態となる。スケジューラ３７は、実行可能状態のタスクを実行キューに登録する。実行キューは優先度毎に設けられており、同じ優先度のタスクは実行可能状態になった順に登録される。ＣＰＵ１１により実行されている実行状態のタスクは、実行完了により休止状態又は消滅する。ＣＰＵ１１が開放されると、スケジューラ３７は、実行キューの最も優先度が高いキューに登録されているタスク（図では上位タスク）から順番にＣＰＵ１１に割り当てる。ＣＰＵ１１がタスクを実行完了する毎にこのような割り当てを行うことで、優先度の高いタスクほど優先的に実行することができる。
【００４４】
したがって、これまで説明したように、上位タスクが長い時間、ＣＰＵ１１により実行されていると（実行状態になっていると）、低タスク３３は実行可能状態のまま実行されない場合がある。
【００４５】
〔ＥＳＡタイミングテーブルと遅延処理〕
図５（ａ）は、ＥＳＡタイミングテーブル３５の一例を示す図である。クランクカウンタ３４の値０〜２３に対応づけて、ＥＳＡタイミングが登録されている。ＥＳＡタイミングが“１”の場合、その時のクランクカウンタの値がＥＳＡ処理のタイミングであることを示す。４気筒エンジンの場合、ＥＳＡ処理は０ＣＡを起点に１８０ＣＡ毎に行われる。このため、ＥＳＡタイミングテーブル３５では、クランクカウンタ３４の値が０、６、１２及び１８の時に、ＥＳＡタイミングが“１”になる。これらクランクカウンタ（０、６、１２及び１８）が正規のＥＳＡタイミングである。
【００４６】
図５（ｂ）は、ＥＳＡタイミングテーブル３５の書き換えを説明する図の一例である。クランクカウンタ３４の値が“１２”であるとして説明する。また、説明のためクランクカウンタの値が“１２”から“１８”の間の調整区間終了フラグ４０の状態を示した。調整区間終了フラグ４０は、ＯＮの場合にＥＳＡタイミングの調整区間の終了を示すフラグである。よって、調整区間終了フラグ４０は、ＥＳＡタイミングを書き換えてよい（調整してよい）タイミングでＯＦＦとなる。
【００４７】
クランクカウンタ３４の値が“１２”になると、上位タスク３２はＥＳＡタイミングテーブル３５においてＥＳＡタイミングが“１”であることを検出する。そして、ＥＳＡイベントフラグ３６がＯＮの場合、調整区間終了がＯＦＦなので、遅延処理部３９は遅延処理を行う。
【００４８】
遅延処理部３９は、クランクカウンタ３４の値が“１３”のＥＳＡタイミングを“０”から“１”に書き換える。これにより、次回、ＮＥ割込みが発生し、起床部３８がクランクカウンタ３４の値である“１３”に基づき、ＥＳＡタイミングテーブル３５を参照すると、ＥＳＡタイミングは“１”である。このため、起床部３８は、ＥＳＡイベントフラグ３６がＯＦＦであれば低タスク３３を起床することができる。
【００４９】
図５（ｃ）は遅延処理の終了を説明する図の一例である。
（i）クランクカウンタ３４の値が“１３”になった時、ＥＳＡイベントフラグ３６がＯＮの場合、遅延処理部３９は、調整区間終了フラグ４０がＯＦＦなので、クランクカウンタ３４の値が“１４”のＥＳＡタイミングを“０”から“１”に書き換える。この時、クランクカウンタ３４の値が“１３”のＥＳＡタイミングを“０”に戻す。
（ii）クランクカウンタ３４の値が“１４”になった時、ＥＳＡイベントフラグ３６がＯＮの場合、遅延処理部３９は、調整区間終了フラグ４０がＯＦＦなので、クランクカウンタ３４の値が“１５”のＥＳＡタイミングを“０”から“１”に書き換える。この時、クランクカウンタ３４の値が“１４”のＥＳＡタイミングを“０”に戻す。
（iii）クランクカウンタ３４の値が“１５”になった時、ＥＳＡイベントフラグ３６がＯＮの場合、遅延処理部３９は、調整区間終了フラグ４０がＯＦＦなので、クランクカウンタ３４の値が“１６”のＥＳＡタイミングを“０”から“１”に書き換える。この時、クランクカウンタ３４の値が“１５”のＥＳＡタイミングを“０”に戻す。
（iv）クランクカウンタ３４の値が“１６”になった時、ＥＳＡイベントフラグ３６がＯＮの場合、遅延処理部３９は、調整区間終了フラグ４０がＯＦＦなので、クランクカウンタ３４の値が“１７”のＥＳＡタイミングを“０”から“１”に書き換える。この時、クランクカウンタ３４の値が“１６”のＥＳＡタイミングを“０”に戻す。
（v）クランクカウンタ３４の値が“１７”になった時、ＥＳＡイベントフラグ３６がＯＮであっても、調整区間終了がＯＮなので、クランクカウンタ３４の値が“１８”のＥＳＡタイミングは“１”のままである。遅延処理部３９は、クランクカウンタ３４の値が“１７”のＥＳＡタイミングを“０”に戻す。
【００５０】
すなわち、クランクカウンタ３４の値が“１７”になった時、次回の３０ＣＡでは正規のＥＳＡタイミングになるので、この後、さらに書き換え処理を継続する必要性が乏しい。よって、遅延処理部３９は遅延処理を終了する。ただし、クランクカウンタ３４の値が“１８”になった時、ＥＳＡイベントフラグ３６がＯＮであれば、遅延処理部３９はクランクカウンタ３４の値が“１９”のＥＳＡタイミングを“０”から“１”に書き換える。
【００５１】
したがって、１つのＥＳＡタイミングは、次の正規のＥＳＡタイミングが到来するまでに限り遅延される。換言すると、複数のＥＳＡタイミングが重複して遅延されることはない。
【００５２】
〔動作手順〕
図６（ａ）は、上位タスク３２の動作手順を示すフローチャート図の一例を、図６（ｂ）は低タスク３３の動作手順を示すフローチャート図の一例をそれぞれ示す。
【００５３】
図６（ａ）の上位タスク３２の動作手順は３０ＣＡ毎に繰り返し実行される。上位タスク３２は、ＥＳＡタイミングテーブル３５において、現在のクランクカウンタ３４に対応づけられたＥＳＡタイミングが“１”か否かを判定する（Ｓ１０）。“１”でない場合（Ｓ１０のＮｏ）、低タスク３３を起床する必要がないので図６（ａ）の処理は終了する。
【００５４】
ＥＳＡタイミングが“１”の場合（Ｓ１０のＹｅｓ）、上位タスク３２はＥＳＡ処理が完了しているか否かを判定する（Ｓ２０）。すなわち、ＥＳＡイベントフラグ３６が“ＯＦＦ”か否かを判定する。
【００５５】
ＥＳＡ処理が完了している場合（Ｓ２０のＹｅｓ）、上位タスク３２はＥＳＡイベントフラグ３６をＯＮに設定する（Ｓ３０）。
【００５６】
そして、起床部３８は低タスク３３を起床する（Ｓ４０）。これにより、低タスク３３は実行可能状態となり、実行キューに登録される。実行キューにこの低タスク３３より優先度が高いタスクがなくなると、ＣＰＵ１１に割り当てられる。
【００５７】
ステップＳ２０に戻り、ＥＳＡ処理が完了していない場合（Ｓ２０のＮｏ）、遅延処理部３９は、調整区間終了フラグがＯＦＦである場合にのみ、次回のクランクカウンタ３４に対応づけられたＥＳＡタイミングを“０”から“１”に書き換える（Ｓ５０）。これにより、ＥＳＡ処理を遅延させることができる。
【００５８】
そして、遅延処理部３９は、次々回のＥＳＡタイミングが元々、ＥＳＡタイミングだったか否かを判定する（Ｓ６０）。すなわち、次々回のクランクカウンタ３４に対応づけられたＥＳＡタイミングが“１”か否かを判定する。
【００５９】
次々回のＥＳＡタイミングが元々、ＥＳＡタイミングだった場合（Ｓ６０のＹｅｓ）、遅延処理部３９は調整区間終了フラグ４０をＯＮに設定する（Ｓ７０）。こうすることで、次の割込み周期でステップＳ５０が実行される際、次回のクランクカウンタ３４に対応づけられたＥＳＡタイミングを“１”のままにすることができる。
【００６０】
次々回のＥＳＡタイミングが元々、ＥＳＡタイミングでなかった場合（Ｓ６０のＮｏ）、遅延処理部３９は調整区間終了フラグ４０をＯＦＦに設定する（Ｓ８０）。こうすることで、次の割込み周期のステップＳ５０で次回のクランクカウンタ３４に対応づけられたＥＳＡタイミングを“１”に書き換えることができる。
【００６１】
図６（ｂ）の動作手順は、低タスク３３がＣＰＵ１１に割り当てられるとスタートする。低タスク３３は、ＥＳＡ処理がＥＳＡ処理待ち状態か否かを判定する（Ｓ１１０）。すなわち、ＥＳＡイベントフラグ３６がＯＮか否かを判定する。ＥＳＡイベントフラグ３６がＯＮであることは、低タスク３３が起床されてからＥＳＡ処理が実行されていないことを意味する。
【００６２】
ＥＳＡ処理がＥＳＡ処理待ち状態でない場合（Ｓ１１０のＮｏ）、低タスク３３は処理を終了する。この場合、低タスク３３はシステムコールすることで休止状態に遷移する。
【００６３】
ＥＳＡ処理がＥＳＡ処理待ち状態の場合（Ｓ１１０のＹｅｓ）、低タスク３３はＥＳＡイベントフラグ３６をＯＦＦにする（Ｓ１２０）。ＥＳＡイベントフラグ３６をＯＦＦにすることで、上位タスク３２及び低タスク３３はＥＳＡ処理が実行完了したことを検知でき、遅延処理を停止できる。
【００６４】
また、低タスク３３はＥＳＡ処理を実行する（Ｓ１３０）。すなわち、点火タイミングを決定する。この後、低タスク３３はシステムコールすることで休止状態に遷移する。
【００６５】
〔効果の補足〕
本実施形態が課題とする低タスク３３のタスク抜けは、例えば、低タスク３３の起動要求をキューイングしておき、ＣＰＵ１１が上位タスク３２の実行を完了したら、スケジューラ３７が連続的に低タスク３３をＣＰＵ１１に割り当てることで抑制することも考えられる。
【００６６】
図７は、低タスク３３のキューイングを説明する図の一例である。上位タスク３２は、ＥＳＡタイミングテーブル３５において、クランクカウンタ３４の値に対応するＥＳＡタイミングが“１”で、ＥＳＡイベントフラグ３６がＯＮの場合、低タスク３３をキューイングしておく。図では、低タスク１が実行されていないため、低タスク２がキュー４２にキューイングされている。
【００６７】
このようなキューイングに対応してスケジューラ３７は、ＣＰＵ１１が上位タスク３２の実行を完了すると、低タスク１をＣＰＵ１１に割り当てる。また、キュー４２を検索し、タスクが登録されていると、低タスク２を実行可能状態にする。これにより、低タスク１の実行が終了すれば、連続して低タスク２が実行される。したがって、低タスクのタスク抜けを低減できる。
【００６８】
しかしながら、このような手法はキュー４２の実装、スケジューラ３７によるキューイング処理などが必要になってしまうという不都合がある。また、低タスク３３は、上位タスク３２の後に実行されることが本来のスケジューリングであるため、連続して低タスク３３を実行すると本来の順序性が維持されない。
【００６９】
これに対し、本実施形態のタスクの実行制御では、キュー４２やキューイングが不要であり、ＥＳＡタイミングテーブル３５を書き換えるだけで実現することができる。
【００７０】
以上説明したように、本実施形態の電子制御装置１００は、定周期毎に実行される低タスクが正規の実行タイミングで実行されなくても、次回の実行タイミングまでの間であれば、実行することができるので、タスク抜けを低減できる。
【００７１】
また、蓄積された割込み要求を実行するため要求分の処理を連続で実行するとキューイング等が必要となってしまうが、本実施形態ではＥＳＡタイミングテーブル３５の書き換えだけでタスク抜けを低減できる。
【符号の説明】
【００７２】
１１    ＣＰＵ
２６    ＮＥセンサ
３１    ＩＳＲ
３２    上位タスク
３３    低タスク
３４    クランクカウンタ
３５    ＥＳＡタイミングテーブル
３６    ＥＳＡイベントフラグ
３７    スケジューラ
３８  起床部
３９    遅延処理部
１００  電子制御装置
【図１】
2013161363.tif 000003
【図２】
2013161363.tif 000004
【図３】
2013161363.tif 000005
【図４】
2013161363.tif 000006
【図５】
2013161363.tif 000007
【図６】
2013161363.tif 000008
【図７】
2013161363.tif 000009