(57)【特許請求の範囲】
【請求項１】
実行単位となる複数の処理プログラムを当該処理プログラム毎に設定される優先度に基づき処理装置にて実行することによって、一連の機能を実現する情報処理装置において、
前記処理装置は、前記各処理プログラムを実行する際、前記優先度の相対的に低い下位プログラムと前記優先度の相対的に高い上位プログラムとの間で共通に使用されるグローバル変数の操作に先立って、前記上位プログラムの割り込みによって前記グローバル変数が操作される可能性を判断する判断処理を実行し、当該判断処理にて前記グローバル変数が操作される可能性があると判断された場合にだけ、割り込みを禁止する禁止処理を実行するものであり、
さらに、前記処理装置による判断処理では、実行中の処理プログラムに前記グローバル変数が前記下位プログラムによる操作途中で前記上位プログラムの割り込みによって操作される可能性を考慮して設定された優先度が他の処理プログラムの優先度を下回っている場合に、前記上位プログラムによって前記グローバル変数が操作される可能性があると判断することを特徴とする情報処理装置。
【請求項２】
実行単位となる複数の処理プログラムを当該処理プログラム毎に設定される優先度に基づき処理装置にて実行することによって、一連の機能を実現する情報処理装置において、
前記処理装置は、前記各処理プログラムを実行する際、前記優先度の相対的に低い下位プログラムと前記優先度の相対的に高い上位プログラムとの間で共通に使用されるグローバル変数の操作に先立って、前記上位プログラムの割り込みによって前記グローバル変数が操作される可能性を判断する判断処理を実行し、当該判断処理にて前記グローバル変数が操作される可能性があると判断された場合にだけ、割り込みを禁止する禁止処理を実行するものであり、
さらに、前記処理装置による判断処理では、実行中の処理プログラムに前記グローバル変数が前記下位プログラムによる操作途中で前記上位プログラムの割り込みによって操作される可能性を考慮して設定された優先度が前記グローバル変数を操作する他の処理プログラムの優先度を下回っている場合に、前記上位プログラムによって前記グローバル変数が操作される可能性があると判断することを特徴とする情報処理装置。
【請求項３】
請求項２に記載の情報処理装置において、
前記グローバル変数を操作する処理プログラムに設定された優先度の中で最も高い優先度を記憶するための優先度記憶手段を備え、
前記処理装置による判断処理は、前記優先度記憶手段に記憶された優先度と、実行中の処理プログラムに設定された優先度とを比較することによって判断するものであることを特徴とする情報処理装置。
【請求項４】
実行単位となる複数の処理プログラムを当該処理プログラム毎に設定される優先度に基づき処理装置にて実行することによって、一連の機能を実現する情報処理装置において、
前記処理装置は、前記各処理プログラムを実行する際、前記優先度の相対的に低い下位プログラムと前記優先度の相対的に高い上位プログラムとの間で共通に使用されるグローバル変数の操作に先立って、前記上位プログラムの割り込みによって前記グローバル変数が操作される可能性を判断する判断処理を実行し、当該判断処理にて前記グローバル変数が操作される可能性があると判断された場合にだけ、割り込みを禁止する禁止処理を実行するものであり、
さらに、前記処理装置による判断処理では、実行中の処理プログラムに前記グローバル変数が前記下位プログラムによる操作途中で前記上位プログラムの割り込みによって操作される可能性を考慮して設定された優先度が当該実行中の処理プログラムの操作対象となるグローバル変数を操作する他の処理プログラムの優先度を下回っている場合に、前記上位プログラムによって前記グローバル変数が操作される可能性があると判断することを特徴とする情報処理装置。
【請求項５】
請求項４に記載の情報処理装置において、
前記グローバル変数毎に、当該グローバル変数を操作する処理プログラムの優先度の中で最も高い優先度を記憶するための優先度記憶手段を備え、
前記判断処理は、前記操作対象となるグローバル変数に対応する前記優先度記憶手段に記憶された優先度と、実行中の処理プログラムに設定された優先度とを比較することによって判断するものであることを特徴とする情報処理装置。
【請求項６】
請求項１〜５のいずれかに記載の情報処理装置において、
前記各処理プログラムでは、前記グローバル変数の操作が完了すると、前記禁止処理によって割込禁止状態となっているか否かを判断する許可判断処理を実行し、さらに、当該許可判断処理にて割込禁止状態であると判断された場合にだけ、割り込みを許可する許可処理を実行するようにしたことを特徴とする情報処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、割込処理が実行される複数の処理プログラム間で割り込みの禁止／許可を実行する技術に関する。
【０００２】
【従来の技術】
例えば車両に搭載される電子制御装置（以下「ＥＣＵ」という。）に用いられる制御プログラムでは、制御応答性や安全性の確保等から所定の処理をリアルタイムに実行する必要性がある。そのため、このようなリアルタイム性を必要とする処理（リアルタイム処理）は、メインルーチンとは別の割込ルーチンとして用意されるのが一般的である。割り込みルーチンは、例えばイベントの発生等をトリガとしてメインルーチンの実行中に優先して実行される。優先して実行されるとは、割込ルーチンの実行により一時的にメインルーチンの実行が中断され、割込ルーチン終了後に、再びその中断位置からメインルーチンが実行されることをいう。
【０００３】
近年では、上述したＥＣＵの制御プログラムもＯＳ（オペレーティング・システム）上で動作するようになっており、メインルーチンや割込ルーチン等の実行単位がタスクと呼ばれ、ＯＳにより管理されている。
このタスクには実行の優先度を示すレベル（タスクレベル）が設定されており、このタスクレベルに基づいて上述したような割込処理を実現している。つまり、ＯＳの管理の下、相対的にレベルの高いタスクである上位タスクは、相対的にレベルの低いタスクである下位タスクに優先する（割り込む）。上述した例で言えば、メインルーチンによる処理が下位タスクに相当し、割込ルーチンによる処理が上位タスクに相当する。
【０００４】
このようなタスク概念の導入は、実行の優先度であるタスクレベルを設定するという極めて簡単な情報記述だけで何等プログラム間の実行タイミング等を記述する必要をなくし、割込処理の設計を容易にした。
一方、イベント発生というような、下位タスクの処理タイミングに関係しないタイミングで、上位タスクが割り込む。そのため、下位タスクに不具合が生じる可能性がある。その一つのケースは、上位タスクと下位タスクとで共通の変数を更新又は参照（以下「操作」という。）する場合である。この共通の変数は、例えばプログラム全体が複数の関数にて構成されているとき、これら関数間で共通にアクセスできる記憶領域に記憶されるものであり、グローバル変数（大域変数）と呼ばれる。
【０００５】
例えば、下位タスクにて２つのグローバル変数ａ，ｂを参照し、上位タスクにて同一のグローバル変数ａ，ｂを更新する場合を考える。このとき、下位タスクにて変数ａが参照された後、変数ｂが参照される前に上位タスクが割り込むと、グローバル変数ａ，ｂが共に更新されてしまい、その後、下位タスクで参照されるグローバル変数ｂは上位タスクによる更新後のものになってしまう。つまり、一方のグローバル変数ａについては時間的に古いものが参照され、他方のグローバル変数ｂについては時間的に新しいものが参照されるのである。このような状態は、グローバル変数の同時性（一貫性、無矛盾性などと呼ばれることもある）が失われた状態と表現され、この同時性が必要とされる場合、例えば時間的な相関関係が変数間に存在するような場合には、制御上の問題を招く事態となる。
【０００６】
また例えば、下位タスクにて２つのグローバル変数ａ，ｂを更新し上位タスクにて同一のグローバル変数ａ，ｂを参照する場合も、同時性が失われるという同様の不具合が発生する。
なお、上述した例では２つのグローバル変数を処理対象としていたが、同時性を必要とする３つ以上のグローバル変数を処理対象とする場合も同様である。また、１つのグローバル変数を処理対象とする場合であっても同様である。例えば下位タスクで２回連続して同一のグローバル変数を読み出す場合を考えると、このときは、下位タスクによる１回目の変数の参照後に上位タスクでその変数が更新されると、２回目に読み出された変数は、１回目に読み出された変数と異なるものとなってしまい、同時性が失われることになる。
【０００７】
また、同時性が失われるという不具合以外にも、例えば、下位タスク及び上位タスクで同一のグローバル変数を更新する場合、上位タスクが割り込んで更新したグローバル変数を下位タスクが書き戻してしまういわゆるリードモディファイライトが生じる可能性がある。
【０００８】
従来、このような不具合を回避するため、下位タスクのプログラム中には、必要に応じて割込禁止／許可命令を記述していた。割込禁止命令は、上位タスクの割り込みを禁止するものであり、割込許可命令は上位タスクの割り込みを許可するものである。つまり、割込禁止命令と割込許可命令で挟まれた処理ステップの途中では、上位タスクは割り込めない。したがって、同時性を必要とするグローバル変数に係る処理の前後にそれぞれ割込禁止命令、割込許可命令を記述しておけば、上位タスクによる変数操作がなされないため、グローバル変数の同時性が確保できる。また、リードモディファイライトが生じる可能性があるグローバル変数に係る処理の前後にそれぞれ割込禁止命令、割込許可命令を記述しておけば、グローバル変数のリードモディファイライトを防止することができる。
【０００９】
【発明が解決しようとする課題】
上述したような割込禁止／許可命令は、上位タスクの割り込みを禁止／許可するものであるため、下位タスクのプログラム中に記述すべきものである。そのため、次に示すような問題があった。
【００１０】
▲１▼プログラムの作成時に、作業者が各タスクのタスクレベルを考慮して割込禁止／許可命令を記述しなければならないため、プログラム作成時間がその分増加する。
▲２▼また、設定されたタスクレベルが実行途中で変動するプログラムを作成する場合は、このような実行途中のタスクレベルの変動までも考慮して、割込禁止／許可命令を記述する必要がある。これは上記▲１▼に示すプログラム作成時間をさらに増加させる要因となる。
【００１１】
▲３▼さらに、実行単位の処理プログラムを再利用して新たなプログラムを作成しようとしたとき、タスクレベルが変わってくることがある。その場合、割込禁止／許可命令をプログラム中に新たに挿入したり、プログラム中から削除したりする必要が生じる。これは各処理プログラムの再利用性を低下させることになる。
【００１２】
このような問題を解決する手法としては、下位タスクだけでなく、本来割り込み禁止を必要としない上位タスクのプログラム中にも、グローバル変数に係る処理の前後に割込禁止／許可命令を記述しておくことが考えられる。
ところが、本来割り込み禁止を必要としないタスクのプログラム中に割込禁止／許可命令を記述すると、そのタスクに対して上位のタスクは、たとえグローバル変数の操作を行わないものであっても、割込禁止／許可命令で挟まれた処理ステップの途中では、割り込めないという事態となる。これは、リアルタイム性の高い上位タスクの処理の遅延を招く。割込禁止／許可命令で挟まれた処理ステップでは、実質的に優先度が逆転することになるからである。
【００１３】
すなわち、本来割り込み禁止を必要としないタスクのプログラム中に割込禁止／許可命令を記述すると、無駄な割込禁止期間が増加することによって、リアルタイム性の高いタスクの実行が遅延することになり、制御応答性や安全性の確保等の実現が困難になるなど、制御性能に影響を及ぼす結果を招いてしまう。
【００１４】
本発明は、上述した問題を解決するためになされたものであり、実行単位となる処理プログラムの優先度を考慮して作業者が割込禁止／許可命令を記述する必要をなくし、しかも、無駄な割込禁止期間が発生することを極力抑えることを目的とする。
【００１５】
【課題を解決するための手段及び発明の効果】
上述した目的を達成するためになされた請求項１に記載の情報処理装置は、実行単位となる複数の処理プログラムを当該処理プログラム毎に設定される優先度に基づき実行することによって、一連の機能を実現する。例えばＯＳ上でタスク管理されるプログラムであれば、この処理プログラム毎にタスクが生成されることになり、タスク毎に設定されるタスクレベルがここでいう優先度に相当する。なお、以下では各機能の実現において処理プログラムを主体とした表現を便宜上用いることがあるが、実際には情報処理装置の備えるいわゆるＣＰＵが主体となって処理プログラムを実行することによって各機能が実現されることは言うまでもない。
【００１６】
本発明は、上述したように、優先度の相対的に低い下位プログラムと優先度の相対的に高い上位プログラムとの間で共通に使用されるグローバル変数が、下位プログラムによる操作の途中で上位プログラムの割り込みによって操作される可能性を考慮してなされたものであり、これに対して、次に示すような構成を採用した。
【００１７】
すなわち、各処理プログラムでは、グローバル変数の操作に先立って、判断処理を実行し、上位プログラムの割り込みによってグローバル変数が操作される可能性を判断する。そして次に、判断処理によってグローバル変数が操作される可能性があると判断された場合にだけ、禁止処理を実行することによって割り込みを禁止する。
【００１８】
本発明は、上述した従来の問題は割込禁止／許可命令が処理プログラム中に固定的に記述されることで発生することに着目したものであり、各処理プログラムにおいて、上位プログラムによってグローバル変数が操作される可能性がある場合には割り込みを禁止し、一方、グローバル変数が操作される可能性がなければ割り込みを禁止しない。つまり、各処理プログラムにおいて、必要に応じて動的に割り込みを禁止するのである。
【００１９】
これによって、各処理プログラムに設定される優先度を考慮して作業者が割込禁止／許可命令を記述する必要がなくなる。また、上位プログラムの割り込みによってグローバル変数が操作される可能性がない場合には割り込みが禁止されないため、本来割り込みの禁止を必要としない上位プログラムにおいて割り込みが禁止されることはなく、無駄な割込禁止期間の発生を抑えられる。
【００２０】
なお、禁止処理による割り込みの禁止は、マイクロコンピュータ（以下「マイコン」という。）に対するいわゆる割込禁止命令を実行することで実現することが考えられる。マイコンは、例えば入力装置からの割込信号によって、割込ハンドラと呼ばれるプログラムを起動し、ＯＳに管理されるタスクの切り換え（タスクディスパッチ）や、ＯＳに管理されない所定の割込プログラムを起動する。したがって、割込禁止命令を実行すれば、タスクディスパッチを含む全ての割込処理を禁止することができる。
【００２１】
一方、グローバル変数に係る処理が各タスクにおいて実行されることを前提とすれば、ＯＳにおけるタスクディスパッチを禁止してもよい。このようにすれば、ＯＳに管理されない所定の割込プログラムは起動されることになり、グローバル変数の操作に関係しないリアルタイム性の高い処理の実行が遅れることを防止できる。すなわち、無駄な割込禁止期間がより削減される。なお、タスクディスパッチの禁止は、ＯＳに対する割込禁止命令を実行すること、また、タスクに設定されるタスクレベルを操作することで実現すればよい。
【００２２】
さらに、上述した判断処理では、実行中の処理プログラムに設定された優先度が他の処理プログラムの優先度を下回っている場合に、上位プログラムによってグローバル変数が操作される可能性があると判断することが考えられる。このようにすれば、判断処理が簡単になるという点で有利である。
【００２３】
しかし、グローバル変数の操作を行わない、すなわち不具合が生じる可能性のない上位プログラムの割り込みも禁止されてしまうことになり、結果的に、無駄な割込禁止期間を増大させる可能性がある。そこで請求項２に示すように、判断処理では、実行中の処理プログラムにグローバル変数が下位プログラムによる操作途中で上位プログラムの割り込みによって操作される可能性を考慮して設定された優先度が、グローバル変数を操作する他の処理プログラムの優先度を下回っている場合に、上位プログラムによって操作される可能性があると判断するようにしてもよい。具体的には、例えば請求項３に示すように、グローバル変数を操作する処理プログラムに設定された優先度の中で最も高い優先度を優先度記憶手段に記憶しておき、この記憶された優先度と、実行中の処理プログラムに設定された優先度とを比較することによって、判断することが考えられる。
【００２４】
このようにすれば、実行中の処理プログラムに上位プログラムが割り込む可能性があっても、その上位プログラムにてグローバル変数が操作される可能性がなければ、割り込みは禁止されない。これによって、さらに無駄な割込禁止期間の発生を抑えることができる。
【００２５】
無駄な割込禁止期間を削減するという観点からは、請求項４に示す構成を採用するとさらによい。このとき判断処理では、実行中の処理プログラムにグローバル変数が下位プログラムによる操作途中で上位プログラムの割り込みによって操作される可能性を考慮して設定された優先度が、当該実行中の処理プログラムの操作対象となるグローバル変数を操作する他の処理プログラムの優先度を下回っている場合に、上位プログラムによって操作される可能性があると判断する。具体的には、例えば請求項５に示すように、グローバル変数毎に、当該グローバル変数を操作する処理プログラムの優先度の中で最も高い優先度を優先度記憶手段に記憶しておき、操作対象となるグローバル変数に対応する優先度と、実行中の処理プログラムに設定された優先度とを比較することによって、判断することが考えられる。
【００２６】
つまり、グローバル変数の操作を行う上位プログラムがあっても、そのグローバル変数が下位プログラムによる操作対象でなければ不具合は生じない。上述した構成を採用すれば、上位プログラムがグローバル変数を操作するものであっても、そのグローバル変数が下位プログラムの操作対象でなければ、割り込みは禁止されない。これによって、無駄な割込禁止期間のさらなる削減に寄与できる。
【００２７】
ところで、割り込みを禁止した後、該当するグローバル変数の操作が完了すると、下位プログラムでは割り込みを許可する。この割り込みの許可は、グローバル変数の操作完了後に無条件に行うことも考えられるが、割り込み禁止の実現手法によっては、不適切なタイミングで割り込みが許可されてしまう可能性も考えられる。
【００２８】
そこで請求項６に示す構成を採用することが望ましい。すなわち、各処理プログラムでは、グローバル変数の操作が完了すると、許可判断処理を実行することによって、上述した禁止処理によって割込禁止状態となっているか否かを判断し、さらに、当該許可判断処理にて割込禁止状態であると判断された場合にだけ、許可処理を実行して、割り込みを許可することが考えられる。このようにすれば、禁止処理の実行に応じて許可処理が実行されるため、不適切なタイミングで割り込みが許可されることがなくなり、適切な期間で割り込み禁止が実現される。
【００２９】
【発明の実施の形態】
以下、本発明を具体化した実施例を図面を参照して説明する。
図１は、本発明の「情報処理装置」を具体化したエンジン制御装置（以下「ＥＣＵ」という。）１の構成を表すブロック図である。ＥＣＵ１は、車両に搭載された内燃機関型エンジンの制御を行う。
【００３０】
ＥＣＵ１は、エンジンのクランク軸が所定角度回転する毎にパルス状の信号を出力する回転角センサ、エンジンの特定の気筒のピストンが所定位置（例えば上死点：ＴＤＣ）にくる度にパルス状の信号を出力する基準位置センサ、エンジンの冷却水の温度を検出する水温センサ、及び酸素濃度を計測する酸素濃度センサ等、エンジンの運転状態を検出する様々なセンサ３０からの信号を入力して波形整形やＡ／Ｄ変換を行う入力回路２１と、入力回路２１からのセンサ信号に基づき、エンジンを制御するための様々な処理を実行するマイコン１０と、マイコン１０からの制御データに応じて、エンジンに取付けられたインジェクタ（燃料噴射装置）及びイグナイタ（点火装置）等のアクチュエータ４０を駆動する出力回路２２とを、備えている。
【００３１】
そして、マイコン１０には、プログラムを実行する周知のＣＰＵ１１と、ＣＰＵ１１によって実行されるプログラムを記憶するＲＯＭ１２と、ＣＰＵ１１による演算結果等を記憶するためのＲＡＭ１３と、入力回路２１及び出力回路２２との間で信号をやり取りするためのＩ／Ｏ１４と、各種レジスタやフリーランカウンタ等（図示省略）とが備えられている。
【００３２】
このように構成されたＥＣＵ１は、各種センサ３０から入力回路２１を介して入力される信号に基づき、出力回路２２に接続されたアクチュエータ４０を駆動する、エンジン制御処理を行う。
このエンジン制御を実現するためのエンジン制御プログラムは、上述したようにマイコン１０の備えるＲＯＭ１２に記憶されている。そして、このエンジン制御プログラムは実行単位毎に細分化されて記述されている。実行単位となる各処理プログラムは、設定される優先度に基づき実行される。具体的には、優先度の相対的に高い処理プログラムである上位プログラムは、相対的に低い処理プログラムである下位プログラムに優先して実行される。各処理プログラムの実行単位がタスクと呼ばれ、ＯＳによって管理されている。
【００３３】
このようなエンジン制御プログラムでは、制御データを算出してＲＡＭ１３に格納したり、ＲＡＭ１３に格納された制御データを参照して、新たな制御データを算出するといった処理を行う。このとき、同一の制御データを複数のタスクで処理するために、グローバル変数が用いられる。グローバル変数は、例えばプログラム全体が複数の関数にて構成されているとき、これら関数間で共通にアクセスできるＲＡＭ１３の所定の記憶領域に記憶される。
【００３４】
このような上位タスク及び下位タスクによるグローバル変数としての制御データの操作を考えた場合、上述した割込処理によって制御データの同時性が失われてしまうといった不具合や、上位タスクが更新したグローバル変数を下位タスクが書き戻してしまういわゆるリードモディファイライトが生じることがある。
【００３５】
従来は、このような不具合を回避するために、割込禁止／許可命令を下位タスクのプログラム中に記述することによって、下位タスクによる制御データの操作の途中で、上位タスクが割り込んで制御データを操作できないようにしていた。ところが、このような割込禁止／許可命令は処理プログラム毎に設定される優先度を考慮して作業者が記述しなければならなかったため、プログラム作成時間を増大させる結果となっていた。また、処理プログラムの実行途中で優先度が変動することもあり、このような実行途中の優先度の変動をも考慮して記述する必要があった。さらに、実行単位となる処理プログラムの再利用を考えた場合、他の処理プログラムとの関係で優先度が変わってくると、プログラム中に割込禁止／許可命令を追加したり削除したりする必要があり、処理プログラムの再利用性を低下させていた。
【００３６】
もちろん、全ての処理プログラムに割込禁止／許可命令を記述することも考えられるが、本来割り込み禁止を必要としないタスクでも割り込みが禁止されるという無駄な割込禁止期間が発生するため、リアルタイム性の高いタスクの実行が遅延し、制御性能に問題が生じる。
【００３７】
そこで本実施例では、図２のフローチャートに示すようなタスク処理を各タスクが実行するようにした。つまり、同時性を必要とする制御データの操作を行うステップ（以下、ステップを単に記号Ｓで示す）１１０，Ｓ１２０，Ｓ１３０の前後で、禁止判定処理（Ｓ１００）、及び許可判定処理（Ｓ１４０）を実行するようにした。図２はＳ１１０〜Ｓ１３０にて３つの制御データｉ，ｊ，ｋの更新を行うものであるが、もちろん、同時性を必要とする制御データを参照する場合も同様に、その前後で禁止判定処理及び許可判定処理を実行するようにする。
【００３８】
本実施例は、この禁止判定処理及び許可判定処理に特徴を有するものであるため、次に図３のフローチャートを用いて、これら処理を説明する。
図３（ａ）は、禁止判定処理を示すフローチャートである。この禁止判定処理は、図２中のＳ１００など、タスク処理からコールされるサブルーチンとして用意されている。
【００３９】
まず最初のＳ２００において、実行中のタスクに設定された優先度Ｐを取得する。設定された優先度Ｐは、ＯＳ機能として用意されたサブルーチンコールによって取得することが考えられる。
続くＳ２１０では、操作対象の制御データに対応する優先度を取得する。図２に例示したタスク処理では、３つの制御データｉ，ｊ，ｋが操作対象となっているため、制御データｉ，ｊ，ｋに対応する優先度を取得する。
【００４０】
この処理は、図１中に示すＲＡＭ１３の記憶領域１３ａを参照することによって実現される。記憶領域１３ａには、図４に示すように、制御データ１，２，・・・，Ｎ毎に、制御データ１〜Ｎの操作を行うタスクの優先度の中で最も高い優先度Ｐ１，Ｐ２，・・・，ＰＮが記憶されている。
【００４１】
なお、３つの制御データｉ，ｊ，ｋに対応する優先度をＰｉ，Ｐｊ，Ｐｋとすれば、ここでは、優先度Ｐｉ，Ｐｊ，Ｐｋの中で最も高いものを取得することが考えられる。また、３つの優先度Ｐｉ，Ｐｊ，Ｐｋの全てを取得するようにしてもよい。
【００４２】
そして次のＳ２２０では、Ｓ２００及びＳ２１０にて取得した優先度を比較して、優先度Ｐが他の優先度よりも下回っているか否かを判断する。３つの優先度Ｐｉ，Ｐｊ，Ｐｋの中で１つでも優先度Ｐを上回るものがあれば、ここで肯定判断される。優先度Ｐが下回っていると判断された場合（Ｓ２２０：ＹＥＳ）、Ｓ２３０にて割り込みを禁止し、その後、本禁止判定処理を終了する。Ｓ２３０における割り込み禁止は、割込禁止状態を示すフラグＸＤＩをオンにすることによって実現される。一方、優先度Ｐが下回っていないと判断された場合（Ｓ２２０：ＮＯ）、Ｓ２３０の処理を実行せず、すなわち、割り込みの禁止を実行せずに、本禁止判定処理を終了する。
【００４３】
続いて、許可判定処理を説明する。図３（ｂ）は、許可判定処理を示すフローチャートである。この許可判定処理も、禁止判定処理と同様、図２中のＳ１４０など、タスク処理からコールされるサブルーチンとして用意されている。
まずＳ３００において、割込禁止状態であるか否かを判断する。この処理は、上述した禁止判定処理において割り込みが禁止されたか否かを判断するものであり、具体的には、割込禁止状態を示すフラグＸＤＩがオンになっているか否かを判断するものである。ここで割込禁止状態であると判断された場合（Ｓ３００：ＹＥＳ）、Ｓ３１０にて割り込みを許可し、その後、本許可判定処理を終了する。Ｓ３１０における割り込み許可は、割込禁止状態を示すフラグＸＤＩをオフにすることによって実現される。一方、割込禁止状態でないと判断された場合（Ｓ３００：ＮＯ）、Ｓ３１０の処理を実行せず、すなわち割り込みの許可を実行せずに、本許可判定処理を終了する。
【００４４】
このように本実施例では、各タスクにおいて禁止判定処理を実行することによって（図２中のＳ１００）、操作対象の制御データｉ，ｊ，ｋが上位タスクにて操作される可能性がある場合には割り込みを禁止し（図３（ａ）中のＳ２２０：ＹＥＳ，Ｓ２３０）、一方、制御データｉ，ｊ，ｋが操作される可能性がなければ割り込みを禁止しない（Ｓ２２０：ＮＯ）。つまり、各処理プログラムにおいて、必要に応じて動的に割り込みを禁止するのである。
【００４５】
これによって、各処理プログラムに設定される優先度を考慮して作業者が割込禁止／許可命令を記述する必要がなくなる。
また、上位タスクの割り込みによって制御データが操作される可能性がない場合には割り込みが禁止されないため、本来割り込みの禁止を必要としない上位タスクにおいて割り込みが禁止されることはなく、無駄な割込禁止期間の発生を抑えられる。
【００４６】
特に本実施例では、グローバル変数としての制御データ１〜Ｎ毎に、当該制御データ１〜Ｎを操作するタスクの優先度の中でもっとも高い優先度Ｐ１〜ＰＮをＲＡＭ１３の記憶領域１３ａに記憶しておき（図４参照）、操作対象の制御データｉ，ｊ，ｋに対応して記憶された優先度Ｐｉ，Ｐｊ，Ｐｋを取得し（図３（ａ）中のＳ２１０）、実行中のタスクの優先度Ｐと比較して（Ｓ２２０）、上位タスクによる制御データの操作がなされる可能性を判断している。
【００４７】
これは、たとえ制御データの操作を行う上位タスクの割り込みがあっても、その制御データが下位タスクの操作対象の制御データｉ，ｊ，ｋでなければ、不具合は生じないためである。本実施例によれば、上位タスクが制御データを操作するものであっても、その制御データが下位タスクの操作対象でなければ、割り込みは禁止されない。これによって、無駄な割込禁止期間の発生を極力抑えることができる。
【００４８】
また、本実施例では、制御データの操作が完了すると（図２中のＳ１３０の終了後）、許可判定処理を実行することによって（Ｓ１４０）、割込禁止状態であるか否かを判断し（図３（ｂ）中のＳ３００）、割込禁止状態であると判断された場合にだけ、割り込みを許可する（Ｓ３１０）。これによって、割り込みの禁止に対応して割り込み許可がなされ、不適切なタイミングで割り込みが許可されることがないため、適切な期間で割り込みを禁止することができる。
【００４９】
なお、本実施例におけるＲＡＭ１３（詳しくは、その記憶領域１３ａ）が「優先度記憶手段」に相当する。また、図３（ａ）中のＳ２００〜Ｓ２２０の処理が「判断処理」に相当し、Ｓ２３０の処理が「禁止処理」に相当する。さらに、図３（ｂ）中のＳ３００の処理が「許可判断処理」に相当し、Ｓ３１０の処理が「許可処理」に相当する。
【００５０】
以上、本発明はこのような実施例に何等限定されるものではなく、本発明の主旨を逸脱しない範囲において種々なる形態で実施し得る。
（イ）上記実施例では、図３（ａ）中のＳ２３０における割り込みの禁止は、マイコン１０に対するいわゆる割込禁止命令を実行することで、すなわち割込禁止状態を示すフラグＸＤＩをオンにすることで実現していた。
【００５１】
ただし、ＯＳによって管理されない割込プログラムが存在することも考えられる。例えば図５に示す如くである。図５では、エンジン制御プログラムが、ＯＳ５２に管理されるタスク５４と、割込ハンドラ５１から直接的に起動される割込プログラム５３とからなる。この場合、マイコン１０では、ＣＰＵ１１が、入力回路２１からの割込信号に基づき割込ハンドラ５１を起動し、直接的に割込プログラム５３を起動したり、ＯＳ５２を介してタスク５４のディスパッチを行ったりして割込処理を実現する。
【００５２】
このとき、グローバル変数としての制御データの操作がタスク５４だけで実行されることを前提とした場合、上記実施例のように割込禁止状態を示すフラグＸＤＩをオンにすると、割込ハンドラ５１による全ての割込処理が禁止されてしまい、制御データ操作に関与しない割込プログラム５３の実行も遅延する結果となる。
【００５３】
そこでこの場合、上述した図３中のＳ２３０における割り込み禁止は、ＯＳ５２におけるタスクディスパッチを禁止することで実現してもよい。このようにすれば、ＯＳ５２に管理されない割込プログラム５３はイベント発生などのタイミングで実行され、制御データの操作に関与しない割込プログラム５３の実行が遅延することを防止できる。すなわち、無駄な割込禁止期間がより削減される。なお、タスクディスパッチの禁止は、ＯＳ５２に対する所定の割込禁止命令を実行すること、また、タスク５４にそれぞれ設定されるタスクレベルを一時的に書き換えることで実現すればよい。
【００５４】
（ロ）また、上記実施例では、優先度に関する情報を、グローバル変数としての制御データ１〜Ｎ毎に記憶した。これに対して、制御データといったグローバル変数全体を一まとめにし、グローバル変数を操作する可能性のあるタスクに設定された優先度の中で最も高いものを一つだけ記憶するようにしてもよい。このようにしても、上位タスクによって制御データが操作される可能性を判断することはできる。ただし、このときはグローバル変数全体に対して記憶された優先度と実行中のタスクに設定された優先度Ｐとの比較を行うことになり、下位タスクの操作対象となる制御データが上位タスクに操作されない場合であっても、割り込みが禁止される。結果として、上記実施例と比べて、無駄な割り込み禁止期間が幾分増える。
【００５５】
（ハ）ところで、上記実施例ではエンジン制御処理を行うＥＣＵ１として本発明を具体化したが、このような車両のエンジン制御に限られず、割込処理を行うような情報処理装置全般に本発明が適用できることは言うまでもない。
【図面の簡単な説明】
【図１】実施例のＥＣＵの構成を表すブロック図である。
【図２】タスク処理を示すフローチャートである。
【図３】（ａ）は禁止判定処理を示すフローチャートであり、（ｂ）は許可判定処理を示すフローチャートである。
【図４】優先度の記録領域を示す説明図である。
【図５】プログラム構成を例示する模式図である。
【符号の説明】
１…ＥＣＵ            １０…マイコン
１１…ＣＰＵ            １２…ＲＯＭ
１３…ＲＡＭ          １３ａ…記憶領域
１４…Ｉ／Ｏ            ２１…入力回路
２２…出力回路          ３０…センサ
４０…アクチュエータ    ５１…割込ハンドラ
５２…ＯＳ              ５３…割込プログラム
５４…タスク
【図１】
0003617445.tif 000002
【図２】
0003617445.tif 000003
【図３】
0003617445.tif 000004
【図４】
0003617445.tif 000005
【図５】
0003617445.tif 000006