(57)【要約】【課題】第一タスクの遅れに起因して次に実行予定の第二タスクについてタスク抜けが発生するのを抑制可能な電子制御装置を提供すること。【解決手段】電子制御装置の制御部は、先に実行するタスクを第一タスク、当該第一タスクの次に実行するタスクを第二タスクとして、第一タスクを実行する際、Ｓ４０２，Ｓ４１２，Ｓ４２２，Ｓ４３２等の判断処理により、第二タスクのタスク抜けを招く兆候があるか否かを判断する。判断処理によってタスク抜けを招く兆候があると判断された場合に、Ｓ４８１，Ｓ４８２，Ｓ４８３，Ｓ４８４等の負荷分散処理を実行し、第一タスクに含まれる複数の処理のうちの少なくとも一つの処理が実行されるタイミングを、第一タスクが実行される第一の期間とは異なる第二の期間へと変更して、制御部にかかる負荷を分散させる。【選択図】図４
2019087004.tif 000002
【特許請求の範囲】
【請求項１】
複数のタスクをタスクごとに決められた周期で実行するように構成された制御部（２）を有し、
前記制御部は、
前記複数のタスクのうち、先に実行するタスクを第一タスク、当該第一タスクの次に実行するタスクを第二タスクとして、
前記第一タスクを実行する際に、前記第一タスク中に含まれる複数の処理の進行状況に基づいて、前記第二タスクのタスク抜けを招く兆候があるか否かを判断する判断処理（Ｓ４０２−Ｓ４０３，Ｓ４１２−Ｓ４１３，Ｓ４２２−Ｓ４２３，Ｓ４３２−Ｓ４３３，Ｓ４４２−Ｓ４４３，Ｓ４５２−Ｓ４５３，Ｓ４６２−Ｓ４６３，Ｓ４７２−Ｓ４７３，Ｓ５０１−Ｓ５０３）と、
前記判断処理によって前記タスク抜けを招く兆候があると判断された場合に、前記第一タスクに含まれる複数の処理のうちの少なくとも一つの処理が実行されるタイミングを、前記第一タスクが実行される第一の期間とは異なる第二の期間へと変更して、前記制御部にかかる負荷を分散させる負荷分散処理（Ｓ４８１−Ｓ４９２，Ｓ３０４−Ｓ３０６）と
を実行するように構成されている
電子制御装置。
【請求項２】
請求項１に記載の電子制御装置であって、
前記制御部は、前記判断処理において、前記第一タスク中に含まれる複数の処理それぞれを開始するタイミングが、前記第二タスクの開始予定タイミングまでに所定時間未満の余裕しかないタイミングである場合に、前記タスク抜けが発生する兆候があると判断する（Ｓ５０２−Ｓ５０３）ように構成されている
電子制御装置。
【請求項３】
請求項２に記載の電子制御装置であって、
前記制御部は、前記判断処理によって前記タスク抜けを招く兆候があると判断された場合に、前記負荷分散処理において、前記第一タスク中に含まれる複数の処理のうち、前記第二タスクの開始予定タイミングまでに所定時間未満の余裕しかないタイミングに開始される処理について、当該処理が実行されるタイミングを前記第二の期間へと変更する（Ｓ４８１−Ｓ４９２）ように構成されている
電子制御装置。
【請求項４】
請求項１から請求項３までのいずれか一項に記載の電子制御装置であって、
前記制御部は、前記第一タスクを周期的に実行するたびに、前記判断処理及び前記負荷分散処理を実行するように構成されている
電子制御装置。
【請求項５】
請求項１から請求項４までのいずれか一項に記載の電子制御装置であって、
前記制御部は、複数の期間それぞれを対象に、各期間に実行されるタスクの実行時間を計測する計測処理（Ｓ３０３，Ｓ６０１−Ｓ６０７）を実行可能に構成され、
前記制御部は、前記負荷分散処理において、前記計測処理によって計測されたタスクの実行時間に基づいて、前記制御部にかかる負荷が低い期間を前記第二の期間として選択する（Ｓ３０５−Ｓ３０６）ように構成されている
電子制御装置。
【請求項６】
請求項５に記載の電子制御装置であって、
前記制御部は、前記負荷分散処理において、前記計測処理によって複数回にわたって計測されたタスクの実行時間の平均値に基づいて、前記制御部にかかる負荷が低い期間を前記第二の期間として選択するように構成されている
電子制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、電子制御装置に関する。
【背景技術】
【０００２】
タスクごとに設定される優先度に従って、優先度の高いタスクほど優先的に実行されるように、タスクの実行タイミングが管理される電子制御装置が知られている（例えば、特許文献１参照。）。このような電子制御装置において、装置にかかる負荷が高い場合等には、低優先度のタスクに実行機会が与えられず、タスク抜けが発生することがある。そのため、下記特許文献１に記載の技術では、タスク抜けを抑制したいタスクについては、優先度を動的に変更して、より高い優先度を設定することにより、実行頻度が高くなるようにしている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１６−１７３７５０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
以下、本開示では、電子制御装置が実行する複数のタスクのうち、電子制御装置が先に実行するタスクを第一タスク、当該第一タスクの次に電子制御装置が実行するタスクを第二タスクと称する。電子制御装置が複数のタスクを実行する際、第一タスクの実行完了までに想定以上の時間を要した場合に、第二タスクの起床に失敗することがある。すなわち、第一タスクが原因で第二タスクのタスク抜けを招くことがある。このような状況に至りやすい場合に、上記特許文献１に記載の技術を利用すれば、タスク抜けのおそれがある第二タスクに対し、より高い優先度を設定することはできる。
【０００５】
しかし、第二タスクの優先度を高くするだけでは、第一タスクの実行完了までに想定以上の時間を要する、という問題については、何ら解決されないまま残る。このような問題に対しては、例えば、設計者が手作業で処理タイミング等を変更する、といった対策が取られる。具体的には、第一タスクが原因で第二タスクのタスク抜けが発生する場合には、第一タスク中に含まれる複数の処理について処理時間を計測する。その調査結果を参考にして、処理の一部を別タスクに分けて第一タスクとは別のタイミングで実行する等、タスクのスケジュールの見直しを行っている。しかし、設計者が上記のような作業を行うには、相応の工数を要するという問題がある。
【０００６】
本開示の一局面においては、第一タスクの遅れに起因して次に実行予定の第二タスクについてタスク抜けが発生するのを抑制可能な電子制御装置を提供することが望ましい。
【課題を解決するための手段】
【０００７】
本開示の一態様は、電子制御装置（１）であって、複数のタスクをタスクごとに決められた周期で実行するように構成された制御部（２）を有する。制御部は、判断処理（Ｓ４０２−Ｓ４０３，Ｓ４１２−Ｓ４１３，Ｓ４２２−Ｓ４２３，Ｓ４３２−Ｓ４３３，Ｓ４４２−Ｓ４４３，Ｓ４５２−Ｓ４５３，Ｓ４６２−Ｓ４６３，Ｓ４７２−Ｓ４７３，Ｓ５０１−Ｓ５０３）と、負荷分散処理（Ｓ４８１−Ｓ４９２，Ｓ３０４−Ｓ３０６）とを実行するように構成されている。制御部は、第一タスクを実行する際に判断処理を実行し、第一タスク中に含まれる複数の処理の進行状況に基づいて、第二タスクのタスク抜けを招く兆候があるか否かを判断する。
【０００８】
判断処理によってタスク抜けを招く兆候があると判断された場合、制御部は、負荷分散処理を実行する。これにより、第一タスクに含まれる複数の処理のうちの少なくとも一つの処理が実行されるタイミングを、第一タスクが実行される第一の期間とは異なる第二の期間へと変更して、制御部にかかる負荷を分散させる。その結果、第一タスク中に含まれていた複数の処理のうち、少なくとも一つの処理については、第一の期間には実行されなくなる。したがって、その分だけ第一タスクの実行完了に至るタイミングを早めることができる。よって、第一タスクの遅れに起因して第二タスクのタスク抜けが発生するのを抑制することができる。
【図面の簡単な説明】
【０００９】
【図１】図１は電子制御装置の概略の構成を示すブロック図である。
【図２】図２は低優先度タスク処理のフローチャートである。
【図３】図３は第ｎ回タスク処理のフローチャートである。
【図４】図４は６５ｍｓ定期処理のフローチャートである。
【図５】図５は６５ｍｓ定期処理のフローチャートである。
【図６】図６は余裕度判定処理のフローチャートである。
【図７】図７は最短時間算出処理のフローチャートである。
【図８】図８は第ｎ回タスク処理に含まれる定期処理のリストである。
【図９】図９は６５ｍｓ定期処理に含まれる処理を示す説明図である。
【図１０】図１０は図中に例示した各処理の開始タイミング及び終了タイミングを示すタイミングチャートである。
【発明を実施するための形態】
【００１０】
次に、上述の電子制御装置について、例示的な実施形態を挙げて説明する。
［電子制御装置の構成］
図１に示すＥＣＵ１は、本開示でいう電子制御装置に相当する。ＥＣＵは、「Electronic Control Unit」の略称である。本実施形態において、ＥＣＵ１としては、エンジン制御ＥＣＵを例示してある。ただし、本開示の適用対象は、エンジン制御ＥＣＵ以外のＥＣＵであってもよい。このようなＥＣＵの例としては、例えば、エンジン制御ＥＣＵ以外の制御系ＥＣＵ、ボデー系ＥＣＵ及び情報系ＥＣＵ等を挙げることができる。
【００１１】
ＥＣＵ１は、マイコン２、発振子３、入力回路５及び出力回路７等を備えている。マイコン２は、ＣＰＵ１１、ＲＡＭ１２及びＲＯＭ１３等を備えている。ＲＯＭ１３は、フラッシュメモリやＥＥＰＲＯＭ等の書き換え可能なメモリで構成されていてもよい。マイコン２は、本開示でいう制御部に相当する。
【００１２】
ＥＣＵ１の各種機能は、ＣＰＵ１１が非遷移的実体的記録媒体に格納されたプログラムに従って各種処理を実行することにより実現される。この例では、ＲＯＭ１３が、非遷移的実体的記録媒体に該当する。ＣＰＵ１１がプログラムに従って各種処理を実行する際には、ＲＯＭ１３に格納されたプログラムをＲＡＭ１２によって構成されるメインメモリにロードするように構成されていてもよい。この場合、ＣＰＵ１１は、メインメモリに格納されたプログラムに従って各種処理を実行する。
【００１３】
ＣＰＵ１１がプログラムに従って各種処理を実行することにより、プログラムに対応する方法が実行され、ＥＣＵ１が備える各種機能が実現される。ただし、ＥＣＵ１が備える各種機能を実現する手法はソフトウェアに限るものではなく、機能の一部又は全部を、ディジタル回路やアナログ回路等を組み合わせたハードウェアを用いて実現してもよい。ＲＡＭ１２には、各種処理を実行する上で必要となる記憶領域が確保される。
【００１４】
発振子３は、マイコン２で使用するクロック信号を生成して、マイコン２に出力する。入力回路５は、各種センサから出力される信号を入力してマイコン２へと伝送する。図１には、各種センサとして、クランク角度センサ２１、車速センサ２２及びアクセル開度センサ２３を例示してある。クランク角度センサ２１は、クランクシャフトの回転速度及び回転角度を検出し、それら回転速度及び回転角度を表す信号をＥＣＵ１に出力する。車速センサ２２は、例えばドライブシャフトの回転数に基づいて車両の走行速度を検出し、車速を表す信号をＥＣＵ１に出力する。アクセル開度センサ２３は、運転者によるアクセルペダルの操作量を検出し、アクセル開度を表す信号をＥＣＵ１に出力する。この他、ＥＣＵ１には、図１に例示したセンサ以外のセンサからも信号が入力されるが、本開示の要部ではないので、これ以上の例示は省略する。
【００１５】
出力回路７は、マイコン２によって生成される制御信号を制御対象へと出力する。図１には、制御対象として、インジェクタ３１及びイグナイタ３２を例示してある。インジェクタ３１は、ＥＣＵ１に制御されて開閉駆動される電磁弁を有し、電磁弁の開弁時間に応じて燃料を噴射する。イグナイタ３２は、点火コイルの一次コイルを駆動する部品である。点火コイルの一次コイルに電圧が印加されると点火コイルの二次コイルには高電圧が生じる。点火コイルに生じる高電圧は点火プラグへと供給され、点火コイルで火花を発生させて、燃焼室内の混合気を燃焼させる。この他、ＥＣＵ１には、図１に例示した制御対象以外の制御対象に対しても制御信号が出力されるが、本開示の要部ではないので、これ以上の例示は省略する。
【００１６】
［電子制御装置において実行されるタスクの詳細］
次に、ＥＣＵ１においてマイコン２が実行するタスクについて、図２から図７までの各図に示すフローチャートに基づいて説明する。ＥＣＵ１では、優先度の異なる様々なタスクがマイコン２によって実行される。図２に示す低優先度タスク処理は、マイコン２によって約８ミリ秒周期で実行される処理である。低優先度タスク処理が開始されると、図２に示すように、マイコン２は、まずＳ２０１において、スケジューリングカウンタＳＣの値と定数０ｘ０７との論理積「ＳＣ＆０ｘ０７」が、０から７までのいずれの値となるかを判断する。
【００１７】
スケジューリングカウンタＳＣは、後述するＳ２２１において１ずつカウントアップされるカウンタである。定数０ｘ０７は、スケジューリングカウンタＳＣの下位３ビットのみを抽出するためのマスク値である。Ｓ２０１において判断対象となる値「ＳＣ＆０ｘ０７」は、図２に示す処理が実行されるたびに０から７まで１ずつ順に増えてから０へと戻り、再び７まで１ずつ順に増えるという循環を繰り返す。したがって、Ｓ２０１では、図２に示す処理が実行されるたびに、８通りある分岐先が０から７の順に選択される。
【００１８】
具体的には、Ｓ２０１において値「ＳＣ＆０ｘ０７」が０であった場合、マイコン２は、Ｓ２１１において第１回タスク処理を実行する。Ｓ２０１において値「ＳＣ＆０ｘ０７」が１であった場合、マイコン２は、Ｓ２１２において第２回タスク処理を実行する。Ｓ２０１において値「ＳＣ＆０ｘ０７」が２であった場合、マイコン２は、Ｓ２１３において第３回タスク処理を実行する。Ｓ２０１において値「ＳＣ＆０ｘ０７」が３であった場合、マイコン２は、Ｓ２１４において第４回タスク処理を実行する。
【００１９】
Ｓ２０１において値「ＳＣ＆０ｘ０７」が４であった場合、マイコン２は、Ｓ２１５において第５回タスク処理を実行する。Ｓ２０１において値「ＳＣ＆０ｘ０７」が５であった場合、マイコン２は、Ｓ２１６において第６回タスク処理を実行する。Ｓ２０１において値「ＳＣ＆０ｘ０７」が６であった場合、マイコン２は、Ｓ２１７において第７回タスク処理を実行する。Ｓ２０１において値「ＳＣ＆０ｘ０７」が７であった場合、マイコン２は、Ｓ２１８において第８回タスク処理を実行する。
【００２０】
これらＳ２１１からＳ２１８までのいずれかを終えたら、マイコン２は、Ｓ２２１においてスケジューリングカウンタＳＣの値を１だけカウントアップして、図２に示す処理を終了する。上述の通り、図２に示す処理は約８ミリ秒周期で実行されるので、上述したＳ２１１からＳ２１８は約８ミリ秒ごとに順に実行される。そして、約６５ミリ秒でＳ２１１からＳ２１８までの全てが実行され、以降はＳ２１１からＳ２１８までを約６５ミリ秒周期で繰り返す。
【００２１】
Ｓ２１１からＳ２１８までの各処理は、詳しくは図３に示すような処理となる。Ｓ２１１からＳ２１８までの各処理は、互いに同一の処理ではないが、類似する処理となっているので、図３では変数ｎを用いて各処理の違いを表現してある。Ｓ２１１の場合はｎ＝１、Ｓ２１２の場合はｎ＝２、Ｓ２１３の場合はｎ＝３、Ｓ２１４の場合はｎ＝４、Ｓ２１５の場合はｎ＝５、Ｓ２１６の場合はｎ＝６、Ｓ２１７の場合はｎ＝７、Ｓ２１８の場合はｎ＝８である。
【００２２】
図３に示す処理を開始すると、マイコン２は、Ｓ３０１において定期処理Ａ（ｎ）を実行し、続いて、Ｓ３０２において定期処理Ｂ（ｎ）を実行する。定期処理Ａ（ｎ）及び定期処理Ｂ（ｎ）は、図８に示すように、上述の変数ｎが１から８までのいずれであるかに応じて異なる。図８のリストは、例えば、ｎ＝１の場合は、定期処理Ａ（１）として８ｍｓ定期処理が実行され、定期処理Ｂ（１）として１６ｍｓ定期処理が実行されることを示している。８ｍｓ定期処理は、約８ミリ秒ごとに実行される低優先度の定期処理である。１６ｍｓ定期処理は、約１６ミリ秒ごとに実行される低優先度の定期処理である。
【００２３】
同様に、ｎ＝２の場合は、定期処理Ａ（２）として８ｍｓ定期処理が実行され、定期処理Ｂ（２）として３２ｍｓ定期処理が実行されることを示している。３２ｍｓ定期処理は、約３２ミリ秒ごとに実行される低優先度の定期処理である。ｎ＝３，５，７の場合は、ｎ＝１の場合と同様の組み合わせとなる処理が実行される。ｎ＝６の場合は、ｎ＝２の場合と同様の組み合わせとなる処理が実行される。
【００２４】
ｎ＝４の場合は、定期処理Ａ（４）として８ｍｓ定期処理が実行されるが、定期処理Ｂ（４）としては何も実行されない。ｎ＝８の場合は、定期処理Ａ（８）として８ｍｓ定期処理が実行され、定期処理Ｂ（８）として６５ｍｓ定期処理が実行される。６５ｍｓ定期処理は、約６５ミリ秒ごとに実行される低優先度の定期処理である。このように、定期処理Ａ（ｎ）としては常に８ｍｓ定期処理が実行される。定期処理Ｂ（ｎ）としては、１６ｍｓ定期処理、３２ｍｓ定期処理、及び６５ｍｓ定期処理のいずれかが実行されるか、何も処理が実行されない状態となる。
【００２５】
先に説明した通り、図２に示した処理は約８秒ごとに実行される。そのため、ｎ＝１，２，３，４，５，６，７，８の場合に実行される８ｍｓ定期処理は、約８秒ごとに実行されることになる。ｎ＝１，３，５，７の場合に実行される１６ｍｓ定期処理は、約１６秒ごとに実行されることになる。ｎ＝２，６の場合に実行される３２ｍｓ定期処理は、約３２秒ごとに実行されることになる。ｎ＝８の場合に実行される６５ｍｓ定期処理は、約６５秒ごとに実行されることになる。
【００２６】
Ｓ３０１において実行される定期処理Ａ（ｎ）及びＳ３０２において実行される定期処理Ｂ（ｎ）には、それぞれに複数の処理が含まれる。例えば、本実施形態で例示する６５ｍｓ定期処理の場合、図９に示すように、処理Ａから処理Ｈまでの８つの処理を包含している。これら処理Ａから処理Ｈは、６５ｍｓ定期処理のメインタスクにおいてサブタスクとして起床される。
【００２７】
詳しくは後述するが、マイコン２は、Ｓ３０２において６５ｍｓ定期処理を実行する際、十分に時間的な余裕があれば処理Ａから処理Ｈまでの全てを順に実行する。ここで、十分に時間的な余裕があるとは、６５ｍｓ定期処理の実行を継続しても、次に実行予定の処理を問題なく起床させることができる程度の時間的余裕があることを意味する。例えば、図２に示すＳ２１８の第８回タスク処理を実行し、その中で図３に示すＳ３０２の定期処理Ｂ（８）として６５ｍｓ定期処理を実行する場合、次に実行予定の処理は図２に示すＳ２１１の第１回タスク処理であり、その中で図３に示すＳ３０１の定期処理Ａ（１）として８ｍｓ定期処理が実行される。
【００２８】
そこで、６５ｍｓ定期処理では、Ｓ２１１の第１回タスク処理中に含まれるＳ３０１の８ｍｓ定期処理の開始を妨げない程度の時間的な余裕があるか否かを判断する。本実施形態では、マイコン２の性能と処理負荷との関係から、次に実行すべきタスクの起床までに２ミリ秒以上の余裕があれば、十分に時間的な余裕があると判断する。しきい値となる２ミリ秒という値そのものは、マイコン２の性能と処理負荷との関係に応じて２ミリ秒より小となる値を採用してもよいし２ミリ秒より大となる値を採用してもよい。
【００２９】
一方、上述のような時間的余裕が不十分な場合、マイコン２は、Ｓ３０２において処理Ａから処理Ｈを順に実行する途中で、少なくとも一つの処理を対象に処理の実行を見合わせる。例えば、処理Ａから処理Ｄまで実行した時点で、次に実行すべきタスクの起床までに２ミリ秒未満の余裕しかなくなれば、処理Ｅから処理Ｈまでの各処理について実行を見合わせる。
【００３０】
このように２ミリ秒未満の余裕しかなくなる状況としては、例えば、車両の運転状態が変化したことに伴い、高優先度タスクの実行頻度が上がり、その分だけ低優先度の６５ｍｓ定期処理に割り当てられる時間が減少した場合等を考え得る。実行を見合わせた各処理については、各処理が実行されるタイミングを別のタイミングに変更する。例えば、本実施形態の場合、６５ｍｓ定期処理は、本来であれば、図２に示すＳ２１８の第８回タスク処理が実行されるタイミングで、図３に示すＳ３０２の定期処理Ｂ（８）として実行される。
【００３１】
ただし、上述のように処理Ｅから処理Ｈまでの各処理について実行を見合わせた場合は、処理Ｅから処理Ｈまでの各処理の実行タイミングを、例えば図２に示すＳ２１４の第４回タスク処理が実行されるタイミングに変更する。このような幾つかの処理に対する実行タイミングの変更処理は、上述した定期処理Ａ（ｎ）及び定期処理Ｂ（ｎ）の全てにおいて同様に実行され得る。そこで、以下の説明では、Ｓ３０２において６５ｍｓ定期処理を実行する場合を例に挙げて、その具体的な処理内容を説明する。
【００３２】
Ｓ３０２において実行される６５ｍｓ定期処理は、より詳細には図４及び図５に示すような処理となる。６５ｍｓ定期処理を開始すると、マイコン２は、Ｓ４０１において処理Ａを起床する。続いて、マイコン２は、Ｓ４０２において余裕度判定処理を実行する。余裕度判定処理は、詳細には図６に示すような処理となる。余裕度判定処理を開始すると、マイコン２は、まずＳ５０１において現在時刻を取得する。
【００３３】
続いて、マイコン２は、Ｓ５０２において、次のタスクの開始時刻までに２ミリ秒未満か否かを判断する。Ｓ５０２において、次のタスクの開始時刻まで２ミリ秒未満であった場合はＳ５０３へと進み、マイコン２は、フラグmargin_flgをオンにする。なお、フラグmargin_flgの初期値はオフである。Ｓ５０３を終えたら、図６に示す余裕度判定処理を終了する。一方、Ｓ５０２において、次のタスクの開始時刻まで２ミリ秒以上であった場合は、図６に示す余裕度判定処理を終了する。図６に示す余裕度判定処理を終了すると、図４に示すＳ４０３へと進み、マイコン２は、フラグmargin_flgがオフか否かを判定する。Ｓ４０３において、フラグmargin_flgがオフであった場合、マイコン２は、Ｓ４０４において処理Ａを開始する。
【００３４】
Ｓ４０４を終えたら、マイコン２は、Ｓ４１１において処理Ｂを起床する。続いて、マイコン２は、Ｓ４１２において余裕度判定処理を実行する。余裕度判定処理の詳細は図６に示した通りである。ただし、余裕度判定処理の内容については既に説明したので、以降、余裕度判定処理の詳細についての説明は省略する。図６に示す余裕度判定処理を終了すると、Ｓ４１３へと進み、マイコン２は、フラグmargin_flgがオフか否かを判定する。Ｓ４１３において、フラグmargin_flgがオフであった場合、マイコン２は、Ｓ４１４において処理Ｂを開始する。
【００３５】
Ｓ４１４を終えたら、マイコン２は、Ｓ４２１において処理Ｃを起床する。続いて、マイコン２は、Ｓ４２２において余裕度判定処理を実行する。余裕度判定処理の詳細は図６に示した通りである。余裕度判定処理を終了すると、Ｓ４２３へと進み、マイコン２は、フラグmargin_flgがオフか否かを判定する。Ｓ４２３において、フラグmargin_flgがオフであった場合、マイコン２は、Ｓ４２４において処理Ｃを開始する。
【００３６】
Ｓ４２４を終えたら、マイコン２は、Ｓ４３１において処理Ｄを起床する。続いて、マイコン２は、Ｓ４３２において余裕度判定処理を実行する。余裕度判定処理の詳細は図６に示した通りである。余裕度判定処理を終了すると、Ｓ４３３へと進み、マイコン２は、フラグmargin_flgがオフか否かを判定する。Ｓ４３３において、フラグmargin_flgがオフであった場合、マイコン２は、Ｓ４３４において処理Ｄを開始する。
【００３７】
Ｓ４３４を終えたら、図５のＳ４４１へと進み、マイコン２は、処理Ｅを起床する。続いて、マイコン２は、Ｓ４４２において余裕度判定処理を実行する。余裕度判定処理の詳細は図６に示した通りである。余裕度判定処理を終了すると、Ｓ４４３へと進み、マイコン２は、フラグmargin_flgがオフか否かを判定する。Ｓ４４３において、フラグmargin_flgがオフであった場合、マイコン２は、Ｓ４４４において処理Ｅを開始する。
【００３８】
Ｓ４４４を終えたら、マイコン２は、Ｓ４５１において処理Ｆを起床する。続いて、マイコン２は、Ｓ４５２において余裕度判定処理を実行する。余裕度判定処理の詳細は図６に示した通りである。余裕度判定処理を終了すると、Ｓ４５３へと進み、マイコン２は、フラグmargin_flgがオフか否かを判定する。Ｓ４５３において、フラグmargin_flgがオフであった場合、マイコン２は、Ｓ４５４において処理Ｆを開始する。
【００３９】
Ｓ４５４を終えたら、マイコン２は、Ｓ４６１において処理Ｇを起床する。続いて、マイコン２は、Ｓ４６２において余裕度判定処理を実行する。余裕度判定処理の詳細は図６に示した通りである。余裕度判定処理を終了すると、Ｓ４６３へと進み、マイコン２は、フラグmargin_flgがオフか否かを判定する。Ｓ４６３において、フラグmargin_flgがオフであった場合、マイコン２は、Ｓ４６４において処理Ｇを開始する。
【００４０】
Ｓ４６４を終えたら、マイコン２は、Ｓ４７１において処理Ｈを起床する。続いて、マイコン２は、Ｓ４７２において余裕度判定処理を実行する。余裕度判定処理の詳細は図６に示した通りである。余裕度判定処理を終了すると、Ｓ４７３へと進み、マイコン２は、フラグmargin_flgがオフか否かを判定する。Ｓ４７３において、フラグmargin_flgがオフであった場合、マイコン２は、Ｓ４７４において処理Ｈを開始する。Ｓ４７４を終えたら、図４及び図５に示す処理を終了する。
【００４１】
さて、以上説明した処理において、上述したＳ４０３においては、フラグmargin_flgがオフではない（すなわち、フラグmargin_flgがオンである。）と判断される場合がある。この場合、マイコン２は、Ｓ４８１，Ｓ４８２，Ｓ４８３，Ｓ４８４，Ｓ４８５，Ｓ４８６，Ｓ４８７及びＳ４８８を実行し、処理Ａから処理Ｈまでの各処理について開始タイミングを変更する。
【００４２】
同様に、上述したＳ４１３において、フラグmargin_flgがオフではないと判断される場合、マイコン２は、上述したＳ４８２からＳ４８８を実行し、処理Ｂから処理Ｈまでの各処理について開始タイミングを変更する。上述したＳ４２３において、フラグmargin_flgがオフではないと判断される場合、マイコン２は、上述したＳ４８３からＳ４８８を実行し、処理Ｃから処理Ｈまでの各処理について開始タイミングを変更する。
【００４３】
上述したＳ４３３において、フラグmargin_flgがオフではないと判断される場合、マイコン２は、上述したＳ４８４からＳ４８８を実行し、処理Ｄから処理Ｈまでの各処理について開始タイミングを変更する。上述したＳ４４３において、フラグmargin_flgがオフではないと判断される場合、マイコン２は、上述したＳ４８５からＳ４８８を実行し、処理Ｅから処理Ｈまでの各処理について開始タイミングを変更する。
【００４４】
上述したＳ４５３において、フラグmargin_flgがオフではないと判断される場合、マイコン２は、上述したＳ４８６からＳ４８８を実行し、処理Ｆから処理Ｈまでの各処理について開始タイミングを変更する。上述したＳ４６３において、フラグmargin_flgがオフではないと判断される場合、マイコン２は、上述したＳ４８７からＳ４８８を実行し、処理Ｇから処理Ｈまでの各処理について開始タイミングを変更する。上述したＳ４７３において、フラグmargin_flgがオフではないと判断される場合、マイコン２は、上述したＳ４８８を実行し、処理Ｈについて開始タイミングを変更する。
【００４５】
Ｓ４８８を終えたら、マイコン２は、Ｓ４９１において、開始タイミングが変更された処理を呼び出すためのアドレスを記憶する。処理Ａから処理Ｈまでの各処理は、各処理を呼び出すための関数名が決まっている。例えば、処理Ａを実行する際には関数ａを呼び出し、処理Ｂを実行する際には関数ｂを呼び出す。関数ａが呼び出された場合、マイコン２は、関数ａに対応する開始アドレスaddr_aに格納されたプログラムコードに従って処理Ａを実行する。Ｓ４９１では、処理Ａから処理Ｈまでの各処理のうち、開始タイミングを変更したい処理に対応する開始アドレスを、所定の関数に対応する開始アドレスとして記憶する。
【００４６】
例えば、処理Ｅの開始タイミングを変更したい場合には、関数ｅに対応する開始アドレスaddr_eを所定の関数ｓに対応するアドレスとして記憶する。処理Ｆの開始タイミングを変更したい場合には、関数ｆに対応する開始アドレスaddr_fを所定の関数ｓに対応するアドレスとして記憶する。このような処理をＳ４９１において実行することにより、後述するＳ３０６では、単に関数ｓを呼び出すことにより、Ｓ３０６で呼び出される関数の実体を、動的に関数ｅや関数ｆに変えることができる。すなわち、Ｓ３０６では、開始タイミングが変更された処理がどの処理であるのかを意識しなくても、Ｓ４９１において設定された処理を実行するだけで、開始タイミングが変更された処理を実行することができる。
【００４７】
Ｓ４９１を終えたら、マイコン２は、Ｓ４９２においてフラグnuke_flgをオンにする。フラグnuke_flgは、初期値がオフで、Ｓ４８１からＳ４８８までのいずれかの開始タイミング変更処理が実行された場合にオンにされるフラグである。Ｓ４９２を終えたら、図４及び図５に示す処理を終了する。
以上説明した図４及び図５に示す処理を終了すると、図３に示すＳ３０２の一例に該当する６５ｍｓ定期処理を終えたことになる。そこで、マイコン２は、Ｓ３０１を開始してからＳ３０２を終了するまでに要した時間Time(n)を取得する（Ｓ３０３）。マイコン２では、複数のタスクが並行して稼働する。そのため、Ｓ３０１及びＳ３０２の実行中には、より高優先度のタスクをマイコン２が処理する場合があり、その場合には、Ｓ３０３で取得する時間も増大する。
【００４８】
すなわち、Ｓ３０３で取得する時間Time(n)は、Ｓ３０１及びＳ３０２に対応する処理時間のみを算出したものではなく、Ｓ３０３では、他のタスクに割り当てられた時間も含めて、Ｓ３０１の開始からＳ３０２の終了までに要した時間を取得する。続いて、マイコン２は、Ｓ３０４において、フラグnuke_flgがオンか否かを判断する。Ｓ３０４において、フラグnuke_flgがオンでない場合は、Ｓ３０５及びＳ３０６を実行することなく図３に示す処理を終了する。
【００４９】
一方、Ｓ３０４において、フラグnuke_flgがオンであった場合、マイコン２は、Ｓ３０５において、時間Min_timeと時間Time(n)が一致するか否かを判断する。時間Min_timeは、Ｓ２１１からＳ２１８の各処理に要した時間の中で、最短となる時間である。時間Min_timeを算出する処理については後述するが、例えば、Ｓ２１１からＳ２１８の各処理を実行した結果、その中でＳ２１４の第４回タスク処理に要した時間が最短となった場合は、その最短となった時間が、時間Min_timeとして記憶されている。
【００５０】
Ｓ３０５において、時間Min_timeと時間Time(n)が一致しない場合は、Ｓ３０６を実行することなく図３に示す処理を終了する。例えば、Ｓ３０２で６５ｍｓ定期処理を実行している場合は、図２に示すＳ２１８を実行している場合に相当する。この場合、上述のように、Ｓ２１４に要した時間が最短となっていれば、Ｓ２１８に要した時間の方がＳ２１４に要した時間よりも長時間となるので、Ｓ３０５では否定判断がなされ、図３に示す処理を終了することになる。
【００５１】
ここで、図２に示す処理においては、既に説明した通り、Ｓ２１１からＳ２１８までの各処理が８ミリ秒ごとに順に実行される。上述のように、マイコン２が、６５ｍｓ定期処理を含むＳ２１８を実行した後、８ミリ秒後にはＳ２１１が実行され、その８ミリ秒後にはＳ２１２が実行され、その８ミリ秒後にはＳ２１３が実行され、その８ミリ秒後にはＳ２１４が実行される。
【００５２】
Ｓ２１４の第４回タスク処理に要した時間が最短となっている場合、Ｓ２１４の詳細でもある図３に示す処理では、マイコン２は、Ｓ３０５において、時間Min_timeと時間Time(n)が一致すると判断する。この場合、マイコン２は、Ｓ３０６において、開始タイミングの変更対象とされた処理を実行する。すなわち、Ｓ４８１からＳ４８８までの少なくとも一つによって開始タイミングの変更対象とされた処理が、Ｓ３０６で実行される。
【００５３】
例えば、６５ｍｓ定期処理に含まれる処理Ａから処理Ｈのうち、処理Ｅから処理Ｈまでが開始タイミングの変更対象とされた場合、処理Ａから処理ＤまではＳ２１８において実行される。一方、処理Ｅから処理ＨまではＳ２１４において実行されるように開始タイミングが変更される。つまり、６５ｍｓ定期処理は、二つに分割されて、異なる二つのタイミングで実行されることになる。
【００５４】
これにより、処理Ａから処理Ｈまでの全てを実行すると、次のタスクの開始予定時刻の２ミリ秒前までに終了することが困難であったＳ２１８については、処理Ａから処理Ｄまでの実行にとどめることで、より早いタイミングでの終了が可能となる。また、処理Ｅから処理Ｈについては、Ｓ２１１からＳ２１８までの中で、最も時間的に余裕度が高いＳ２１４の中で実行することができる。なお、Ｓ３０６を終えたら、図３に示す処理を終了する。
【００５５】
さて、以上説明したような処理と並行して、マイコン２は、上述の時間Min_timeを得るために、図８に示す最短時間算出処理を実行する。この処理を開始すると、マイコン２は、Ｓ６０１において、Ｓ２１１の実行に要した時間Time(1)を、初期値として時間Min_timeにセットする。続いて、マイコン２は、Ｓ６０２において、カウンタｘに初期値２をセットして、Ｓ６０３において、時間Time(x)が時間Min_timeよりも大か否かを判断する。Ｓ６０１及びＳ６０２を実行した直後は、時間Min_timeには時間Time(1)がセットされ、時間Time(x)はＳ２１２の実行に要した時間Time(2)となり、時間Time(1)と時間Time(2)の大小関係が比較される。
【００５６】
Ｓ６０３において、時間Time(x)が時間Min_time以下であった場合、マイコン２は、Ｓ６０４において、時間Min_timeに時間Time(x)をセットして時間Min_timeを更新し、Ｓ６０５へと進む。一方、Ｓ６０３において、時間Time(x)が時間Min_timeよりも大であった場合、マイコン２は、Ｓ６０４を実行することなくＳ６０５へと進む。つまり、比較対象となった時間Time(x)と時間Min_timeのうちで、より小さい方の値が時間Min_timeに保持される。
【００５７】
Ｓ６０５において、マイコン２は、カウンタｘを１だけカウントアップし、Ｓ６０６において、カウンタｘが８を超えたか否かを判断する。Ｓ６０６において、カウンタｘが８以下の場合はＳ６０３へと戻る。これにより、以降は、Ｓ２１３の実行に要した時間Time(3)、Ｓ２１４の実行に要した時間Time(4)、Ｓ２１５の実行に要した時間Time(5)、Ｓ２１６の実行に要した時間Time(6)、Ｓ２１７の実行に要した時間Time(7)、Ｓ２１８の実行に要した時間Time(8)が、順に時間Min_timeとの比較対象とされる。
【００５８】
Ｓ６０３での比較の結果、時間Time(x)が時間Min_time以下であれば、より小さい方の値で時間Min_timeが更新される。Ｓ６０６において、カウンタｘが８を超えた場合は、Ｓ６０７において最短時間Min_timeが決定し、図７に示す処理を終了する。以上のような最短時間算出処理によって算出される時間Min_timeが上述したＳ３０５において利用される。
【００５９】
図１０は、上述した各処理の開始タイミング及び終了タイミングを例示したタイミングチャートである。図１０には、Ｓ２１７が実行される期間ｐ７、Ｓ２１８が実行される期間ｐ８、Ｓ２１１が実行される期間ｐ１、Ｓ２１４が実行される期間ｐ４、Ｓ２１５が実行される期間ｐ５等を抜粋して例示してある。本実施形態の場合、これらの期間ｐ７，ｐ８，ｐ１，ｐ４，ｐ５は、いずれも８ミリ秒の期間である。
【００６０】
図１０の上段には、上述した各処理が遅延することなく理想的に進行した場合のチャートを例示してある。図１０の上段に示す例の場合、期間ｐ８にはＳ２１８中に含まれる６５ｍｓ定期処理が実行されている。この６５ｍｓ定期処理は、期間ｐ１の開始タイミングよりも２ミリ秒前となるタイミングまでに終了している。そのため、期間ｐ１に至った際、マイコン２は、問題なくＳ２１１中に含まれる８ｍｓ定期処理を起床することができる。
【００６１】
一方、図１０の中段には、第一の低優先度タスクの終了タイミングが遅延し、その影響で第二の低優先度タスクが起床できなくなる場合のチャートを例示してある。この例は、本実施形態と同様な構成を有していない比較例である。図１０の中段に示す例の場合、期間ｐ８にはＳ２１８中に含まれる６５ｍｓ定期処理が実行されている。この６５ｍｓ定期処理は時刻ｔ１に開始している。ただし、期間ｐ８において時刻ｔ２になると、高優先度タスクが実行されている。この場合、低優先度タスクである６５ｍｓ定期処理は、高優先度タスクが終了するまで待ち状態となる。
【００６２】
時刻ｔ３になって高優先度タスクが終了すると、６５ｍｓ定期処理が再開される。ただし、高優先度タスクの影響により、６５ｍｓ定期処理の終了タイミングは遅延し、期間ｐ１の開始タイミングｔ６よりも２ミリ秒前となるタイミングｔ４では終了せず、時刻ｔ５に終了する。そのため、この場合は、６５ｍｓ定期処理の終了タイミングｔ５から、８ｍｓ定期処理の開始タイミングｔ６までに十分な時間的余裕がなく、期間ｐ１において８ｍｓ定期処理のタスク抜けが発生する。図中では、タスク抜けとなった８ｍｓ定期処理を破線で示してある。
【００６３】
このような問題に対し、本実施形態で説明した構成を採用すれば、上述のようなタスク抜けの発生を抑制することができる。図１０の下段には、第一の低優先度タスクに含まれる一部の処理について実行タイミングを別タイミングへと変更することにより、第二の低優先度タスクを起床できるようにした場合のチャートを例示してある。この例は、本開示の実施形態に相当する例である。図１０の下段に示す例の場合、期間ｐ８にはＳ２１８中に含まれる６５ｍｓ定期処理が実行されている。この６５ｍｓ定期処理は時刻ｔ１に開始している。ただし、期間ｐ８において時刻ｔ２になると、高優先度タスクが実行されている。この場合、低優先度タスクである６５ｍｓ定期処理は、高優先度タスクが終了するまで待ち状態となる。
【００６４】
時刻ｔ３になって高優先度タスクが終了すると、６５ｍｓ定期処理が再開される。ただし、高優先度タスクの影響により、６５ｍｓ定期処理の終了タイミングは遅延する。そこで、本実施形態では、上述したような処理を実行することにより、例えば処理Ａ，Ｂ，Ｃ，Ｄを実行した時点で時刻ｔ４に至れば、残る処理Ｅ，Ｆ，Ｇ，Ｈについては、その実行タイミングを期間ｐ４へと変更する。この期間ｐ４は、上述の通り、その期間中の処理を実行するのに要した時間が最も短い期間であり、マイコン２にとっては負荷が低い期間である。
【００６５】
このように処理Ｅ，Ｆ，Ｇ，Ｈの実行タイミングを変更することにより、Ｓ２１８を実行するタイミングにおいては、６５ｍｓ定期処理の終了タイミングを時刻ｔ４にすることができる。その結果、６５ｍｓ定期処理は、期間ｐ１の開始タイミングよりも２ミリ秒前となるタイミングまでに終了するので、期間ｐ１に至った際、マイコン２は、問題なく８ｍｓ定期処理を起床することができる。また、期間ｐ４に至って、Ｓ２１４の８ｍｓ定期処理を実行した後、時刻ｔ７に至ったら、実行タイミングが変更された６５ｍｓ定期処理中の処理Ｅ，Ｆ，Ｇ，Ｈが実行される。
【００６６】
これら処理Ｅ，Ｆ，Ｇ，Ｈについては、実行タイミングが変更されるものの、期間ｐ４が到来するたびに実行される。したがって、処理Ｅ，Ｆ，Ｇ，Ｈが約６５ミリ秒ごとに実行される点は、実行タイミングの変更前と変わりない。つまり、本実施形態で示した構成を採用すれば、Ｓ２１８において実行されていた６５ｍｓ定期処理を、Ｓ２１８において実行される処理Ａ，Ｂ，Ｃ，Ｄと、Ｓ２１４において実行される処理Ｅ，Ｆ，Ｇ，Ｈとに分割することができる。これにより、期間ｐ８においてマイコン２にかかる負荷の一部を、期間ｐ４へと分散することができ、期間ｐ２においてタスク抜けが発生するのを抑制することができる。
【００６７】
［効果］
以上説明した通り、上記ＥＣＵ１によれば、マイコン２は、第一タスク（例えば、Ｓ２１８において実行される６５ｍｓ定期処理。）を実行する際に、判断処理（Ｓ５０１−Ｓ５０３）を実行し、第一タスク中に含まれる複数の処理（例えば、処理Ａ〜Ｈ。）の進行状況に基づいて、第二タスク（例えば、Ｓ２１１において実行される８ｍｓ定期処理。）のタスク抜けを招く兆候があるか否かを判断する。
【００６８】
上記判断処理によってタスク抜けを招く兆候があると判断された場合、マイコン２は、負荷分散処理（Ｓ４８１−Ｓ４９２，Ｓ３０４−Ｓ３０６）を実行し、第一タスクに含まれる複数の処理のうちの少なくとも一つの処理（例えば、処理Ｅ，Ｆ，Ｇ，Ｈ。）が実行されるタイミングを、第一タスクが実行される第一の期間（例えば、期間ｐ８。）とは異なる第二の期間（例えば、期間ｐ４。）へと変更して、マイコン２にかかる負荷を分散させる。これにより、第一タスク中に含まれていた複数の処理のうち、少なくとも一つの処理については、第一の期間には実行されなくなる。したがって、その分だけ第一タスクの実行完了に至るタイミングを早めることができ、第一タスクの遅れに起因して第二タスクのタスク抜けが発生するのを抑制することができる。
【００６９】
また、本実施形態の場合、マイコン２は、第一タスク（例えば、Ｓ２１８において実行される６５ｍｓ定期処理。）中に含まれる複数の処理（例えば、処理Ａ〜Ｈ。）それぞれを開始するタイミングについて、第二タスク（例えば、Ｓ２１１において実行される８ｍｓ定期処理。）の開始予定タイミングまでに余裕（例えば、２ミリ秒の余裕。）があるか否を判断する。したがって、第一タスク中に含まれる複数の処理それぞれについて、どの処理までは余裕があり、どの処理から余裕がなくなるのかを、きめ細かく判断することができる。
【００７０】
また、本実施形態の場合、第二タスク（例えば、Ｓ２１１において実行される８ｍｓ定期処理。）の開始予定タイミングまでに所定時間未満（例えば、２ミリ秒。）の余裕しかないタイミングに開始される処理（例えば、処理Ｅ，Ｆ，Ｇ，Ｈ。）は、第一タスク（例えば、Ｓ２１８において実行される６５ｍｓ定期処理。）中では実行されなくなる。したがって、第一タスクに含まれる複数の処理を、第二タスクへの悪影響がない範囲内で実行（例えば、処理Ａ，Ｂ，Ｃ，Ｄだけを実行。）した上で、第一タスクの終了タイミングを早めて、第二タスクのタスク抜けを抑制することができる。
【００７１】
また、本実施形態の場合、負荷分散処理（Ｓ４８１−Ｓ４９２，Ｓ３０４−Ｓ３０６）によって負荷の分散が図られた後（例えば、処理Ｅ，Ｆ，Ｇ，Ｈの開始タイミングを期間ｐ４へ変更した後。）に、経時的にマイコン２にかかる負荷が高くなったとしても、判断処理（Ｓ５０１−Ｓ５０３）によってタスク抜けを招く兆候があると判断されれば、さらに負荷分散処理が実行され、負荷の分散が図られる（例えば、処理Ｃ，Ｄの開始タイミングが期間ｐ４へ変更される。）。したがって、経時的にマイコン２にかかる負荷が高くなっても、第二タスクのタスク抜けを抑制することができる。
【００７２】
また、本実施形態の場合、計測処理（Ｓ３０３，Ｓ６０１−Ｓ６０７）によって計測されたタスクの実行時間に基づいて、Ｓ３０５により、マイコン２にかかる負荷が低い期間を第二の期間として選択する。したがって、マイコン２にかかる負荷が動的に変動し得る場合でも、その時点で負荷が低い期間を適切に選定して負荷分散を図ることができる。
［他の実施形態］
以上、本開示の電子制御装置について、例示的な実施形態を挙げて説明したが、上述の実施形態は本開示の一態様として例示されるものにすぎない。すなわち、本開示は、上述の例示的な実施形態に限定されるものではなく、本開示の技術的思想を逸脱しない範囲内において、様々な形態で実施することができる。
【００７３】
例えば、上記実施形態では、最短時間算出処理の一例として、図７に示すような処理を例示したが、最短時間算出処理の具体的な処理手順は、上述の一例に限定されない。他の例としては、例えば、上述したような処理の実行時間Time(n)については、複数回にわたって計測した上で、その平均値を採用するようにしてもよい。
このように構成すれば、ＥＣＵ１において一時的に負荷の低い状態になった期間があったとしても、平均的には負荷の高い期間であれば、そのような期間が第二の期間として選択されるのを抑制できる。逆に、一時的に負荷の高い状態になった期間があったとしても、平均的には負荷の低い期間であれば、そのような期間を第二の期間として選択することができる。したがって、一時的な負荷の変動に基づいて第二の期間が選定されるのを抑制でき、適正に第二タスクのタスク抜けを抑制することができる。
【００７４】
また、上記実施形態では、第一タスクの例としてＳ２１８において実行される６５ｍｓ定期処理を例示し、第二タスクの例としてＳ２１１において実行される８ｍｓ定期処理を例示したが、図８に例示した各定期処理は、いずれが第一タスクに相当してもよい。その場合、第一タスクが遅延すると起床できなくなるおそれがあるタスクが第二タスクに相当することになる。また、図８に例示した各定期処理は、少なくとも一つが第一タスク相当の構成を備えていれば、少なくともその分だけは相応の効果を発揮する。したがって、図８に例示した各定期処理全てが第一タスク相当の構成を備えているか否かは任意である。
【００７５】
加えて、上記各実施形態における一つの構成要素によって実現していた機能を、複数の構成要素によって実現するように構成してもよい。また、複数の構成要素によって実現していた機能を一つの構成要素によって実現するように構成してもよい。また、上記各実施形態の構成の一部を省略してもよい。また、上記各実施形態の構成の少なくとも一部を、他の上記実施形態の構成に対して付加、置換等してもよい。なお、特許請求の範囲に記載の文言から特定される技術思想に含まれる全ての態様が本開示の実施形態に該当する。
【００７６】
なお、上記実施形態と特許請求の範囲との対応関係を理解しやすくするために、特許請求の範囲には、上記実施形態中で示した符号を括弧書きで記載したが、当該記載は本開示の技術的範囲が上述の実施形態に限定されることを意味する記載ではない。
［補足］
なお、以上説明した例示的な実施形態から明らかなように、本開示の電子制御装置は、更に以下に挙げるような構成を備えていてもよい。
【００７７】
まず、本開示の電子制御装置において、制御部は、判断処理において、第一タスク中に含まれる複数の処理それぞれを開始するタイミングが、第二タスクの開始予定タイミングまでに所定時間未満の余裕しかないタイミングである場合に、タスク抜けが発生する兆候があると判断するように構成されていてもよい。
このように構成された電子制御装置によれば、制御部は、第一タスク中に含まれる複数の処理それぞれを開始するタイミングについて、第二タスクの開始予定タイミングまでに余裕があるか否を判断する。したがって、第一タスク中に含まれる複数の処理それぞれについて、どの処理までは余裕があり、どの処理から余裕が無くなるのかを、きめ細かく判断することができる。
【００７８】
また、本開示の電子制御装置において、制御部は、判断処理によってタスク抜けを招く兆候があると判断された場合に、負荷分散処理において、第一タスク中に含まれる複数の処理のうち、第二タスクの開始予定タイミングまでに所定時間未満の余裕しかないタイミングに開始される処理について、当該処理が実行されるタイミングを第二の期間へと変更するように構成されていてもよい。
【００７９】
このように構成された電子制御装置によれば、第二タスクの開始予定タイミングまでに所定時間未満の余裕しかないタイミングに開始される処理は、第一タスク中では実行されなくなる。したがって、第一タスクに含まれる複数の処理を、第二タスクへの悪影響がない範囲内で実行した上で、第一タスクの終了タイミングを早めて、第二タスクのタスク抜けを抑制することができる。
【００８０】
また、本開示の電子制御装置において、制御部は、第一タスクを周期的に実行するたびに、判断処理及び負荷分散処理を実行するように構成されていてもよい。
このように構成された電子制御装置によれば、負荷分散処理によって負荷の分散が図られた後に、経時的に制御部にかかる負荷が高くなったとしても、判断処理によってタスク抜けを招く兆候があると判断されれば、さらに負荷分散処理が実行されるので、第二タスクのタスク抜けを抑制することができる。
【００８１】
また、本開示の電子制御装置において、制御部は、複数の期間それぞれを対象に、各期間に実行されるタスクの実行時間を計測する計測処理を実行可能に構成され、制御部は、負荷分散処理において、計測処理によって計測されたタスクの実行時間に基づいて、制御部にかかる負荷が低い期間を第二の期間として選択するように構成されていてもよい。
このように構成された電子制御装置によれば、制御部は、制御部にかかる負荷が低い期間を第二の期間として選択するので、負荷の高さが動的に変動し得る場合でも、その時点で負荷が低い期間を適切に選定して負荷分散を図ることができる。
【００８２】
また、本開示の電子制御装置において、制御部は、負荷分散処理において、計測処理によって複数回にわたって計測されたタスクの実行時間の平均値に基づいて、制御部にかかる負荷が低い期間を第二の期間として選択するように構成されていてもよい。
このように構成された電子制御装置によれば、一時的に負荷の低い状態になった期間があったとしても、平均的には負荷の高い期間であれば、そのような期間が第二の期間として選択されるのを抑制できる。逆に、一時的に負荷の高い状態になった期間があったとしても、平均的には負荷の低い期間であれば、そのような期間を第二の期間として選択することができる。したがって、一時的な負荷の変動に基づいて第二の期間が選定されるのを抑制でき、適正に第二タスクのタスク抜けを抑制することができる。
【符号の説明】
【００８３】
１…ＥＣＵ、２…マイコン、３…発振子、５…入力回路、７…出力回路、１１…ＣＰＵ、１２…ＲＡＭ、１３…ＲＯＭ、２１…クランク角度センサ、２２…車速センサ、２３…アクセル開度センサ、３１…インジェクタ、３２…イグナイタ。
【図１】
2019087004.tif 000003
【図２】
2019087004.tif 000004
【図３】
2019087004.tif 000005
【図４】
2019087004.tif 000006
【図５】
2019087004.tif 000007
【図６】
2019087004.tif 000008
【図７】
2019087004.tif 000009
【図８】
2019087004.tif 000010
【図９】
2019087004.tif 000011
【図１０】
2019087004.tif 000012