(57)【要約】【課題】電力消費量の増加を抑制する。【解決手段】ＰＬＬ回路１７は、外部からの分周数設定信号に従って設定された分周数に基づいて、基準信号の周波数を分周数倍した周波数を有するクロック信号を生成する。ＣＰＵ１１は、クロック信号の周波数をコア周波数として複数のタスク処理及びイベント処理を実行する。ＣＰＵ１１は、タスク処理又はイベント処理を開始する時に、処理を開始する時刻から、処理を完了させる必要がある時刻（すなわち、デッドライン）になるまでに要するデッドライン時間を設定する。ＣＰＵ１１は、処理開始から完了までに必要とする処理時間がデッドライン時間を超えないようにコア周波数を算出する。ＣＰＵ１１は、コア周波数に対応した分周数を示す分周数設定信号をＰＬＬ回路１７へ出力する。【選択図】図１
2018181199.tif 000002
【特許請求の範囲】
【請求項１】
外部から入力される周波数設定信号に従って設定された設定周波数を有する周波数信号を生成するように構成された信号生成部（１７）と、
前記周波数信号が入力され、前記周波数信号の周波数を動作周波数として、制御対象を制御するための複数の制御処理を実行するように構成された処理実行部（１１）と、
前記制御処理を開始するときに、前記制御処理を開始する時刻から、前記制御処理を完了させる必要がある時刻であるデッドラインになるまでに要するデッドライン時間を設定するように構成されたデッドライン時間設定部（Ｓ１０）と、
前記処理実行部が前記制御処理の開始から完了までに必要とする処理時間が、前記デッドライン時間設定部により設定された前記デッドライン時間を超えないように、前記処理実行部の前記動作周波数を算出するように構成された周波数算出部（Ｓ２０）と、
前記周波数算出部により算出された前記動作周波数を示す前記周波数設定信号を前記信号生成部へ出力するように構成された周波数設定部（Ｓ３０）と
を備える電子制御装置（１）。
【請求項２】
請求項１に記載の電子制御装置であって、
前記制御処理の実行中において、前記制御処理の処理量が予め設定された算出開始判定値と一致した場合に、前記制御処理の開始から現時点までに要した実行時間を算出する実行時間算出部（Ｓ１１０）と、
前記実行時間算出部により算出された前記実行時間に基づいて、前記制御処理が完了する処理完了時刻が前記デッドラインを超えるか否かを判断するデッドライン判断部（Ｓ１２０）と、
前記処理完了時刻が前記デッドラインを超えると前記デッドライン判断部が判断した場合に、前記処理完了時刻が前記デッドラインを超えないように、現時点の前記動作周波数より高い前記動作周波数を設定するように構成された周波数上昇部（Ｓ１３０）と、
前記周波数上昇部により設定された前記動作周波数を示す前記周波数設定信号を前記信号生成部へ出力するように構成された周波数上昇設定部（Ｓ１３０）と
を備える電子制御装置。
【請求項３】
請求項１または請求項２に記載の電子制御装置であって、
前記制御処理の実行中において、前記制御処理よりも優先度が高い高優先度制御処理の割り込みが発生し、その後、前記高優先度制御処理が完了したときに、前記高優先度制御処理の開始から現時点までに要した高優先度実行時間を算出するように構成された高優先度実行時間算出部（Ｓ２１０）と、
少なくとも、前記デッドライン時間設定部により設定された前記デッドライン時間から、前記高優先度実行時間算出部により算出された前記高優先度実行時間を減算した減算値を用いて、前記デッドライン時間を再度設定するデッドライン時間再設定部（Ｓ２２０）と、
前記処理時間が、前記デッドライン時間再設定部により設定された前記デッドライン時間を超えないように、前記処理実行部の前記動作周波数を算出するように構成された周波数再算出部（Ｓ２３０）と、
前記周波数再算出部により算出された前記動作周波数を示す前記周波数設定信号を前記信号生成部へ出力するように構成された周波数再設定部（Ｓ２４０）と
を備える電子制御装置。
【請求項４】
請求項１〜請求項３の何れか１項に記載の電子制御装置であって、
前記処理実行部の処理負荷を算出するように構成された処理負荷算出部（Ｓ７２０）と、
前記制御処理が完了した時刻から前記制御処理の前記デッドラインまでの時間を余裕時間として算出するように構成された余裕時間算出部（Ｓ７１０，Ｓ７４０）と、
少なくとも、前記処理負荷算出部により算出された前記処理負荷と、前記余裕時間算出部により算出された前記余裕時間とを用いて、前記処理負荷と負の相関を有し、且つ、前記余裕時間と正の相関を有するように、算出係数を設定する係数設定部（Ｓ７３０，Ｓ７５０，Ｓ７６０，Ｓ７７０）とを備え、
前記デッドライン時間設定部は、前記デッドライン時間に、前記係数設定部により設定された前記算出係数を乗じた乗算値を、新たな前記デッドライン時間とする電子制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、動作周波数を変更可能に構成された電子制御装置に関する。
【背景技術】
【０００２】
特許文献１には、複数のプログラムを実行するプロセッサを備えたマイクロコンピュータが記載されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１４−１３５０２５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１に記載のように、プロセッサの動作周波数が高いほどプロセッサの処理能力が高くなるが、その一方、プロセッサの電力消費量が大きくなってしまう。
本開示は、電力消費量の増加を抑制することを目的とする。
【課題を解決するための手段】
【０００５】
本開示の一態様は、信号生成部（１７）と、処理実行部（１１）と、デッドライン時間設定部（Ｓ１０）と、周波数算出部（Ｓ２０）と、周波数設定部（Ｓ３０）とを備える電子制御装置（１）である。
【０００６】
信号生成部は、外部から入力される周波数設定信号に従って設定された設定周波数を有する周波数信号を生成するように構成される。
処理実行部は、周波数信号が入力され、周波数信号の周波数を動作周波数として、制御対象を制御するための複数の制御処理を実行するように構成される。
【０００７】
デッドライン時間設定部は、制御処理を開始するときに、制御処理を開始する時刻から、制御処理を完了させる必要がある時刻であるデッドラインになるまでに要するデッドライン時間を設定するように構成される。
【０００８】
周波数算出部は、処理実行部が制御処理の開始から完了までに必要とする処理時間が、デッドライン時間設定部により設定されたデッドライン時間を超えないように、処理実行部の動作周波数を算出するように構成される。
【０００９】
周波数設定部は、周波数算出部により算出された動作周波数を示す周波数設定信号を信号生成部へ出力するように構成される。
このように構成された本開示の電子制御装置は、制御処理毎に、制御処理のデッドラインを超えないようにした必要最低限の動作周波数を設定することができるため、無駄に高い動作周波数を設定してしまうことがなく、電子制御装置における電力消費量の増加を抑制することができる。
【００１０】
なお、この欄及び特許請求の範囲に記載した括弧内の符号は、一つの態様として後述する実施形態に記載の具体的手段との対応関係を示すものであって、本開示の技術的範囲を限定するものではない。
【図面の簡単な説明】
【００１１】
【図１】ＥＣＵ１の構成を示すブロック図である。
【図２】第１周波数設定処理を示すフローチャートである。
【図３】コア周波数を設定した後の状態を示す図である。
【図４】第２周波数設定処理を示すフローチャートである。
【図５】第３周波数設定処理を示すフローチャートである。
【図６】第１，２，３周波数設定処理が実行される順序の具体例を示すフローチャートである。
【図７】点火時期タスク処理とタイマ設定処理に要する時間を説明する図である。
【図８】係数設定処理を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下に本開示の実施形態を図面とともに説明する。
本実施形態の電子制御装置１（以下、ＥＣＵ１）は、車両に搭載され、図示しないエンジンの制御を行う。ＥＣＵは、Electronic Control Unitの略である。
【００１３】
ＥＣＵ１には、図１に示すように、センサ群２からの信号が入力される。センサ群２は、図示しないクランク角センサ、エアフロメータ、スロットル開度センサ、吸気圧センサおよび空燃比センサ等から構成されている。
【００１４】
クランク角センサは、エンジンのクランク軸の回転角を検出する。エアフロメータは、吸気管を通ってエンジンに供給される空気量を検出する。スロットル開度センサは、スロットルバルブの開度を検出する。吸気圧センサは、吸気管内の圧力を検出する。空燃比センサは、排ガス中の酸素濃度からエンジンに供給された燃料混合気の空燃比を検出する。
【００１５】
そしてＥＣＵ１は、センサ群２から入力される上記各信号に基づいてエンジンの状態を検出するとともに、その検出結果に基づいて、スロットルバルブの開度を変えるスロットルモータ３、各気筒内の点火プラグ４、および各気筒内のインジェクタ５などを作動させる。
【００１６】
ＥＣＵ１は、ＣＰＵ１１、ＲＯＭ１２、ＲＡＭ１３、Ａ／Ｄ変換器１４、タイマ１５、基準周波数発生器１６およびＰＬＬ回路１７，１８，１９を備える。ＰＬＬは、Phase Locked Loopの略である。
【００１７】
ＥＣＵ１の各種機能は、ＣＰＵ１１が非遷移的実体的記録媒体に格納されたプログラムを実行することにより実現される。この例では、ＲＯＭ１２が、プログラムを格納した非遷移的実体的記録媒体に該当する。また、このプログラムの実行により、プログラムに対応する方法が実行される。なお、ＣＰＵ１１が実行する機能の一部または全部を、一つあるいは複数のＩＣ等によりハードウェア的に構成してもよい。
【００１８】
Ａ／Ｄ変換器１４は、センサ群２から入力されたアナログ信号の電圧値をデジタル値に変換する。
タイマ１５は、ＰＬＬ回路１９から入力される信号のオン／オフによりカウントアップされるフリーカウンタと、コンペアレジスタとを、スロットルモータ３、点火プラグ４およびインジェクタ５のそれぞれについて備えている。そしてタイマ１５は、フリーランカウンタの値が、コンペアレジスタに予めセットされているコンペア値と同じになると、対応するアクチュエータ（すなわち、スロットルモータ３、点火プラグ４およびインジェクタ５の何れか）を駆動するためのパルス信号を出力する。
【００１９】
基準周波数発生器１６は、例えば水晶発振器で構成されており、発振周波数が固定された基準信号を出力する。
ＰＬＬ回路１７，１８，１９は、図示しない電圧制御発振器（以下、ＶＣＯ）、分周器、位相比較器およびループフィルタを備える。ＶＣＯは、Voltage Controlled Oscillatorの略である。
【００２０】
ＶＣＯは、外部から入力される制御電圧によって発振周波数を変化させることが可能な発振器である。分周器は、ＶＣＯから出力される信号の周波数を１／Ｋにした信号を出力する。Ｋは、正の整数である。以下、Ｋを分周数Ｋともいう。分周器は、分周数Ｋを格納する分周数レジスタを備え、分周数レジスタに格納されている値に基づいて、入力される信号の周波数を１／Ｋにした信号を出力する。分周器は、外部から入力される分周数設定信号に基づいて、分周数レジスタに格納されている値（すなわち、分周数Ｋ）を変更させることができるように構成されている。
【００２１】
位相比較器は、分周器で分周した信号の位相と、基準周波数発生器から出力された基準信号の位相とを比較し、この位相差を示す位相差信号を出力する。ループフィルタは、位相比較器から出力された位相差信号を平滑化して制御電圧を生成し、生成した制御電圧をＶＣＯへ出力する。これにより、ＰＬＬ回路１７，１８，１９は、基準信号の周波数のＫ倍の周波数を有するクロック信号を出力する。
【００２２】
なお、ＰＬＬ回路１７には、ＣＰＵ１１から分周数設定信号が入力される。すなわち、ＰＬＬ回路１７では、ＣＰＵ１１からの分周数設定信号に応じて分周数Ｋが変動する一方、ＰＬＬ回路１８，１９では、分周数Ｋが予め設定された値に固定されている。
【００２３】
そしてＰＬＬ回路１７は、ＶＣＯが生成したクロック信号をＣＰＵ１１へ出力する。ＰＬＬ回路１８は、ＶＣＯが生成したクロック信号をＡ／Ｄ変換器１４へ出力する。ＰＬＬ回路１９は、ＶＣＯが生成したクロック信号をタイマ１５へ出力する。
【００２４】
ＣＰＵ１１は、角度同期タスク処理、時間同期タスク処理、イベント処理およびアイドル処理を実行する。以下、角度同期タスク処理と時間同期タスク処理をまとめて単にタスク処理ともいう。
【００２５】
角度同期タスク処理は、予め設定された角度イベント生成条件が成立する毎に実行される。角度イベント生成条件は、例えば、クランク軸が予め設定されたイベント生成角度（例えば、３０°ＣＡ）回転することである。
【００２６】
時間同期タスク処理は、予め設定された時間イベント生成条件が成立する毎に実行される。時間イベント生成条件は、例えば、予め設定されたイベント生成時間（例えば、１ｍｓおよび８ｍｓ）が経過することである。
【００２７】
イベント処理は、角度同期タスク処理および時間同期タスク処理とは異なり非同期で発生する割り込み処理である。
アイドル処理は、タスク処理とイベント処理が行われていない空き時間に実行される処理である。アイドル処理では、主に、ＲＡＭ１３における所定のデータ記憶領域に対して予め設定された設定値を書き込むリフレッシュ処理が行われる。
【００２８】
次に、ＣＰＵ１１が実行する第１周波数設定処理の手順を説明する。第１周波数設定処理は、タスク処理またはイベント処理を開始するときに実行される処理である。
この第１周波数設定処理が実行されると、ＣＰＵ１１は、図２に示すように、まずＳ１０にて、デッドライン時間を算出する。デッドライン時間は、タスク処理およびイベント処理を完了させる必要がある時刻（以下、デッドライン）になるまでに要する時間である。なお、タスク処理およびイベント処理の実行がデッドラインを超えると、ＥＣＵ１によるエンジン制御が破綻するおそれがある。
【００２９】
ここで、１ｍｓが経過する毎に実行される時間同期タスク処理（以下、１ｍｓタスク処理）におけるデッドライン時間の算出方法を一例として説明する。１ｍｓタスク処理は、その処理の開始から０．７ｍｓ以内に処理を完了する必要があるとする。すなわち、１ｍｓタスク処理では、処理を完了する必要がある時間（以下、処理完了時間）は、０．７ｍｓである。そして、１ｍｓタスク処理の処理時間が０．７ｍｓを超えないように余裕を持たせるために、１未満となるように予め設定された算出係数に０．７ｍｓを乗じた値をデッドライン時間として算出する。１ｍｓタスク処理の算出係数が例えば０．６であるとすると、１ｍｓタスク処理のデッドライン時間は、０．６×０．７＝０．４２［ｍｓ］である。
【００３０】
なお、角度同期タスク処理では、エンジン回転数に応じて、上記の処理完了時間が変動する。このため、角度同期タスク処理では、エンジン回転数と処理完了時間との関係が予め設定されたマップを用いて、エンジン回転数に応じた処理完了時間を算出する。
【００３１】
次にＳ２０にて、ＣＰＵ１１の動作周波数（以下、コア周波数）を算出する。ここで、１ｍｓタスク処理におけるコア周波数の算出方法を一例として説明する。ＣＰＵ１１の動作周波数が３００ＭＨｚであるときにおける１ｍｓタスク処理の処理時間は０．２ｍｓであるとする。このため、０．４２ｍｓ以下で１ｍｓタスク処理を完了することができるコア周波数は、（０．２／０．４２）×３００＝１４３［ＭＨｚ］である。
【００３２】
さらにＳ３０にて、コア周波数を設定する。具体的には、ＰＬＬ回路１７からＣＰＵ１１へ出力されるクロック信号の周波数が、Ｓ２０で算出されたコア周波数となるように、分周数Ｋを算出し、この分周数Ｋを示す分周数設定信号をＰＬＬ回路１７へ出力する。
【００３３】
そしてＳ４０にて、第１周波数設定処理が実行される起因となったタスク処理またはイベント処理の実行を開始させる。またＳ５０にて、Ｓ４０においてタスク処理またはイベント処理の実行を開始させた開始時刻をＲＡＭ１３に記憶して、第１周波数設定処理を終了する。
【００３４】
図３は、第１周波数設定処理によってタスク処理およびイベント処理のコア周波数を設定した後の状態を示す図である。図３では、１ｍｓタスク処理Ｐ１と、８ｍｓが経過する毎に実行される時間同期タスク処理Ｐ２（以下、８ｍｓタスク処理Ｐ２）と、角度同期タスク処理Ｐ３と、割込みサービスルーチンＰ４とを示している。なお、１ｍｓタスク処理Ｐ１、８ｍｓタスク処理Ｐ２および角度同期タスク処理Ｐ３はタスク処理であり、割込みサービスルーチンＰ４はイベント処理である。また、１ｍｓタスク処理Ｐ１、８ｍｓタスク処理Ｐ２、角度同期タスク処理Ｐ３および割込みサービスルーチンＰ４の中で、処理を実行する優先度が最も高いのは、割込みサービスルーチンＰ４である。また、優先度が２番目、３番目および４番目に高いのはそれぞれ、角度同期タスク処理Ｐ３、１ｍｓタスク処理Ｐ１および８ｍｓタスク処理Ｐ２である。
【００３５】
図３は、１ｍｓタスク処理Ｐ１におけるコア周波数を１００ＭＨｚに設定することにより、１ｍｓタスク処理Ｐ１の処理時間ＴＰ１を１ｍｓタスク処理Ｐ１のデッドライン時間ＴＤ１より短くしていることを示している。同様に、図３は、８ｍｓタスク処理Ｐ２におけるコア周波数を８０ＭＨｚに設定することにより、８ｍｓタスク処理Ｐ２の処理時間ＴＰ２を８ｍｓタスク処理Ｐ２のデッドライン時間ＴＤ２より短くしていることを示している。また図３は、角度同期タスク処理Ｐ３におけるコア周波数を１５０ＭＨｚに設定することにより、角度同期タスク処理Ｐ３の処理時間ＴＰ３を角度同期タスク処理Ｐ３のデッドライン時間ＴＤ３より短くしていることを示している。また図３は、割込みサービスルーチンＰ４におけるコア周波数を２００ＭＨｚに設定することにより、割込みサービスルーチンＰ４の処理時間ＴＰ４を割込みサービスルーチンＰ４のデッドライン時間ＴＤ４より短くしていることを示している。
【００３６】
次に、ＣＰＵ１１が実行する第２周波数設定処理の手順を説明する。第２周波数設定処理は、ＣＰＵ１１がタスク処理またはイベント処理における全体の５０％の処理を実行したときに実行される処理である。
【００３７】
この第２周波数設定処理が実行されると、ＣＰＵ１１は、図４に示すように、まずＳ１１０にて、第２周波数設定処理が実行される起因となったタスク処理またはイベント処理（以下、対象処理）の実行時間を算出する。具体的には、まず、対象処理の開始時刻を示す情報をＲＡＭ１３から取得する。対象処理の開始時刻を示す情報は、Ｓ５０の処理によってＲＡＭ１３に記憶されている。そして、現在の時刻から対象処理の開始時刻を減算した減算値を、対象処理の実行時間として算出する。
【００３８】
そしてＳ１２０にて、Ｓ１１０で算出された実行時間が、対象処理のデッドライン時間の半分の時間より長いか否かを判断する。ここで、実行時間がデッドライン時間の半分の時間より長くない場合には、第２周波数設定処理を終了する。一方、実行時間がデッドライン時間の半分の時間より長い場合には、Ｓ１３０にて、コア周波数を上昇させて、第２周波数設定処理を終了する。本実施形態では、コア周波数を、ＣＰＵ１１がタスク処理またはイベント処理を実行するときの最も高いコア周波数として予め設定された上限コア周波数（本実施形態では、３００ＭＨｚ）に設定する。具体的には、ＰＬＬ回路１７からＣＰＵ１１へ出力される信号の周波数が、上限コア周波数となるように、分周数Ｋを算出し、この分周数Ｋを示す分周数設定信号をＰＬＬ回路１７へ出力する。
【００３９】
次に、ＣＰＵ１１が実行する第３周波数設定処理の手順を説明する。第３周波数設定処理は、タスク処理またはイベント処理の実行中に、優先度が高いタスク処理またはイベント処理（以下、高優先度処理）の割り込みが発生し、その後、この高優先度処理が終了したときに実行される処理である。
【００４０】
この第３周波数設定処理が実行されると、ＣＰＵ１１は、図５に示すように、まずＳ２１０にて、上記の高優先度処理の実行時間を算出する。具体的には、まず、高優先度処理の開始時刻を示す情報をＲＡＭ１３から取得する。高優先度処理の開始時刻を示す情報は、Ｓ５０の処理によってＲＡＭ１３に記憶されている。そして、現在の時刻から高優先度処理の開始時刻を減算した減算値を、高優先度処理の実行時間として算出する。
【００４１】
次にＳ２２０にて、高優先度処理に割り込まれる前に実行していたタスク処理またはイベント処理（以下、割込前処理）のデッドライン時間を算出する。具体的には、割込前処理のデッドライン時間から、Ｓ２１０で算出した高優先度処理の実行時間を減算した減算値を、割込前処理の新たなデッドライン時間として算出する。
【００４２】
そしてＳ２３０にて、Ｓ２２０で算出したデッドライン時間を用いて、Ｓ２０と同様にして、コア周波数を算出する。さらにＳ２４０にて、Ｓ３０と同様にして、コア周波数を設定する。具体的には、ＰＬＬ回路１７からＣＰＵ１１へ出力される信号の周波数が、Ｓ２３０で算出されたコア周波数となるように、分周数Ｋを算出し、この分周数Ｋを示す分周数設定信号をＰＬＬ回路１７へ出力する。
【００４３】
そしてＳ２５０にて、割込前処理を復帰させて、第３周波数設定処理を終了する。これにより、ＣＰＵ１１は、割込前処理を再開する。
次に、上記の第１周波数設定処理、第２周波数設定処理および第３周波数設定処理が実行される順序の具体例をフローチャートを用いて説明する。
【００４４】
図６に示すように、ＣＰＵ１１は、まずＳ４１０にて、タスク処理またはイベント処理が発生したか否かを判断する。ここで、タスク処理またはイベント処理が発生していない場合には、タスク処理またはイベント処理が発生するまで待機する。
【００４５】
そして、タスク処理またはイベント処理が開始される場合には、Ｓ４２０にて、Ｓ１０と同様にして、デッドライン時間を算出する。さらにＳ４３０にて、Ｓ２０と同様にして、コア周波数を算出する。その後Ｓ４４０にて、Ｓ３０と同様にして、コア周波数を設定する。そしてＳ４５０にて、Ｓ４０と同様にして、タスク処理またはイベント処理の実行を開始させる。
【００４６】
その後Ｓ４６０にて、現在実行中のタスク処理またはイベント処理よりも優先度が高いタスク処理またはイベント処理が発生していない場合には、Ｓ５３０に移行する。一方、Ｓ４６０にて、現在実行中のタスク処理またはイベント処理よりも優先度が高いタスク処理またはイベント処理が発生した場合には、Ｓ４７０にて、優先度が高いタスク処理またはイベント処理を実行する。そして、優先度が高いタスク処理またはイベント処理が完了すると、Ｓ４８０にて、Ｓ２１０と同様にして、優先度が高いタスク処理またはイベント処理の実行時間を算出する。
【００４７】
またＳ４９０にて、Ｓ２２０と同様にして、優先度が高いタスク処理またはイベント処理が完了した後に復帰させるタスク処理またはイベント処理（すなわち、割込前処理）のデッドライン時間を算出する。そしてＳ５００にて、Ｓ２３０と同様にして、Ｓ４９０で算出したデッドライン時間を用いてコア周波数を算出する。さらにＳ５１０にて、Ｓ２４０と同様にして、コア周波数を設定する。その後Ｓ５２０にて、Ｓ２５０と同様にして、割込前処理を復帰させて、Ｓ５３０に移行する。
【００４８】
そしてＳ５３０に移行して、タスク処理またはイベント処理における全体の５０％の処理を実行すると、Ｓ５４０にて、Ｓ１１０と同様にして、実行時間を算出する。さらにＳ５５０にて、Ｓ１２０と同様にして、実行時間がデッドライン時間の半分の時間より長いか否かを判断する。ここで、実行時間がデッドライン時間の半分の時間より長くない場合には、Ｓ５７０に移行する。一方、実行時間がデッドライン時間の半分の時間より長い場合には、Ｓ５６０にて、Ｓ１３０と同様にして、コア周波数を上昇させて、Ｓ５７０に移行する。そしてＳ５７０に移行して、タスク処理またはイベント処理が完了すると、ＣＰＵ１１による処理を一旦終了する。
【００４９】
次に、ＣＰＵ１１が上限コア周波数で動作する場合と、ＣＰＵ１１が上限コア周波数より低いコア周波数を設定して動作する場合とにおいて、点火プラグ４の点火時期を算出するタスク処理（以下、点火時期タスク処理）と、点火時期を設定するタイマ設定処理とに要する時間を説明する。
【００５０】
図７に示すように、ＣＰＵ１１が上限コア周波数で動作する場合において、点火時期タスク処理ＴＴ１が時刻ｔ１で終了した直後に、点火時期タスク処理ＴＴ１で算出された点火時期をコンペアレジスタに設定するタイマ設定ＴＳ１が開始される。そして、タイマ設定ＴＳ１が時刻ｔ２で終了する。なお、時刻ｔ２は、点火時期設定期限ｔ５よりも前の時刻である。その後、時刻ｔ６で点火時期が到来すると、タイマ１５はパルス信号ＰＳ１を出力する。
【００５１】
一方、ＣＰＵ１１が上限コア周波数より低いコア周波数を設定して動作する場合には、点火時期タスク処理ＴＴ２が時刻ｔ３で終了した直後に、点火時期タスク処理ＴＴ２で算出された点火時期をコンペアレジスタに設定するタイマ設定ＴＳ２が開始される。そして、タイマ設定ＴＳ２が時刻ｔ４で終了する。なお、時刻ｔ３は時刻ｔ１より遅くなり、時刻ｔ４は時刻ｔ２より遅くなる。また時刻ｔ４は、点火時期設定期限ｔ５よりも前の時刻である。すなわち、上限コア周波数より低いコア周波数で動作する場合には、上限コア周波数で動作する場合と比較して、点火時期タスク処理およびタイマ設定に要する時間が長くなる。しかし、点火時期設定期限ｔ５よりも前に、タイマ設定を終了させることができる。その後、時刻ｔ６で点火時期が到来すると、タイマ１５はパルス信号ＰＳ２を出力する。
【００５２】
このように構成されたＥＣＵ１は、ＰＬＬ回路１７と、ＣＰＵ１１とを備える。
ＰＬＬ回路１７は、外部から入力される分周数設定信号に従って設定された分周数Ｋに基づいて、基準周波数発生器１６から入力される基準信号の周波数を分周数Ｋ倍した周波数を有するクロック信号を生成する。
【００５３】
ＣＰＵ１１は、クロック信号が入力され、クロック信号の周波数をコア周波数として、エンジンを制御するための複数のタスク処理およびイベント処理を実行する。
ＣＰＵ１１は、タスク処理またはイベント処理を開始するときに、タスク処理またはイベント処理を開始する時刻から、タスク処理またはイベント処理を完了させる必要がある時刻（すなわち、デッドライン）になるまでに要するデッドライン時間を設定する。
【００５４】
ＣＰＵ１１は、ＣＰＵ１１がタスク処理またはイベント処理の開始から完了までに必要とする処理時間が、設定されたデッドライン時間を超えないように、ＣＰＵ１１のコア周波数を算出する。
【００５５】
ＣＰＵ１１は、算出されたコア周波数に対応した分周数Ｋを示す分周数設定信号をＰＬＬ回路１７へ出力する。
このようにＥＣＵ１は、タスク処理およびイベント処理毎に、タスク処理およびイベント処理のデッドラインを超えないようにした必要最低限のコア周波数を設定することができるため、無駄に高いコア周波数を設定してしまうことがなく、ＥＣＵ１における電力消費量の増加を抑制することができる。
【００５６】
またＥＣＵ１では、ＣＰＵ１１は、タスク処理またはイベント処理の実行中において、タスク処理またはイベント処理の処理量が全体の５０％と一致した場合に、タスク処理またはイベント処理の開始から現時点までに要した実行時間を算出する。
【００５７】
ＣＰＵ１１は、算出された実行時間がタスク処理またはイベント処理のデッドライン時間の半分の時間より長いか否かにより、タスク処理またはイベント処理が完了する処理完了時刻がデッドラインを超えるか否かを判断する。
【００５８】
ＣＰＵ１１は、処理完了時刻がデッドラインを超えると判断した場合に、処理完了時刻がデッドラインを超えないように、現時点のコア周波数より高いコア周波数として、上限コア周波数を設定する。そしてＣＰＵ１１は、設定された上限コア周波数に対応した分周数Ｋを示す分周数設定信号をＰＬＬ回路１７へ出力する。
【００５９】
このようにＥＣＵ１は、タスク処理またはイベント処理の開始時だけでなく実行中においてもコア周波数を設定するため、タスク処理またはイベント処理がデッドラインを超えても処理を完了することができないという事態の発生を抑制することができる。
【００６０】
またＥＣＵ１では、ＣＰＵ１１は、タスク処理またはイベント処理の実行中において、タスク処理またはイベント処理よりも優先度が高い高優先度処理の割り込みが発生し、その後、高優先度処理が完了したときに、高優先度処理の開始から現時点までに要した高優先度処理の実行時間（以下、高優先度実行時間）を算出する。
【００６１】
ＣＰＵ１１は、設定されたデッドライン時間から、算出された高優先度実行時間を減算した減算値を用いて、高優先度処理に割り込まれる前に実行していたタスク処理またはイベント処理（すなわち、割込前処理）のデッドライン時間を再度設定する。
【００６２】
ＣＰＵ１１は、割込前処理の処理時間が、再度設定されたデッドライン時間を超えないように、ＣＰＵ１１のコア周波数を算出する。ＣＰＵ１１は、算出されたコア周波数に対応した分周数Ｋを示す分周数設定信号をＰＬＬ回路１７へ出力する。
【００６３】
このようにＥＣＵ１は、タスク処理またはイベント処理の実行中において高優先度処理に割り込まれた場合にコア周波数を再度設定する。このため、ＥＣＵ１は、高優先度処理に割り込まれたことに起因してタスク処理またはイベント処理がデッドラインを超えても処理を完了することができないという事態の発生を抑制することができる。
【００６４】
以上説明した実施形態において、ＰＬＬ回路１７は信号生成部に相当し、ＣＰＵ１１は処理実行部に相当し、Ｓ１０はデッドライン時間設定部としての処理に相当し、Ｓ２０は周波数算出部としての処理に相当し、Ｓ３０は周波数設定部としての処理に相当する。
【００６５】
また、分周数設定信号は周波数設定信号に相当し、基準信号の周波数を分周数Ｋ倍した周波数は設定周波数に相当し、ＰＬＬ回路１７から出力されるクロック信号は周波数信号に相当する。
【００６６】
また、コア周波数は動作周波数に相当し、エンジンは制御対象に相当し、タスク処理およびイベント処理は制御処理に相当する。
また、Ｓ１１０は実行時間算出部としての処理に相当し、Ｓ１２０はデッドライン判断部としての処理に相当し、Ｓ１３０は周波数上昇部および周波数上昇設定部としての処理に相当し、タスク処理またはイベント処理における全体の５０％の処理量は算出開始判定値に相当する。
【００６７】
また、Ｓ２１０は高優先度実行時間算出部としての処理に相当し、Ｓ２２０はデッドライン時間再設定部としての処理に相当し、Ｓ２３０は周波数再算出部としての処理に相当し、Ｓ２４０は周波数再設定部としての処理に相当する。
【００６８】
また、高優先度処理は高優先度制御処理に相当し、高優先度処理の実行時間は高優先度実行時間に相当する。
以上、本開示の一実施形態について説明したが、本開示は上記実施形態に限定されるものではなく、種々変形して実施することができる。
【００６９】
［変形例１］
例えば上記実施形態では、算出係数が一定値である形態を示したが、ＣＰＵ１１の処理負荷とデッドライン時間までの余裕時間とに基づいて、算出係数を変動させるようにしてもよい。ここで、ＣＰＵ１１が実行する係数設定処理の手順を説明する。係数設定処理は、タスク処理またはイベント処理が完了したときに実行される処理である。
【００７０】
この係数設定処理が実行されると、ＣＰＵ１１は、図８に示すように、まずＳ７１０にて、この係数設定処理が実行される起因となったタスク処理またはイベント処理（以下、実行起因処理）の実行時間を算出する。具体的には、まず、実行起因処理の開始時刻を示す情報をＲＡＭ１３から取得する。実行起因処理の開始時刻を示す情報は、Ｓ５０の処理によってＲＡＭ１３に記憶されている。そして、現在の時刻から実行起因処理の開始時刻を減算した減算値を、実行起因処理の実行時間として算出する。
【００７１】
次にＳ７２０にて、ＣＰＵ１１の処理負荷を算出する。本実施形態では、処理負荷としてＣＰＵ使用率を算出する。
そしてＳ７３０にて、Ｓ７２０で算出した処理負荷が予め設定された余裕判定値より大きいか否かを判断する。ここで、処理負荷が余裕判定値より大きい場合には、Ｓ７７０に移行する。一方、処理負荷が余裕判定値以下である場合には、Ｓ７４０にて、実行起因処理の余裕時間を算出する。具体的には、実行起因処理のデッドライン時間から、Ｓ７１０で算出した実行起因処理の実行時間を減算した減算値を、実行起因処理の余裕時間として算出する。
【００７２】
次にＳ７５０にて、Ｓ７４０で算出した余裕時間が予め設定された設定判定値より大きいか否かを判断する。ここで、余裕時間が設定判定値より大きい場合には、Ｓ７６０にて、算出係数を大きくして、係数設定処理を終了する。具体的には、例えば、算出係数を０．０１大きくする。なお、算出係数は、タスク処理およびイベント処理毎に、タスク処理およびイベント処理の優先度により初期値（例えば、０．５）が設定されている。一方、余裕時間が設定判定値以下である場合には、Ｓ７７０に移行する。
【００７３】
そしてＳ７７０に移行すると、Ｓ７７０にて、算出係数を小さくして、係数設定処理を終了する。具体的には、例えば、算出係数を０．０１小さくする。
このように構成されたＥＣＵ１では、ＣＰＵ１１は、ＣＰＵ１１の処理負荷を算出する。ＣＰＵ１１は、タスク処理またはイベント処理が完了した時刻からタスク処理またはイベント処理のデッドラインまでの時間を余裕時間として算出する。
【００７４】
ＣＰＵ１１は、処理負荷と余裕時間とを用いて、処理負荷と負の相関を有し、且つ、余裕時間と正の相関を有するように、算出係数を設定する。ＣＰＵ１１は、デッドライン時間に、設定された算出係数を乗じた乗算値を、新たなデッドライン時間とする。
【００７５】
これにより、ＥＣＵ１は、処理負荷と余裕時間とに基づいて、処理負荷が高い場合と、余裕時間が短い場合とにおいて、算出係数を小さくすることができる。すなわち、ＥＣＵ１は、処理負荷が高い場合と、余裕時間が短い場合とにおいて、コア周波数を大きくすることができる。このため、ＥＣＵ１は、処理負荷が高い場合、または、余裕時間が短い場合であっても、タスク処理またはイベント処理がデッドラインを超えても処理を完了することができないという事態の発生を抑制することができる。
【００７６】
なお、Ｓ７２０は処理負荷算出部としての処理に相当し、Ｓ７１０，Ｓ７４０は余裕時間算出部としての処理に相当し、Ｓ７３０，Ｓ７５０，Ｓ７６０，Ｓ７７０は係数設定部としての処理に相当する。
【００７７】
［変形例２］
上記変形例１では、設定判定値が一定値である形態を示した。しかし、余裕時間が設定判定値より大きくなった後に用いる設定判定値と、余裕時間が設定判定値より小さくなった後に用いる設定判定値とを異ならせるようにしてもよい。すなわち、設定判定値にヒステリシス処理を施すようにしてもよい。
【００７８】
［変形例３］
上記実施形態では、タスク処理またはイベント処理が全体の５０％の処理を実行したときに第２周波数設定処理が実行される形態、すなわち、１つのタスク処理またはイベント処理で第２周波数設定処理が１回実行される形態を示した。しかし、１つのタスク処理またはイベント処理で、第２周波数設定処理のようにコア周波数を再設定する処理を、タスク処理またはイベント処理の処理量に応じて複数回実行するようにしてもよい。例えば、タスク処理またはイベント処理が全体の２５，５０，７５％の処理を実行したときに、第２周波数設定処理のようにコア周波数を再設定する処理を実行するようにしてもよい。この場合には、１つのタスク処理またはイベント処理で、コア周波数を再設定する処理が３回実行される。
【００７９】
また、上記実施形態における１つの構成要素が有する機能を複数の構成要素に分担させたり、複数の構成要素が有する機能を１つの構成要素に発揮させたりしてもよい。また、上記実施形態の構成の一部を省略してもよい。また、上記実施形態の構成の少なくとも一部を、他の上記実施形態の構成に対して付加、置換等してもよい。なお、特許請求の範囲に記載の文言から特定される技術思想に含まれるあらゆる態様が本開示の実施形態である。
【００８０】
上述したＥＣＵ１の他、当該ＥＣＵ１を構成要素とするシステム、当該ＥＣＵ１としてコンピュータを機能させるためのプログラム、このプログラムを記録した媒体、処理実行方法など、種々の形態で本開示を実現することもできる。
【符号の説明】
【００８１】
１…ＥＣＵ、１１…ＣＰＵ、１７…ＰＬＬ回路
【図１】
2018181199.tif 000003
【図２】
2018181199.tif 000004
【図３】
2018181199.tif 000005
【図４】
2018181199.tif 000006
【図５】
2018181199.tif 000007
【図６】
2018181199.tif 000008
【図７】
2018181199.tif 000009
【図８】
2018181199.tif 000010