(57)【特許請求の範囲】
【請求項１】
タスクの起床要求、及び、タスクに設定された実行優先度を示すタスクレベルに基づいて、タスクの切り換えを行うことが可能な構成にされたリアルタイムオペレーティングシステムにより運営され、ＣＰＵが、各タスクを切り替えて実行すると共に、割込要求が発生した場合には、実行中のタスクに割り込んで、割込要求に対応する割込処理を、各割込処理に設定された実行優先度を示す割込レベルに応じた順序で、実行する電子制御装置であって、
実行禁止対象の割込処理を定めるマスクレベルを指定して、割込レベルがマスクレベル以下の割込処理の実行、及び、タスクの切り換えを禁止する割込禁止区間、を設定するタスクを有し、
ＣＰＵは、前記タスクにより設定される割込禁止区間の終了時に、タスクスケジューリング処理を実行するが、終了した割込禁止区間がタスクの起床要求を行う割込処理に設定された割込レベルの中で最も高い割込レベル以上のマスクレベルが設定された割込禁止区間である場合に限っては、タスクスケジューリング処理を実行しないこと
を特徴とする電子制御装置。
【請求項２】
タスクの起床要求、及び、タスクに設定された実行優先度を示すタスクレベルに基づいて、タスクの切り換えを行うことが可能な構成にされたリアルタイムオペレーティングシステムにより運営され、ＣＰＵが、各タスクを切り替えて実行すると共に、割込要求が発生した場合には、実行中のタスクに割り込んで、割込要求に対応する割込処理を、各割込処理に設定された実行優先度を示す割込レベルに応じた順序で、実行する電子制御装置であって、
実行禁止対象の割込処理を定めるマスクレベルを指定して、割込レベルがマスクレベル以下の割込処理の実行、及び、タスクの切り換えを禁止する割込禁止区間、を設定するタスクを有し、
前記割込禁止区間を設定するタスクの内、設定する割込禁止区間のマスクレベルが、タスクの起床要求を行う割込処理に設定された割込レベルの中で最も高い割込レベル未満のマスクレベルであるタスクは、この割込禁止区間の終了時に、ＣＰＵにタスクスケジューリング処理を実行させる構成にされ、
前記割込禁止区間を設定するタスクの内、設定する割込禁止区間のマスクレベルが、タスクの起床要求を行う割込処理に設定された割込レベルの中で最も高い割込レベル以上のマスクレベルであるタスクは、この割込禁止区間の終了時に、ＣＰＵにタスクスケジューリング処理を実行させない構成にされていること
を特徴とする電子制御装置。
【請求項３】
タスクの起床要求、及び、タスクに設定された実行優先度を示すタスクレベルに基づいて、タスクの切り換えを行うことが可能な構成にされたリアルタイムオペレーティングシステムにより運営され、各タスクを切り替えて実行すると共に、割込要求が発生した場合には、実行中のタスクに割り込んで、割込要求に対応する割込処理を、各割込処理に設定された実行優先度を示す割込レベルに応じた順序で、実行するコンピュータに、
実行禁止対象の割込処理を定めるマスクレベルを指定して、割込レベルがマスクレベル以下の割込処理の実行、及び、タスクの切り換えを禁止する割込禁止区間、を設定する機能と、
マスクレベルが、タスクの起床要求を行う割込処理に設定された割込レベルの中で最も高い割込レベル以上に設定された割込禁止区間の終了時には、タスクスケジューリング処理を実行せず、マスクレベルが、タスクの起床要求を行う割込処理に設定された割込レベルの中で最も高い割込レベル未満に設定された割込禁止区間の終了時には、タスクスケジューリング処理を実行する機能と
を実現させるためのプログラム。
【請求項４】
タスクの起床要求、及び、タスクに設定された実行優先度を示すタスクレベルに基づいて、タスクの切り換えを行うことが可能な構成にされたリアルタイムオペレーティングシステムにより運営され、各タスクを切り替えて実行すると共に、割込要求が発生した場合には、実行中のタスクに割り込んで、割込要求に対応する割込処理を、各割込処理に設定された実行優先度を示す割込レベルに応じた順序で、実行するコンピュータに、
実行禁止対象の割込処理を定めるマスクレベルを指定して、割込レベルがマスクレベル以下の割込処理の実行、及び、タスクの切り換えを禁止する割込禁止区間、を設定するタスクであって、前記マスクレベルとして、タスクの起床要求を行う割込処理に設定された割込レベルの中で最も高い割込レベル未満のマスクレベルを指定し、この割込禁止区間の終了時に、タスクスケジューリング処理をコンピュータに実行させる構成のタスクと、
実行禁止対象の割込処理を定めるマスクレベルを指定して、割込レベルがマスクレベル以下の割込処理の実行、及び、タスクの切り換えを禁止する割込禁止区間、を設定するタスクであって、前記マスクレベルとして、タスクの起床要求を行う割込処理に設定された割込レベルの中で最も高い割込レベル以上のマスクレベルを指定し、この割込禁止区間の終了時に、タスクスケジューリング処理をコンピュータに実行させない構成のタスクと
を実行させるためのプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、リアルタイムオペレーティングシステム（以下「ＲＴＯＳ」という。）を用いたタスク切り換え技術に関する。
【０００２】
【従来の技術】
例えば車両に搭載される電子制御装置（以下「ＥＣＵ」という。）に用いられる制御プログラムでは、制御応答性や安全性の確保等から所定の処理をリアルタイムに実行する必要性がある。そのため、実行優先度の設定されたタスクの単位で制御プログラムを記述し、ＲＴＯＳによるタスクの切り換えによって、また、タスクよりも実行優先度の高い割込処理を優先的に実行して、リアルタイム性を確保している。
【０００３】
最初に、上述した割込処理とタスクとの関係を説明する。
図２には、ＥＣＵに搭載される制御プログラムの構成を概念的に示した。割込処理５１は、例えばセンサ信号やＥＣＵに搭載されたマイコンのタイマなどに基づく割込要求に従って実行される。一方、タスク５３は、ＲＴＯＳ５２へのタスク起床要求に基づいて実行される。このタスク起床要求は、主として割込処理５１の中で、あるいは、タスク５３からなされる。
【０００４】
図２に例示した制御プログラムは、Ａ〜Ｄの４つの割込処理５１と、ａ〜ｃの３つのタスク５３を有している。
この場合を例として、次に実行優先度について説明する。
図３（ａ）は、Ａ〜Ｄの割込処理５１の実行優先度である割込レベルと、ａ〜ｃのタスク５３の実行優先度であるタスクレベルとの関係を示したものである。各レベルは、数値の大きいものほど、実行優先度が高いことを示す。
【０００５】
したがって、Ａ〜Ｄの割込処理５１について言えば、割込レベル「４」であるＡ割込処理５１の実行優先度が最も高く、逆に、割込レベル「１」であるＤ割込処理５１の実行優先度が最も低い。
そして、ａ〜ｃのタスク５３について言えば、Ａ〜Ｄの割込処理５１との関係では、割込レベルは「０」と考えられる。そのため、各割込処理５１は、タスク５３に優先して実行される。優先して実行されるとは、例えばｃタスク５３の実行途中でＢ割込処理５１の要求があれば、ｃタスク５３の実行を中断してＢ割込処理５１が実行され、Ｂ割込処理５１の終了後に、中断していたｃタスク５３が再び実行されることをいう。
【０００６】
また、ａ〜ｃのタスク５３間でも実行優先度が設定されている。これが、タスクレベルである。したがって、Ａ〜Ｄの割込処理５１との関係では最も優先度の低いａ〜ｃのタスク５３の間にも、図３（ａ）に示すように、タスクレベル「３」のａタスク５３の実行優先度が最も高く、タスクレベル「１」のｃタスク５３の実行優先度が最も低い、といった優先関係がある。
【０００７】
次に、ＲＴＯＳ５２によるタスクの切り換えについて説明する。ＲＴＯＳ５２に対するタスク起床要求が割込処理５１やタスク５３によってなされることは、既に述べた。
例えば、ｃタスク５３の実行時にＢ割込処理５１の割込要求がなされた場合、ｃタスク５３の途中でＢ割込処理５１が実行されることになり、ｃタスク５３→Ｂ割込処理５１→ｃタスク５３というように、通常は、Ｂ割込処理５１の終了後、中断していたｃタスク５３が実行される。
【０００８】
ところが、Ｂ割込処理５１の中で、例えばｂタスク５３の起床要求がなされることが考えられる。この場合、Ｂ割込処理５１の終了後、ｃタスク５３に優先してｂタスク５３を実行する必要がある。なぜなら、ｂタスク５３のタスクレベルが「２」であるのに対して、ｃタスクのタスクレベルは「１」だからである（図３（ａ）参照）。
【０００９】
そのため、割込処理の終了時には、ＲＴＯＳがタスクスケジューリング処理を実行する。
具体的には、図３（ｂ）に示すように、Ｂ割込処理５１の中でｂタスク５３の起床要求がなされると、ｂタスク５３を示す情報が、ＲＴＯＳ５２に用意されたキューに格納される。ＲＴＯＳ５２には、タスクレベル毎にキューが用意されており、該当するタスクレベル２のキューに、ｂタスク５３を示す情報が格納される。
【００１０】
したがって、タスクスケジューリング処理では、優先度の高いタスクレベル３のキューから順に、タスクレベル２のキュー、タスクレベル１のキューをサーチする。そして、実行途中のタスク５３よりも優先度の高いタスク５３の起床要求があれば、当該優先度の高いタスク５３への切り換えを行う。つまり、上述した例では、Ｂ割込処理５１の終了後に、タスクスケジューリング処理が実行されると、ｃタスク５３に優先してｂタスク５３が実行され、ｂタスク５３の終了後に、中断されていたｃタスク５３が実行されるのである。
【００１１】
このようなタスクスケジューリング処理は、上述したような割込処理の終了時だけでなく、タスクの終了時にも実行される。
また、タスク内に割込禁止区間が設定される場合があるが、この割込禁止区間の終了時にも実行される。そして本発明は、この割込禁止区間の終了時におけるタスクスケジューリング処理に関するものである。
【００１２】
そこで次に、割込禁止区間について説明する。
タスクの実行途中に実行優先度の高い割込処理が割り込むことは、既に述べた。しかし、タスクと割込処理でリソースを共有している場合など、割り込みのタイミングによっては、リソースの干渉が生じることがある。
【００１３】
この干渉を防止するために行われるのが、いわゆる割込禁止である。割込禁止は、マスクレベルを指定することによって行われる。具体的には、図３（ａ）に示すような割込レベルをマスクレベルとして指定する。例えば、マスクレベル「２」が指定されると、割込レベル「２」以下の割込処理やタスクは、たとえ実行中のタスクよりも実行優先度が高いものであっても実行されない。したがって、マスクレベル「２」が指定されると、図２中のＡ又はＢの割込処理５１だけが割り込むことになる。
【００１４】
これに対し、この割込禁止を解除するのが割込許可である。割込許可は、マスクレベルを「０」に戻すことに相当する。そして、マスクレベルが「０」になると、割込処理はもちろん、タスクの実行が可能になる。したがって、この時点で、タスクの起床要求をチェックする必要が生じるのである。例えば、マスクレベルが「２」であった場合には、ＡやＢの割込処理５１によってタスクの起床要求がなされている可能性があるからである。そこで、マスクレベルが「０」になった場合、すなわち割込禁止区間の終了時にも、上述したタスクスケジューリング処理を実行する。
【００１５】
【発明が解決しようとする課題】
しかしながら、上述した割込禁止区間の終了時には、タスクスケジューリング処理が無駄になる場合が存在する。
例えば、上述した図３（ａ）のように割込レベルが設定されているとき、マスクレベル「４」が指定された割込禁止区間においては、Ａ〜Ｄのいずれの割込処理５１も割り込めないため、タスクの起床要求がなされる可能性は「０」であり、割込禁止区間の終了時のタスクの切り換えはなされない。
【００１６】
ところが、従来は、割込禁止区間の終了時に一律にタスクスケジューリング処理を行っていたため、無駄なタスクスケジューリング処理が発生していた。これは、制御プログラムの実行速度の低下を招来し、リアルタイム性の確保という観点から望ましくない。
【００１７】
本発明は、上述した問題を解決するためになされたものであり、割込禁止区間の終了時における無駄なタスクスケジューリング処理を省き、実行速度の向上を図ることを目的とし、リアルタイム性の確保に寄与する。
【００１８】
【課題を解決するための手段及び発明の効果】
本発明のＥＣＵでは、タスクの起床要求、及び、タスクに設定された実行優先度を示すタスクレベルに基づいて、タスクの切り換えを行うことが可能な構成にされたＲＴＯＳにより運営され、ＣＰＵが、各タスクを切り替えて実行すると共に、割込要求が発生した場合には、実行中のタスクに割り込んで、割込要求に対応する割込処理を、各割込処理に設定された実行優先度を示す割込レベルに応じた順序で、実行する。
【００１９】
このＥＣＵは、実行禁止対象の割込処理を定めるマスクレベルを指定して、割込禁止区間、を設定するタスクを有し、このタスクをＣＰＵにて実行する。尚、この割込禁止区間は、割込レベルがマスクレベル以下の割込処理の実行、及び、タスクの切り換えを禁止する区間である。
【００２０】
このような前提の下、本発明では特に、ＣＰＵが、タスクにより設定される割込禁止区間の終了時に、タスクスケジューリング処理を実行するが、終了した割込禁止区間がタスクの起床要求を行う割込処理に設定された割込レベルの中で最も高い割込レベル以上のマスクレベルが設定された割込禁止区間である場合に限っては、タスクスケジューリング処理を実行しないように動作する。
【００２１】
つまり、本発明では、従来一律に実行されていたタスクスケジューリング処理のコールを限定的にし、割込禁止区間の終了時にタスクの切り換えがなされる可能性が無い場合には、無駄なタスクスケジューリング処理を省くようにしたのである。
【００２２】
割込禁止区間の終了時にタスクの切り換えがなされる可能性が無い場合は、割込禁止区間にて、タスクの起床要求を行う割込処理に設定された割込レベルの中で最も高い割込レベル以上の割込レベルを、マスクレベルとして指定する場合である。
【００２３】
従って、このＥＣＵによれば、割込禁止区間の終了時における無駄なタスクスケジューリング処理が省かれ、実行速度の向上を図ることができる。その結果、リアルタイム性の確保に寄与する。
【００２４】
尚、上記の発明は、割込禁止区間を設定するタスクを、具体的に次のように構成することで実現することができる。
即ち、割込禁止区間を設定するタスクの内、設定する割込禁止区間のマスクレベルが、タスクの起床要求を行う割込処理に設定された割込レベルの中で最も高い割込レベル未満のマスクレベルであるタスクを、この割込禁止区間の終了時に、ＣＰＵにタスクスケジューリング処理を実行させる構成にすると共に、割込禁止区間を設定するタスクの内、設定する割込禁止区間のマスクレベルが、タスクの起床要求を行う割込処理に設定された割込レベルの中で最も高い割込レベル以上のマスクレベルであるタスクを、この割込禁止区間の終了時に、ＣＰＵにタスクスケジューリング処理を実行させない構成にすることで実現することができる。
【００２５】
これによって、割込禁止区間の終了時における無駄なタスクスケジューリング処理が省かれ、実行速度の向上を図ることができる。
【００２６】
【発明の実施の形態】
以下、本発明を具体化した一実施例を図面を参照して説明する。
図１は、本発明の「電子制御装置」を具体化したエンジン制御装置（以下「エンジンＥＣＵ」という。）１の構成を表すブロック図である。エンジンＥＣＵ１は、車両に搭載された内燃機関型エンジンの制御を行う。
【００２７】
エンジンＥＣＵ１は、エンジンのクランク軸が所定角度回転する毎にパルス状の信号を出力する回転角センサ、エンジンの特定の気筒のピストンが所定位置（例えば上死点：ＴＤＣ）にくる度にパルス状の信号を出力する基準位置センサ、エンジンの冷却水の温度を検出する水温センサ、及び酸素濃度を計測する酸素濃度センサ等、エンジンの運転状態を検出する様々なセンサ３０からの信号を入力して波形整形やＡ／Ｄ変換を行う入力回路２１と、入力回路２１からのセンサ信号に基づき、エンジンを制御するための様々な処理を実行するマイコン１０と、マイコン１０からの制御データに応じて、エンジンに取付けられたインジェクタ（燃料噴射装置）及びイグナイタ（点火装置）等のアクチュエータ４０を駆動する出力回路２２とを、備えている。
【００２８】
そして、マイコン１０には、プログラムを実行する周知のＣＰＵ１１と、ＣＰＵ１１によって実行されるプログラムを記憶するＲＯＭ１２と、ＣＰＵ１１による演算結果等を記憶するためのＲＡＭ１３と、入力回路２１及び出力回路２２との間で信号をやり取りするためのＩ／Ｏ１４と、各種レジスタやフリーランカウンタ等（図示省略）とが備えられている。
【００２９】
このように構成されたエンジンＥＣＵ１は、各種センサ３０から入力回路２１を介して入力される信号に基づき、出力回路２２に接続されたアクチュエータ４０を駆動する、エンジン制御処理を行う。
次に図２に基づき、ＲＯＭ１２に記憶される「制御プログラム」としてのエンジン制御プログラムの構成を説明する。エンジン制御プログラムは、少なくとも、割込処理５１、ＲＴＯＳ５２、及び、タスク５３で構成されている。
【００３０】
Ａ〜Ｄの割込処理５１は、割込要求に基づいて実行される。Ａ〜Ｄの割込処理５１の実行優先度は、Ａ→Ｂ→Ｃ→Ｄの順になっている。これら割込処理５１の実行優先度を「割込レベル」と以下記述する。割込処理５１に対する割込要求は、上述したセンサ群３０からの信号に基づいてなされることが考えられる。また、マイコン１０内部のフリーランカウンタによって所定時間間隔でなされることが考えられる。さらに、車内ＬＡＮ等のネットワーク情報によってなされることが考えられる。
【００３１】
ａ〜ｃのタスク５３は、タスク起床要求に基づいて実行される。ａ〜ｃのタスク５３の実行優先度は、ａ→ｂ→ｃの順になっている。これらタスク５３の実行優先度を「タスクレベル」と以下記述する。タスク５３に対するタスク起床要求は、上述した割込処理５１やタスク５３によってなされる。
【００３２】
タスク５３の起床要求があると、ＲＴＯＳ５２に用意されたキューへ、起床要求のあったタスク５３の情報が格納される。このキューは、タスク５３のタスクレベル毎に用意されている。したがって、ＲＴＯＳ５２は、このキューをタスクレベル順にサーチするタスクスケジューリング処理を行うことにより、タスクレベルに基づくタスク５３の切り換えを行い、タスクレベルのより高いタスク５３を優先的に実行する。
【００３３】
次に、割込処理５１に設定された割込レベルと、タスク５３に設定されたタスクレベルとの関係を説明する。図３（ａ）は、Ａ〜Ｄの割込処理５１の割込レベルと、ａ〜ｃのタスク５３のタスクレベルとの関係を示したものである。各レベルは、数値の大きいものほど、実行優先度が高いことを示す。
【００３４】
図３（ａ）から分かるように、Ａ〜Ｄの割込処理５１について言えば、割込レベル「４」であるＡ割込処理の優先度が最も高く、逆に、割込レベル「１」であるＤ割込処理の優先度が最も低い。
ａ〜ｃのタスク５３には、図３（ａ）に示すように、タスクレベル「３」のａタスク５３の実行優先度が最も高く、タスクレベル「１」のｃタスク５３の実行優先度が最も低い、といった優先関係がある。そして、Ａ〜Ｄの割込処理５１との関係では、割込レベルは「０」と考えられる。そのため、各割込処理５１は、タスク５３に優先して実行される。
【００３５】
ただし、タスク５３よりも実行優先度の高い割込処理５１が常に割り込むと、共有しているリソースに干渉が生じる可能性がある。そこで、タスク５３の中で割込禁止処理を行い、共有リソースを操作するような割込処理５１の実行を禁止することがなされる。
【００３６】
この割込禁止処理では、上述した割込レベルを「マスクレベル」として指定する。これによって、マスクレベル以下の割込レベルを有する割込処理５１の割り込みが禁止される。
したがって、割込禁止といっても、一律に全ての割込処理５１を禁止するものではない。そのため、割込禁止処理がなされてから割込許可がなされるまでの区間（以下「割込禁止区間」という。）で、指定されたマスクレベルよりも高い割込レベルの割込処理５１は、実行される可能性がある。
【００３７】
そしてこの割込処理５１が、タスク５３の起床要求を行う可能性があるため、従来より、割込禁止区間の終了時には、上述したタスクスケジューリング処理を実行するようにしている。
そこで次に、このような割込禁止区間の終了時におけるタスクスケジューリング処理について、具体的に例を挙げて説明する。
【００３８】
図４（ａ）は、ｃタスク５３の処理を例示するフローチャートである。
ｃタスク５３の処理は、Ｓ１１０の処理▲１▼とＳ１３０の処理▲２▼が実質的なものとなっている。そして、処理▲１▼では、いくつかの割込処理５１とのリソースの干渉が問題となるため、処理▲１▼の前後で、割込禁止処理（Ｓ１００）及びマスク復帰処理（Ｓ１２０）を実行するようになっている。割込禁止処理の詳細を図５のフローチャートに、マスク復帰処理の詳細を図６（ａ）のフローチャートに示した。
【００３９】
割込禁止処理は、図５に示すように、まず最初にマスクレベルの退避を行う（Ｓ１０１）。割込許可時のマスクレベルは「０」である。したがって、特に割込が禁止されていない場合には、ここでマスクレベル「０」が退避されることになる。マスクレベルを退避するのは、マスクレベル「１」といった割込禁止区間において、例えばマスクレベル「２」といった、よりマスクレベルの高い区間が設定されることがあるからである。
【００４０】
そのため次に、現在のマスクレベルより高いマスクレベルが指定されたか否かを判断する（Ｓ１０２）。マスクレベル「１」といった割込禁止区間において、マスクレベル「２」が指定されたような場合、ここで肯定判断される。より高いマスクレベルが指定された場合（Ｓ１０２：ＹＥＳ）、指定のマスクレベルへ変更し（Ｓ１０３）、その後、本割込禁止処理を終了する。一方、指定されたマスクレベルが現在のものよりも小さい場合には（Ｓ１０２：ＮＯ）、Ｓ１０３の処理を実行せず、本割込禁止処理を終了する。
【００４１】
一方、マスク復帰処理では、図６（ａ）に示すように、もとのマスクレベルへの変更を行い（Ｓ１２１）、マスクレベルが「０」か否かを判断し（Ｓ１２２）、マスクレベルが「０」であれば（Ｓ１２２：ＹＥＳ）、タスクスケジューリング処理を行う（Ｓ１２３）。
【００４２】
ここで「もとのマスクレベル」とは、直前の割込禁止処理（図５参照）のＳ１０１にて退避されたマスクレベルである。上述したように、ある割込禁止区間の中にさらに高いマスクレベルの区間が設定されることがある。したがって、Ｓ１２１の処理に続き、マスクレベルが「０」となったか否かを判断し（Ｓ１２２）、マスクレベルが「０」となった場合に（Ｓ１２２：ＹＥＳ）、タスクスケジューリング処理を行う（Ｓ１２３）。マスクレベルが「０」となるまでは、タスク５３の実行が禁止されており、タスクスケジューリング処理を実行する必要がないためである。
【００４３】
図４（ｂ）は、Ｂ割込処理を例示するフローチャートである。Ｂ割込処理では、Ｓ２００における処理▲３▼に続いて、Ｓ２１０にて、タスクｂの起床要求がなされる。
ところで、Ｂ割込処理の割込レベルは、図３（ａ）に示したように「３」である。したがって、ｃタスク処理中の割込禁止処理におけるマスクレベルが「３」以上であれば、ｃタスクの割込禁止区間で、Ｂ割込処理５１が割り込む可能性はない。一方、マスクレベルが「２」以下であれば、ｃタスクの割込禁止区間で、Ｂ割込処理が割り込む可能性がある。
【００４４】
これを図７のタイミングチャートに基づいて詳細に説明する。
図７（ａ）では、ｃタスク５３の処理が開始され、時刻ｔ１で割込禁止処理（図４（ａ）中のＳ１００）が実行されて、マスクレベルが「２」となっている。この場合、時刻ｔ２にて、Ｂ割込処理５１の割込要求が発生すると、Ｂ割込処理５１がｃタスク５３に割り込むことになる。Ｂ割込処理５１の割込レベルは「３」であり、マスクレベル「２」よりも高いからである。
【００４５】
そして、時刻ｔ３で、Ｂ割込処理にてｂタスク５３の起床要求がなされる（図４（ｂ）中のＳ２１０）。このタスク起床要求は、図３（ｂ）に示すＲＴＯＳ５２のキューに格納される。ｂタスク５３はタスクレベルが「２」であるため、タスクレベル２のキューに、ｂタスク５３を示す情報が格納される。
【００４６】
そして、時刻ｔ４でＢ割込処理５１が終了し、中断していたｃタスク５３が再び実行される。
次に、時刻ｔ５で、マスク復帰処理が実行され（図４（ａ）中のＳ１２０）、マスクレベルが「０」となる。したがって、タスクスケジューリング処理（図６（ａ）中のＳ１２３）が実行される。このとき、ＲＴＯＳ５２のキューにｂタスク５３を示す情報が格納されているため、ＲＴＯＳ５２は、ｃタスク５３からｂタスク５３への切り換えを行い、ｃタスク５３に優先してｂタスクが実行されることになる。そして、時刻ｔ６で、ｂタスク５３が終了すると、中断していたｃタスク５３が再び実行されることになる。
【００４７】
一方、図７（ｂ）では、ｃタスク５３の処理が開始され、時刻ｕ１で割込禁止処理（Ｓ１００）が実行されて、マスクレベルが「４」となっている。
そのため、時刻ｕ２にて、Ｂ割込処理５１の割込要求が発生しても、Ｂ割込処理５１がｃタスク５３に割り込むことはない。Ｂ割込処理５１の割込レベルは「３」であり、マスクレベル「４」よりも低いからである。
【００４８】
そのため、時刻ｕ３で、マスク復帰処理が実行され（図４（ａ）中のＳ１２０）、マスクレベルが「０」になってはじめて、Ｂ割込処理５１が実行される。
そして、時刻ｕ４で、Ｂ割込処理にてｂタスク５３の起床要求がなされる（図４（ｂ）中のＳ２１０）。このタスク起床要求に基づく情報が、図３（ｂ）に示すＲＴＯＳ５２のキューに格納されることは既に述べた通りである。
【００４９】
時刻ｕ５でＢ割込処理５１が終了するとｂタスク５３が実行され、さらに、時刻ｕ６でｂタスク５３が終了すると、中断していたｃタスク５３が再び実行される。このようなタスク５３の切り換えは、割込処理５１の終了時及びタスク５３の終了時におけるタスクスケジューリング処理によって実現される。
【００５０】
ところで、図７（ｂ）では、時刻ｕ１からｕ３で示されるマスクレベル「４」の割込禁止区間において、Ｂ割込処理５１が実行されることはない。したがって、割込禁止区間において、ｂタスク５３の起床要求がなされる可能性はない。
しかしながら、従来は、図６（ａ）に示すような、マスク復帰処理を一律に実行していたため、図７（ｂ）中の時刻ｕ３にて、必ずタスクスケジューリング処理が実行されていた。つまり、タスク起床要求がなされる可能性がない場合であっても、割込禁止区間の終了時には、タスクスケジューリング処理が実行されており、タスクスケジューリング処理に要する時間が無駄になっていたのである。
【００５１】
そこで、本実施例では、図４（ａ）中のＳ１２０のマスク復帰処理を２種類用意するようにした。一つが既に説明した図６（ａ）に示すものであり、もう一つが、図６（ｂ）に示すものである。図６（ｂ）に示すマスク復帰処理は、もとのマスクレベルへの変更（Ｓ１２４）のみを行うものである。
【００５２】
そして、プログラミング担当者は、上述した割込禁止区間の終了時に、タスク５３の切り換えがなされる可能性の有無を判断し、その可能性が無い場合には、図６（ｂ）に示すマスク復帰処理が実行されるように、タスク５３をコーディングする。具体的に言えば、図７（ａ）で示すようにマスクレベル「２」で割り込みを禁止する場合には、図４（ａ）中のＳ１２０にて、図６（ａ）で示すマスク復帰処理が実行されるようにコーディングする。一方、図７（ｂ）で示すようにマスクレベル「４」で割り込みを禁止する場合には、図４（ａ）中のＳ１２０にて、図６（ｂ）で示すマスク復帰処理が実行されるようにコーディングする。
【００５３】
タスク５３の切り換えがなされる可能性が無い場合をまとめると、次の（１）又は（２）の２通りの場合が考えられる。
（１）タスク５３の起床要求を行う割込処理５１に設定された割込レベルの中で、最も高い割込レベル以上の割込レベルを、マスクレベルとする場合
上述の例では、Ｂ割込処理５１にて、ｂタスク５３の起床要求がなされるものとしていた（図４中のＳ２１０）。このとき、Ａ割込処理５１では、タスク起床要求がなされないとすると、割込レベル「３」以上、すなわち、マスクレベル「３」又は「４」が指定された割込禁止区間では、タスク起床要求がなされることはない。
【００５４】
（２）最も高いタスクレベルの設定されたタスク５３に、割込禁止区間が設定される場合
上述の例では、ｃタスク５３の割込禁止区間を問題にしていたが、ａタスク５３の割込禁止区間の終了時には、タスクスケジューリング処理は不要となる。なぜなら、たとえタスク５３の起床要求があっても、ａタスク５３のタスクレベルが「３」であり、タスク５３の中でタスクレベルが最高であるため、タスク５３の切り換えがなされる可能性がないからである。
【００５５】
したがって、プログラミング担当者は、上記（１）及び（２）の場合には、図６（ｂ）に示すマスク復帰処理が実行されるように、タスク５３を作成し、エンジン制御プログラムをコーディングする。
以上のようなエンジン制御プログラムが搭載された実施例のエンジンＥＣＵ１によれば、割込禁止区間の終了時における無駄なタスクスケジューリング処理が省かれ、実行速度の向上を図ることができる。その結果、リアルタイム性の確保に寄与する。
【００５６】
以上、本発明はこのような実施例に何等限定されるものではなく、本発明の主旨を逸脱しない範囲において種々なる形態で実施し得る。
上記実施例のエンジン制御プログラムでは、Ａ〜Ｄの割込処理５１の実行には、ＲＴＯＳ５２が介在しない構成となっていたが、図８に示すように、Ａ〜Ｄの割込処理の実行にＲＴＯＳが介在するようなプログラム構成を採用してもよい。
【図面の簡単な説明】
【図１】実施例のエンジンＥＣＵの概略構成を示すブロック図である。
【図２】エンジン制御プログラムの構成を示す説明図である。
【図３】（ａ）は割込レベルとタスクレベルとの関係を示す説明図であり、（ｂ）はタスクスケジューリング処理を示すための説明図である。
【図４】（ａ）はｃタスク処理を例示するフローチャートであり、（ｂ）はＢ割込処理を例示するフローチャートである。
【図５】割込禁止処理を示すフローチャートである。
【図６】マスク復帰処理を示すフローチャートである。
【図７】マスクレベルによる割り込みやタスク切り換えを示すタイミングチャートである。
【図８】エンジン制御プログラムの別構成を示す説明図である。
【符号の説明】
１…エンジン              １０…マイコン
１１…ＣＰＵ                １２…ＲＯＭ
１３…ＲＡＭ                １４…Ｉ／Ｏ
２１…入力回路              ２２…出力回路
３０…センサ                ４０…アクチュエータ
５１…割込処理              ５２…ＲＴＯＳ
５３…タスク
【図１】
0003879514.tif 000002
【図２】
0003879514.tif 000003
【図３】
0003879514.tif 000004
【図４】
0003879514.tif 000005
【図５】
0003879514.tif 000006
【図６】
0003879514.tif 000007
【図７】
0003879514.tif 000008
【図８】
0003879514.tif 000009