(57)【要約】【課題】より効率の良いスケジューリングを実現できるようにする。【解決手段】複数のタスクのうち、現在の周期で実行しなければならない第１タスクを実行するのに要する実行時間Ｔ１を特定するとともに当該実行時間Ｔ１に基づいて現在の周期における残り時間を特定し、残り時間に、現在の周期で必ずしも実行しなくてもよい第２タスクであって実行可能な未実行のタスクを特定し、残り時間に、実行可能な未実行の第２タスクが特定された場合、実行可能な未実行の第２タスクを残り時間に実行させる。【選択図】図３
2014182606.tif 000002
【特許請求の範囲】
【請求項１】
一定周期毎に複数のタスクを順次実行させる処理を行うスケジューラを備えた演算装置（１０）であって、
前記複数のタスクのうち、現在の周期で実行しなければならない第１タスクを実行するのに要する実行時間を特定するとともに当該実行時間に基づいて現在の周期における残り時間を特定する残り時間特定手段と、
前記残り時間に、現在の周期で必ずしも実行しなくてもよい第２タスクであって実行可能な未実行のタスクを特定するタスク特定手段と、
前記残り時間に、前記実行可能な未実行の第２タスクが特定された場合、当該実行可能な未実行の第２タスクを前記残り時間に実行させるタスク実行手段と、を備えたことを特徴とする演算装置。
【請求項２】
前記未実行の前記第２タスクの実行時間を計測し、当該計測した前記未実行の前記第２タスクの実行時間を記憶手段に記憶させる実行時間記憶手段を備えたことを特徴とする請求項１に記載の演算装置。
【請求項３】
前記タスク特定手段は、前記記憶手段に実行時間が記憶されている前記第２タスクについては、前記記憶手段に記憶されている実行時間を用いて前記残り時間に実行可能な未実行の第２タスクを特定することを特徴とする請求項２に記載の演算装置。
【請求項４】
前記タスク特定手段は、前記第２タスクに、予め定められた順序に従って実行する順序付きタスクが含まれる場合、当該順序付きタスクの順序に従って前記残り時間に実行可能な未実行の第２タスクを特定することを特徴とする請求項１ないし３のいずれか１つに記載の演算装置。
【請求項５】
演算装置（１０）に、一定周期毎に複数のタスクを順次実行させるプログラムであって、
前記複数のタスクのうち、現在の周期で実行しなければならない第１タスクを実行するのに要する実行時間を特定するとともに当該実行時間に基づいて現在の周期における残り時間を特定させる手順と、
前記残り時間に、現在の周期で必ずしも実行しなくてもよい第２タスクであって実行可能な未実行のタスクを特定させる手順と、
前記残り時間に、前記実行可能な未実行の第２タスクが特定された場合、当該実行可能な未実行の第２タスクを前記残り時間に実行させる手順と、を前記演算装置（１０）に実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一定周期毎に複数のタスクを順次実行させる処理を行うスケジューラを備えた演算装置およびプログラムに関するものである。
【背景技術】
【０００２】
家電製品、車載機器等の各種機器においては、リアルタイムＯＳを搭載したマイコンが広く用いられるようになっている。リアルタイムＯＳでは、制御すべき処理単位（ジョブ）を分割し、並列に実行する必要があるジョブをタスクという概念に割り当て、予め設定された優先度に従って各タスクの順序を自動的に決定して実行制御するようになっている。しかし、リアルタイムＯＳを搭載するためには高スペックのマイコンや記憶容量の大きなＲＯＭが必要となるため、コストがアップしてしまう。
【０００３】
このため、家電製品、車載機器等の各種機器において、実行すべき処理が複雑でない場合には、リアルタイムＯＳを搭載せずに、各ジョブをメインループで呼び出して実行させるジョブスケジューラを低スペックのマイコンに備えることも多い。
【０００４】
このような各ジョブをメインループで呼び出して実行させるジョブスケジューラとして、各ジョブをリアルタイム処理の必要度に応じて複数のグループに分割するとともにグループ毎に優先度を設定し、優先度の低いグループに属するジョブの一サイクル当たりの呼び出し頻度を最小許容頻度に制限するように呼び出し制御するようにしたものがある（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−２３４２８５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記したような、各ジョブをメインループで呼び出して実行させるジョブスケジューラでは、一定周期毎に、複数のタスクを順番に実行して処理するようなスケジューリングが行われる。例えば、毎周期、実行する必要のあるタスクについては、そのタスクを優先して実行し、長期間（複数の周期間）に１回実行すればよいようなタスクについては、周期内の残った空き時間に実行するようなスケジューリングが行われる。
【０００７】
このようなスケジューリングでは、全てのタスクが処理時間内に必ず収まるように、最大負荷を考慮してある程度余裕を持たせてスケジューリングを行う必要がある。すなわち、通信障害による影響や通信メッセージの集中等により一時的に負荷が高くなっても、全てのタスクが処理時間内に必ず収まるように、毎周期、実行する必要のあるタスクの一サイクル当たりの実行時間を短めに設定してスケジューリングする必要がある。
【０００８】
また、このようなスケジューリングにおいて、毎周期、実行する必要のあるタスクにどれだけの時間を割り当てて、空き時間にどれだけの時間が割り当てられるかについて、静的に決められている。このため、多くの周期で比較的大きな空き時間が発生し、効率が悪いといった問題がある。
【０００９】
本発明は上記問題に鑑みたもので、より効率の良いスケジューリングを実現できるようにすることを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するため、請求項１に記載の発明は、一定周期毎に複数のタスクを順次実行させる処理を行うスケジューラを備えた演算装置（１０）であって、複数のタスクのうち、現在の周期で実行しなければならない第１タスクを実行するのに要する実行時間を特定するとともに当該実行時間に基づいて現在の周期における残り時間を特定する残り時間特定手段と、残り時間に、現在の周期で必ずしも実行しなくてもよい第２タスクであって実行可能な未実行のタスクを特定するタスク特定手段と、残り時間に、実行可能な未実行の第２タスクが特定された場合、実行可能な未実行の第２タスクを残り時間に実行させるタスク実行手段と、を備えたことを特徴としている。
【００１１】
このような構成によれば、複数のタスクのうち、現在の周期で実行しなければならない第１タスクを実行するのに要する実行時間を特定するとともに当該実行時間に基づいて現在の周期における残り時間を特定し、残り時間に、現在の周期で必ずしも実行しなくてもよい第２タスクであって実行可能な未実行のタスクを特定し、残り時間に、実行可能な未実行の第２タスクが特定された場合、実行可能な未実行の第２タスクを残り時間に実行させるので、より効率の良いスケジューリングを実現することができる。
【００１２】
なお、この欄および特許請求の範囲で記載した各手段の括弧内の符号は、後述する実施形態に記載の具体的手段との対応関係を示すものである。
【図面の簡単な説明】
【００１３】
【図１】本発明の一実施形態に係る演算装置を搭載したエアコンＥＣＵの構成を示す図である。
【図２】本発明の一実施形態に係る演算装置の構成を示す図である。
【図３】第１タスク、残り時間および第２タスクのタイミングチャートである。
【図４】エアコンＥＣＵに搭載されたマイコンにより実行される第２タスクについて説明するための図である。
【図５】マイコンにより実行される第２タスクについて説明するための図である。
【図６】マイコンの処理を示すフローチャートである。
【図７】第２タスクの実行例を表した図である。
【発明を実施するための形態】
【００１４】
本発明の一実施形態に係る演算装置としてのマイクロコンピュータ（以下、マイコンと称す）１０を搭載したエアコンＥＣＵ１の全体構成を図１に示す。マイコン１０は、車両の空調制御を行うエアコンＥＣＵ１に搭載されている。このエアコンＥＣＵ１には、ブロワモータ２、コンプレッサ３、メータＥＣＵ４、ボデーＥＣＵ５、エンジンＥＣＵ６、エアコンパネル７、各種センサ８等が接続されている。なお、エアコンＥＣＵ１と各ＥＣＵ４〜６との間は車両ＬＡＮ（例えば、ＣＡＮ）を介して接続されている。
【００１５】
ブロワモータ２は、電動式送風機の送風ファン（図示せず）を駆動する電動機である。また、コンプレッサ３は、空調用流路中の空調冷媒を吸入し、吸入した空調冷媒を圧縮して吐出する装置である。また、メータＥＣＵ４は、車両内に設けられたメータ、モニタ等の表示部へ、表示のための情報を出力するＥＣＵである。
【００１６】
ボデーＥＣＵ５は、ヘッドライト、ハザードランプ等の照明のオン／オフに伴う制御、キーレスエントリ方式等に採用されるワイヤレスドアロック機構の制御等のボデーに関する各種制御を行う。また、エンジンＥＣＵ６は、車両のエンジンのスタータモータ、点火時期、燃料供給量等を制御するＥＣＵである。また、エアコンパネル７は、ユーザによる車両の空調制御のための操作部および空調制御に関する表示を行うための表示部を備えている。
【００１７】
各種センサ８は、内気温度を検出する内気温センサ、外気温度を検出する外気温センサ、車室内に侵入する日射量を検出する日射センサ等を有しており、各種センサのセンサ信号をエアコンＥＣＵ１へ出力する。
【００１８】
エアコンＥＣＵ１は、各種センサ８より出力される各種センサ信号よりエアコンユニットを制御する目標吹出温度（ＴＡＯ）を算出するとともに空調風の吹出風量を算出し、室内を快適な空調状態になるようにブロワモータ２、コンプレッサ３等を制御する処理等を行う。
【００１９】
エアコンＥＣＵ１には、マイコン１０およびインタフェース回路１１が搭載されている。マイコン１０は、ＣＰＵ１０ａ、ＲＡＭ１０ｂ、ＲＯＭ１０ｃを備えたコンピュータとして構成されている。ＣＰＵ１０ａは、ＲＯＭ１０ｃに記憶された処理プログラムに従って各種処理を実施する。
【００２０】
また、インタフェース回路１１は、各ＥＣＵ４〜６が接続された車両ＬＡＮに接続するための車両ＬＡＮインタフェース回路と、ブロワモータ２、コンプレッサ３、エアコンパネル７、各種センサ８等を接続するための入出力回路により構成されている。
【００２１】
本実施形態におけるマイコン１０は、リアルタイムＯＳを搭載することなく、メインループで一定周期（本実施形態では、２０ミリ秒）毎に複数のタスクを順次実行させる処理を行うスケジューラを備えている。
【００２２】
本実施形態では、複数のタスクのうち、現在の周期で実行しなければならないタスクを第１タスクと称し、現在の周期で必ずしも実行しなくてもよいタスクを第２タスクと称する。第１、第２タスクは、それぞれ複数のタスクにより構成することもできる。なお、第２タスクは、例えば、１０周期に１回程度実行できればよいようなタスクである。
【００２３】
本実施形態におけるマイコン１０は、図３に示すように、現在の周期で実行しなければならない第１タスクを実行した後、第１タスクを実行するのに要した実行時間（図中、第１タスク実行期間Ｔ１と記す）を特定するとともに当該実行時間に基づいて現在の周期の残り時間（図中、残り期間と記す）を特定し、この残り時間に、現在の周期で必ずしも実行しなくてもよい第２タスクであって実行可能な未実行のタスクがあるか否かを判定し、実行可能な未実行の第２タスクがあると判定された場合、残り時間に、実行可能な未実行の第２タスクを実行させる処理を行う。なお、図中、第２タスクの実行時間を第２タスク実行期間Ｔ２と記す。
【００２４】
本実施形態においては、図４に示すように、第２のタスクとして、ＴＡＯニューロ演算タスク、風量ニューロ演算タスク、コンプレッサ制御タスクがある。ＴＡＯニューロ演算タスクおよび風量ニューロ演算タスクは順序なしタスクとなっており、コンプレッサ制御タスクは、予め定められた順序に従って実行する順序付きタスクとなっている。なお、コンプレッサ制御タスクは、ファジー制御タスク、車両保護制御タスク、出力調停タスクの順に処理を行う順序付きタスクとなっている。ファジー制御タスクは、現在のエバポレータ出口温度Ｔｅと目標エバポレータ温度ＴＥＯとの偏差を小さくするために必要な目標回転数の増減量をファジー制御により算出するタスクである。また、車両保護制御タスクは、通信異常時等にコンプレッサが故障しないように保護するための制御を行うタスクである。また、出力調停タスクは、情報出力の調停を行うためのタスクである。
【００２５】
ここで、説明を簡略化するため、図５に示すように、ＴＡＯニューロ演算タスクに対応するタスクをタスクＡ、風量ニューロ演算タスクに対応するタスクをタスクＣ、コンプレッサ制御タスクに対応するタスクをタスクＢとし、ファジー制御タスクに対応するタスクをタスクＢ１、車両保護制御タスクに対応するタスクをタスクＢ２、出力調停タスクに対応するタスクをタスクＢ３として説明する。
【００２６】
なお、図５中には、各タスクの実行時間が示されている。タスクＡの実行時間は０．９ミリ秒、タスクＢ１の実行時間は０．５ミリ秒、タスクＢ２の実行時間は０．２ミリ秒、タスクＢ８の実行時間は０．７ミリ秒、タスクＣの実行時間は０．３ミリ秒となっている。第１、第２タスクの各実行時間は、予めＲＯＭ１０ｃに記憶されている。
【００２７】
また、各タスクには予め順番が割り当てられている。具体的には、タスクＡは０番目、タスクＢは１番目、タスクＣは２番目となっている。ただし、タスクＢにおいては、タスクＢ１、タスクＢ２、タスクＢ３の順に実行するようになっている。
【００２８】
図６に、マイコン１０のフローチャートを示す。本実施形態におけるマイコン１０は、２０ミリ秒毎に図６に示す処理を実施する。なお、マイコン１０は、図６に示す処理を開始する前に、ＲＯＭ１０ｃに記憶されている第２タスクである各タスクの実行時間を読み出して、ＲＡＭ１０ｂに展開する処理を実施するようになっている。また、本実施形態において、図６に示す処理にかかる時間は省略するものとする。
【００２９】
まず、現在の周期で実行しなければならない第１タスクの実行を開始させる（Ｓ１００）。具体的には、現在の周期で実行しなければならない第１タスクの実行を開始させるとともに、第１タスクを実行完了するのに要する実行時間の計測を開始する。なお、第１タスクとして複数のタスクがある場合には、複数のタスクを順次実行させる。
【００３０】
そして、第１タスクの実行が完了すると、次に、残り時間があるか否かを判定する（Ｓ１０４）。具体的には、現在の周期において第１タスクを実行するのに要した実行時間の計測を終了し、第１タスクを実行するのに要した実行時間を特定するとともに当該実行時間と周期から現在の周期における残り時間を特定し、現在の周期において残り時間があるか否かを判定する。
【００３１】
ここで、図７（ａ）に示すように、残り時間が０．４ミリ秒となっているものとする。この場合、Ｓ１０４の判定はＹＥＳとなり、次に、変数ｉｎｄｅｘに０を代入する（Ｓ１０６）。
【００３２】
次に、変数ｉｎｄｅｘの値が第２タスクの数よりも大きいか否かを判定する（Ｓ１０８）。なお、第２タスク数は、順序付きタスクは１つとして数え、タスクＡ、Ｂ、Ｃの３つとなっているものとする。すなわち、変数ｉｎｄｅｘの値が第２タスク数以下となっているので、Ｓ１０８の判定はＮＯとなり、次に、変数ｉｎｄｅｘ番目のタスクが順序付きタスクであるか否かを判定する（Ｓ１１０）。
【００３３】
ここで、変数ｉｎｄｅｘ＝０番目のタスクは、順序付きタスクでないタスクＡとなっているため、Ｓ１１０の判定はＮＯとなり、次に、変数ｉｎｄｅｘ番目のタスクが未実行か否かを判定する（Ｓ１１２）。
【００３４】
タスクＡは未実行であるため、Ｓ１１２の判定はＹＥＳとなり、次に、残り時間内で処理できるタスクか否かを判定する（Ｓ１１４）。具体的には、ＲＡＭ１０ｂから第２タスクの実行時間を読み出して、タスクＡが残り時間内で処理できるタスクか否かを判定する。なお、ＲＡＭ１０ｂに、第２タスクの実行時間の実測値が記憶されている場合には、第２タスクの実行時間の実測値を優先的に用いて残り時間内で処理できるタスクか否かを判定する。
【００３５】
ここでは、タスクＡの実行時間は、０．９ミリ秒となっており残り時間の０．４ミリ秒では処理できないため、Ｓ１１４の判定はＮＯとなり、次に、変数ｉｎｄｅｘの値を１だけインクリメントする（Ｓ１１５）。これにより、変数ｉｎｄｅｘ＝１となる。この場合、Ｓ１０８の判定はＮＯとなり、次に、変数ｉｎｄｅｘ＝１番目のタスクが順序付きタスクとなっているか否かを判定する（Ｓ１１０）。
【００３６】
ここで、変数ｉｎｄｅｘ＝１番目のタスクは順序付きタスクであるタスクＢとなっているので、Ｓ１１０の判定はＹＥＳとなり、次に、変数ｉｎｄｅｘ＝１番目の順序付きタスクは全て実行済みか否かを判定する（Ｓ１１６）。
【００３７】
ここで、タスクＢは未実行であるため、Ｓ１１６の判定はＮＯとなり、次に、順序付きタスクのうち、未実施の先頭のタスクは残り時間で処理できるか否かを判定する（Ｓ１１８）。ここで、ＲＡＭ１０ｂから第２タスクの実行時間を読み出して、未実施の先頭のタスクであるタスクＢ１が残り時間内で処理できるタスクか否かを判定する。なお、ＲＡＭ１０ｂに、第２タスクの実行時間の実測値が記憶されている場合には、第２タスクの実行時間の実測値を優先的に用いて残り時間内で処理できるタスクか否かを判定する。
【００３８】
ここで、図７（ａ）に示すように、タスクＢ１の実行時間は０．５ミリ秒となっており、残り時間０．４秒では処理できないため、Ｓ１１８の判定はＮＯとなり、Ｓ１１５へ進む。ここで、変数ｉｎｄｅｘの値は１だけインクリメントされ、変数ｉｎｄｅｘ＝２となる。
【００３９】
この場合、Ｓ１０８の判定はＮＯとなり、変数ｉｎｄｅｘ＝２番目のタスクは順序付きタスクでないタスクＣとなっており、このタスクＣの実行時間は０．３ミリ秒となっており、残り時間０．４秒で処理できるため、Ｓ１１０の判定はＮＯ、Ｓ１１２、Ｓ１１４の判定はそれぞれＹＥＳとなり、第２タスクを実行する（Ｓ１２０）。このように、残り時間に実行可能な未実行の第２タスクとしてタスクＣが特定され、図７（ａ）に示すように、タスクＣが実行される。
【００４０】
そして、タスクＣの実行が完了すると、次に、実行したタスクを実行するのに要した実行時間をＲＡＭ１０ｂに記憶させ、更に、実行済みにする順番のあるタスクは順序についてもＲＡＭ１０ｂに記憶させる（Ｓ１２２）。ここでは、タスクＣの実行時間の実測値をＲＡＭ１０ｂに記憶させ、Ｓ１０４へ戻る。
【００４１】
ここで、タスクＣの実行により、残り時間は０．４ミリ秒未満から０．１ミリ秒へと変化している。したがって、Ｓ１０４の判定はＹＥＳとなり、Ｓ１０６にて、変数ｉｎｄｅｘに０を代入して、Ｓ１０６以降の処理を再度実施する。ただし、図７（ａ）に示すように、０．１ミリ秒未満で処理できるタスクは残っていないため、第２タスクを実行するＳ１２０へ進むことのないまま、Ｓ１１５にて、変数ｉｎｄｅｘは１、２と順次インクリメントされる。そして、変数ｉｎｄｅｘ＝３になると、Ｓ１０８の判定はＹＥＳとなり、第２タスクの実行を終了し（Ｓ１２４）、本処理を終了する。このように、１周期目では、第２タスクとしてタスクＣのみが実行される。
【００４２】
マイコン１０は、上記した処理が終了すると、次の２周期目に対応する処理を実施する。まず、第１タスクの実行を開始させ（Ｓ１００）、第１タスクの実行が完了すると、次に、残り時間があるか否かを判定する（Ｓ１０４）。
【００４３】
ここでは、図７（ｂ）に示すように、残り時間が０．８ミリ秒となっているものとする。この場合、Ｓ１０４の判定はＹＥＳとなり、次に、変数ｉｎｄｅｘに０を代入する（Ｓ１０６）。ここで、変数ｉｎｄｅｘ＝０番目のタスクは、順序付きでないタスクＡとなっており、このタスクＡの実行時間は０．９ミリ秒となっており、０．８ミリ秒の残り時間では処理できないため、Ｓ１１０の判定はＮＯ、Ｓ１１２の判定はＹＥＳ、Ｓ１１４の判定はＮＯとなり、Ｓ１１５にて、変数ｉｎｄｅｘ＝１となる。
【００４４】
変数ｉｎｄｅｘ＝１番目のタスクは、順序付きタスクであるタスクＢとなっており、このタスクＢ１の実行時間は０．５ミリ秒となっているので、Ｓ１１０の判定はＹＥＳ、Ｓ１１６の判定はＮＯ、Ｓ１１８の判定はＹＥＳとなり、Ｓ１２０にて、タスクＢ１が実行される。このように、残り時間に実行可能な未実行の第２タスクとしてタスクＢ１が特定され、タスクＢ１が実行される。
【００４５】
そして、タスクＢ１の実行が完了すると、Ｓ１２２にて、実行したタスクＢ１の実行時間の実測値がＲＡＭ１０ｂに記憶されるとともに、順序付きタスクの順番である１がＲＡＭ１０ｂに記憶される。
【００４６】
ここで、タスクＢ１の実行により、残り時間は０．８ミリ秒未満から０．３ミリ秒へと変化している。したがって、Ｓ１０４の判定はＹＥＳとなり、Ｓ１０６にて、変数ｉｎｄｅｘに０を代入して、Ｓ１０６以降の処理を再度実施する。
【００４７】
この場合、変数ｉｎｄｅｘ＝０番目のタスクＡは未実行で、かつ、タスクＡの実行時間は０．９ミリ秒となっており、０．８ミリ秒の残り時間では処理できないため、Ｓ１１２の判定はＹＥＳ、Ｓ１１４の判定はＮＯとなり、Ｓ１１５にて、変数ｉｎｄｅｘの値は１だけインクリメントされ、変数ｉｎｄｅｘ＝１となる。
【００４８】
また、変数ｉｎｄｅｘ＝１であるタスクＢ１は、順序付きタスクで、実行済みとなっているため、Ｓ１１０、Ｓ１１６の判定はそれぞれＹＥＳとなり、Ｓ１２０にて、タスクＢ２が実行される。このように、残り時間に実行可能な未実行の第２タスクとしてタスクＢ２が特定され、図７（ｃ）に示すように、タスクＢ２が実行される。
【００４９】
そして、タスクＢ２の実行が完了すると、Ｓ１２２にて、実行したタスクＢ１の実行時間の実測値がＲＡＭ１０ｂに記憶されるとともに、順序付きタスクの順番である２がＲＡＭ１０ｂに記憶される。
【００５０】
ここで、タスクＢ２の実行により、残り時間は０．３ミリ秒未満から０．１ミリ秒へと変化している。したがって、Ｓ１０４の判定はＹＥＳとなり、Ｓ１０６にて、変数ｉｎｄｅｘに０を代入して、Ｓ１０６以降の処理を再度実施する。ただし、図７（ｃ）に示すように、０．１ミリ秒未満で処理できるタスクは残っていないため、第２タスクを実行するＳ１２０へ進むことのないまま、Ｓ１１５にて、変数ｉｎｄｅｘは１、２と順次インクリメントされる。そして、変数ｉｎｄｅｘ＝３になると、Ｓ１０８の判定はＹＥＳとなり、第２タスクの実行を終了し（Ｓ１２４）、本処理を終了する。このように、第２周期では、第２タスクとしてタスクＢ１およびタスクＢ２が実行される。
【００５１】
マイコン１０は、上記した処理が終了すると、次の３周期目に対応する処理を実施する。まず、第１タスクの実行を開始させ（Ｓ１００）、第１タスクの実行が完了すると、次に、残り時間があるか否かを判定する（Ｓ１０４）。
【００５２】
ここでは、図７（ｄ）に示すように、残り時間が０．８ミリ秒となっているものとする。この場合、Ｓ１０４の判定はＹＥＳとなり、次に、変数ｉｎｄｅｘに０を代入する（Ｓ１０６）。ここで、変数ｉｎｄｅｘ＝０番目のタスクは、順序付きでないタスクＡとなっており、タスクＡは実行済みとなっているため、Ｓ１１０、Ｓ１１２の判定はそれぞれＮＯとなり、Ｓ１１５にて、変数ｉｎｄｅｘ＝１となる。
【００５３】
そして、変数ｉｎｄｅｘ＝１番目のタスクは、順序付きタスクであるタスクＢ１となっており、このタスクＢのうちタスクＢ３は未実行であるため、Ｓ１１０の判定はＹＥＳ、Ｓ１１６の判定はＮＯとなり、タスクＢ３の実行時間は０．７ミリ秒となっているので、Ｓ１１０の判定はＹＥＳ、Ｓ１１６の判定はＮＯ、Ｓ１１８の判定はＹＥＳとなり、Ｓ１２０にて、タスクＢ３が実行される。このように、残り時間に実行可能な未実行の第２タスクとしてタスクＢ３が特定され、図７（ｄ）に示すように、タスクＢ３が実行される。
【００５４】
そして、タスクＢ３の実行が完了すると、Ｓ１２２にて、実行したタスクＢ１の実行時間の実測値がＲＡＭ１０ｂに記憶されるとともに、順序付きタスクの順番である３がＲＡＭ１０ｂに記憶される。
【００５５】
ここで、タスクＢ３の実行により、残り時間は０．８ミリ秒未満から０．１ミリ秒へと変化している。したがって、Ｓ１０４の判定はＹＥＳとなり、Ｓ１０６にて、変数ｉｎｄｅｘに０を代入して、Ｓ１０６以降の処理を再度実施する。ただし、図７（ｄ）に示すように、０．１ミリ秒未満で処理できるタスクは残っていないため、第２タスクを実行するＳ１２０へ進むことのないまま、Ｓ１１５にて、変数ｉｎｄｅｘは１、２と順次インクリメントされる。そして、変数ｉｎｄｅｘ＝３になると、Ｓ１０８の判定はＹＥＳとなり、第２タスクの実行を終了し（Ｓ１２４）、本処理を終了する。このように、第３周期では、図７（ｄ）に示すように、第２タスクとしてタスクＢ３のみが実行される。
【００５６】
マイコン１０は、上記した処理が終了すると、次の４周期目に対応する処理を実施する。まず、第１タスクの実行を開始させ（Ｓ１００）、第１タスクの実行が完了すると、次に、残り時間があるか否かを判定する（Ｓ１０４）。
【００５７】
ここでは、図７（ｅ）に示すように、残り時間が１．０ミリ秒となっているものとする。この場合、Ｓ１０４の判定はＹＥＳとなり、次に、変数ｉｎｄｅｘに０を代入する（Ｓ１０６）。ここで、変数ｉｎｄｅｘ＝０番目のタスクは、順序付きでないタスクＡとなっており、タスクＡは順序付きタスクでなく、タスクＡは未実行で、かつ、タスクＡの実行時間は０．９ミリ秒で、１．０ミリ秒の残り時間で処理できるため、Ｓ１１０の判定はＮＯ，Ｓ１１２、Ｓ１１４の判定はそれぞれＹＥＳとなり、Ｓ１２０にて、タスクＡが実行される。このように、残り時間に実行可能な未実行の第２タスクとしてタスクＡが特定され、タスクＡが実行される。そして、タスクＡの実行が完了すると、Ｓ１２２にて、実行したタスクＡの実行時間の実測値がＲＡＭ１０ｂに記憶される。
【００５８】
ここで、タスクＡの実行により、残り時間は１．０ミリ秒未満から０．３ミリ秒へと変化している。したがって、Ｓ１０４の判定はＹＥＳとなり、Ｓ１０６にて、変数ｉｎｄｅｘに０を代入して、Ｓ１０６以降の処理を再度実施する。ただし、図７（ｃ）に示すように、０．３ミリ秒未満で処理できる未実行のタスクは残っていないため、第２タスクを実行するＳ１２０へ進むことのないまま、Ｓ１１５にて、変数ｉｎｄｅｘは１、２と順次インクリメントされる。そして、変数ｉｎｄｅｘ＝３になると、Ｓ１０８の判定はＹＥＳとなり、第２タスクの実行を終了し（Ｓ１２４）、本処理を終了する。このように、第４周期では、第２タスクとしてタスクＡのみが実行される。
【００５９】
上記した構成によれば、複数のタスクのうち、現在の周期で実行しなければならない第１タスクを実行するのに要する実行時間を特定するとともに当該実行時間に基づいて現在の周期における残り時間を特定し、残り時間に、現在の周期で必ずしも実行しなくてもよい第２タスクであって実行可能な未実行のタスクを特定し、残り時間に、実行可能な未実行の第２タスクが特定された場合、実行可能な未実行の第２タスクを残り時間に実行させるので、より効率の良いスケジューリングを実現することができる。また、処理効率が向上するので、より多くのタスクを実行することも可能となる。また、例えば、通信障害による影響や通信メッセージの集中等により、現在の周期における残り時間が短くなったとしても、残り時間に、実行可能な未実行の第２タスクが特定され、この実行可能な未実行の第２タスクが残り時間に実行されるので、第２タスクを確実に実行させることができる。
【００６０】
また、未実行の第２タスクの実行時間を計測し、当該計測した未実行の第２タスクの実行時間をＲＡＭ１０ｂに記憶させることができる。
【００６１】
また、ＲＡＭ１０ｂに実行時間が記憶されている第２タスクについては、ＲＡＭ１０ｂに記憶されている実行時間を用いて残り時間に実行可能な未実行の第２タスクを特定するので、実際に計測された実行時間に基づいてより精度良く、残り時間に実行可能な未実行の第２タスクを特定することが可能である。
【００６２】
また、第２タスクに、予め定められた順序に従って実行する順序付きタスクが含まれる場合、当該順序付きタスクの順序に従って残りの空き時間に実行可能な未実行の第２タスクを特定するので、第２タスクに順序付きタスクが含まれる場合であっても、順序付きタスクの順序に従って第２タスクを実行することが可能である。
【００６３】
また、第２タスクの各タスクの実行時間や、実行済みの順序付きタスクを示す情報については、例えば、第２タスクを全て１度実行した次の周期（再度開始する周期）の第１タスクの処理終了後に初期化することで、上記した処理を繰り返し実施することができる。
【００６４】
なお、本発明は上記実施形態に限定されるものではなく、本発明の趣旨に基づいて種々なる形態で実施することができる。
【００６５】
例えば、上記実施形態では、本演算装置について、車両の空調制御を行うエアコンＥＣＵ１に搭載されたマイコン１０を例に説明したが、エアコンＥＣＵ１に搭載されるようなマイコン１０に限定されるものではない。
【００６６】
上記実施形態では、現在の周期で実行しなければならない第１タスクを実行した後、残り時間に、実行可能な未実行の第２タスクが特定された場合、当該実行可能な未実行の第２タスクを残り時間に実行させるようにしたが、例えば、第２タスクを実行した後の残り時間に、第１、第２のタスクとは異なるタスクであって、この残り時間に実行可能なタスクを実行することもできる。
【００６７】
なお、上記実施形態における構成と特許請求の範囲の構成との対応関係について説明すると、Ｓ１０４が残り時間特定手段に相当し、Ｓ１０６、Ｓ１１０、Ｓ１１２、Ｓ１１４、Ｓ１１５、Ｓ１１６、Ｓ１１８がタスク特定手段に相当し、Ｓ１２０がタスク実行手段に相当し、Ｓ１２２が実行時間記憶手段に相当する。
【符号の説明】
【００６８】
１      エアコンＥＣＵ
２      ブロワモータ
３      コンプレッサ
４      メータＥＣＵ
５      ボデーＥＣＵ
６      エンジンＥＣＵ
７      エアコンパネル
８      センサ
１０    マイコン
１０ａ  ＣＰＵ
１０ｂ  ＲＡＭ
１０ｃ  ＲＯＭ
【図１】
2014182606.tif 000003
【図２】
2014182606.tif 000004
【図３】
2014182606.tif 000005
【図４】
2014182606.tif 000006
【図５】
2014182606.tif 000007
【図６】
2014182606.tif 000008
【図７】
2014182606.tif 000009