(57)【要約】【課題】  複数のタスクを切り替えて実行するＣＰＵの、タスクスケジューリングのために費やす時間の低減を、多重割り込み機能を利用して実現することを目的とする。【解決手段】  出力を要求された複数の割り込み信号のうち最も優先度の高いものを特定して出力する割り込みコントローラからの割り込み信号に対応した処理を実行するＣＰＵが、ＯＳの提供するプログラムを実行することで、タスクレベル処理の実行の要求を受けたことに基づいて、割り込みコントローラに当該タスクレベル処理に対応した割り込み信号を出力するよう要求する。【選択図】 図１１
2005276097.tif 000002
【特許請求の範囲】
【請求項１】
出力を要求された複数の割り込み信号のうち最も優先度の高いものを特定して出力する多重割り込み手段、からの割り込み信号に対応した処理を実行する演算装置を、
タスクレベル処理の実行の要求を受けたことに基づいて、前記多重割り込み手段に当該タスクレベル処理に対応した割り込み信号を出力するよう要求する割り込み要求手段として機能させる割り込み依頼プログラム。
【請求項２】
前記割り込み要求手段は、同一の割り込み信号に複数種類のタスクレベル処理を割り当てていることを特徴とする請求項１に記載の割り込み依頼プログラム。
【請求項３】
前記演算装置を、前記多重割り込み手段からの割り込み信号に対応した処理を実行する割り込み対応手段として機能させ、
前記割り込み要求手段は、タスクレベル処理の実行の要求を受けたことに基づいて、このタスクレベル処理とこのタスクレベル処理の優先度とが対応づけられた実行待ちタスク情報を記憶媒体に記憶させ、このタスクレベル処理の優先度に対応した割り込み信号を出力するよう要求し、
前記割り込み対応手段は、前記記憶媒体に記憶された実行待ちタスク情報のうち、前記多重割り込み手段からの割り込み信号の優先度に対応したタスクレベル処理の中で、最も古く記憶されたタスクレベル処理を実行することを特徴とする請求項２に記載の割り込み依頼プログラム。
【請求項４】
前記演算装置を、この演算装置によるタスクレベル処理の実行が完了するとき、処理完了通知を前記多重割り込み手段に対して行う終了処理手段として機能させ、
前記多重割り込み手段は、前記演算装置から前記処理完了通知を受けることに基づいて、出力を要求された複数の割り込み信号のうち最も優先度の高いものを特定して出力することを特徴とする請求項１ないし３に記載の割り込み依頼プログラム。
【請求項５】
前記演算装置を、この演算装置によるタスクレベル処理の実行が完了するとき、このタスクレベル処理と同じ優先度のタスクレベル処理が前記実行待ちタスク情報として前記記憶媒体に記憶されている場合、続いて当該記憶されているタスクレベル処理の１つを続いて実行し、そうでない場合、処理完了通知を前記多重割り込み手段に対して行う終了処理手段として機能させ、
前記多重割り込み手段は、前記演算装置から前記処理完了通知を受けることに基づいて、出力を要求された複数の割り込み信号のうち最も優先度の高いものを特定して出力することを特徴とする請求項２または３に記載の割り込み依頼プログラム。
【請求項６】
前記多重割り込み手段は、直前に出力した割り込み信号の優先度を記憶するための現在優先度記憶媒体を有し、出力を要求された複数の割り込み信号のうち最も優先度の高いものを特定し、この特定したものの優先度がこの現在優先度記憶媒体に記憶された優先度より高ければそれを出力するようになっており、
前記演算装置を、現在実行中のタスクレベル処理の優先度を擬似的に高めるため、前記多重割り込み手段の前記現在優先度記憶媒体が記憶する優先度をより高い優先度に書き換える現在優先度書き換え手段として機能させることを特徴とする請求項１ないし５のいずれか１つに記載の割り込み依頼プログラム。
【請求項７】
前記多重割り込み手段は、直前に出力した割り込み信号の優先度を記憶するための現在優先度記憶媒体を有し、更に割り込み信号とその割り込み信号の優先度とを対応づける情報を記憶するための割り込み優先度記憶媒体を有し、出力を要求された複数の割り込み信号のうち最も優先度の高いものを特定し、この特定したものの優先度がこの現在優先度記憶媒体に記憶された優先度より高ければそれを出力するようになっており、
前記演算装置を、現在実行中のタスクレベル処理の優先度を擬似的に特定の優先度に高めるため、前記多重割り込み手段の前記割り込み優先度記憶媒体が記憶する情報のうち、前記特定の優先度以上の優先度を有する情報を、現在実行中のタスクレベル処理の優先度以下の優先度に書き換える割り込み優先度書き換え手段として機能させることを特徴とする請求項１ないし５のいずれか１つに記載の割り込み依頼プログラム。
【請求項８】
前記割り込み要求手段は、１つの割り込み信号には１種類のタスクレベル処理を割り当てており、
前記多重割り込み手段は、各割り込み信号毎の計数データを記憶する計数記憶媒体を有し、ある種類のタスクレベル処理に対応した割り込み信号の出力要求を受けると、その割り込み信号についての計数データの値を１段階増加させ、またある割り込み信号を演算装置に出力した後の規定のタイミングで、その割り込み信号についての計数データの値を１段階減少させることを特徴とする請求項１に記載の割り込み依頼プログラム。
【請求項９】
出力を要求された複数の割り込み信号のうち最も優先度の高いものを特定して出力する多重割り込み手段、からの割り込み信号に対応した処理を実行する割り込み対応手段と、
タスクレベル処理の実行の要求を受けたことに基づいて、前記多重割り込み手段に当該タスクレベル処理に対応した割り込み信号を出力するよう要求する割り込み要求手段と、を備えたマイクロコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、タスクスケジューリングにおけるタスクレベル処理の優先度の比較を多重割り込み手段に行わせるためのプログラム、およびそのプログラムを実行するマイクロコンピュータに関する。
【背景技術】
【０００２】
従来、ＯＳＥＫ−ＯＳ、ＩＴＲＯＮ等の、ＣＰＵ等の演算装置上で動作する一般的なＲＴＯＳ（リアルタイムオペレーティングシステム）の仕様は、そのオペレーティングシステム上で実行される処理の分類区分として、割り込みレベル処理、およびタスクレベル処理を規定している。
【０００３】
具体的には、ＲＴＯＳの仕様は、タスクレベル処理の実行の要求を受け付けるためのインターフェースを規定している。プログラムの開発者は、所定のプログラムをタスクレベルの処理として呼び出すようなアプリケーションプログラムを作成する際に、当該インターフェースを用いて当該所定のプログラムを呼び出すように、当該アプリケーションプログラムのプログラミングを行う。
【０００４】
またＲＴＯＳの仕様は、ＣＰＵが割り込みコントローラからの割り込み信号を受けることによって実行する処理を、割り込みレベル処理であると規定する。また、ＣＰＵで所定の割り込み命令が実行されると、ＣＰＵが割り込み信号を受けた場合と同等の作動を行うようになっている場合、その所定の割り込み命令の実行に基づいて実行される処理も、割り込みレベル処理であると規定している。
【０００５】
ＲＴＯＳ上で実行される処理がタスクレベル処理であるか否かは、その処理がどのようにして実行されたかに基づいて特定することができる。具体的には、その処理が、タスクレベル処理の実行の要求を受け付けるためのインターフェース（以下タスク起動インターフェースと記す）を用いることで実行されていれば、その処理はタスクレベルの処理である。そして、その処理が、タスクレベル処理の実行の要求を受け付けるためのインターフェースを用いずに実行されていれば、その処理はタスクレベルの処理でない。
【０００６】
従来のＲＴＯＳでは、上記のようなタスク起動インターフェースを介してタスクレベル処理の実行の要求を受け付けると、ＣＰＵは、当該実行の要求を受け付けたタスクレベル処理、現在実行している処理、および過去に処理の実行の要求を受け付けかつ現時点でまだ実行が完了していないタスクレベル処理の優先度を比較し、最も優先度の高い処理を実行する。このような、ＲＴＯＳによる優先度の比較、およびこの比較に基づいた実行する処理の決定は、ＲＴＯＳのタスクスケジューリングと呼ばれている。
【０００７】
また、ＲＴＯＳのタスクスケジューリングにおいては、ＣＰＵは、ＲＴＯＳ上で現在実行されている処理が終了すると、過去に処理の実行の要求を受け付けかつ現時点でまだ実行が完了していないタスクレベル処理の優先度を比較し、最も優先度の高い処理を実行する。
【０００８】
なお、割り込みレベル処理は、一般的にタスクレベル処理よりも高い優先度で実行されるようになっている。従って、タスクレベル処理がＲＴＯＳ上で実行されているときに、割り込みコントローラからの割り込み信号をＣＰＵが受けると、ＣＰＵは現在実行しているタスクレベル処理を中断し、受けた割り込み信号に対応する割り込みレベル処理を実行する。
【０００９】
従来用いられている割り込みコントローラとしては、多重割り込み機能を有する割り込みコントローラがある。多重割り込み機能とは、出力を要求された複数の割り込み信号のうち、最も優先度の高いものを特定して出力する機能をいう。具体的には、多重割り込み機能を有する割り込みコントローラは、ある割り込み信号をＣＰＵに出力したことにより、現在当該ＣＰＵがその割り込み信号に対応する処理を実行しているとき、他の割り込み信号の出力要求を受けると、当該出力要求を受けた割り込み信号の優先度と、先に出力した割り込み信号の優先度とを比較する。そして、当該出力要求を受けた割り込み信号の優先度が、先に出力した割り込み信号の優先度より高い場合にのみ、当該要求を受けた割り込み処理をＣＰＵに出力する。
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかし、上記のようなタスクスケジューリングをＣＰＵが実行するような従来のＲＴＯＳでは、このタスクスケジューリングのための処理自体に多くのＣＰＵ処理時間が費やされることになる。その結果、実際のタスクレベル処理、割り込みレベル処理のために用いることができるＣＰＵ時間が制限されてしまうという問題がある。
【００１１】
本発明は上記問題点に鑑み、複数のタスクを切り替えて実行するＣＰＵの、タスクスケジューリングのために費やす時間の低減を、多重割り込み機能を利用して実現することを目的とする。
【課題を解決するための手段】
【００１２】
上記目的を達成するための本発明に係る割り込み依頼プログラムの特徴は、「出力を要求された複数の割り込み信号のうち最も優先度の高いものを特定して出力する多重割り込み手段」からの割り込み信号に対応した処理を実行する演算装置を、「タスクレベル処理の実行の要求を受けたことに基づいて、多重割り込み手段に当該タスクレベル処理に対応した割り込み信号を出力するよう要求する割り込み要求手段」として機能させることである。
【００１３】
このような割り込み依頼プログラムを実行することで、演算装置は、タスクレベルの処理の実行の要求を受けたことに基づいて、多重割り込み手段、に当該タスクレベルの処理に対応した割り込み信号を出力するよう要求する。そして、この要求を受けた多重割り込み手段は、受けた要求のうち最も優先度の高いものを特定して、その特定した要求についての割り込み信号を出力する。そして演算装置は、この多重割り込み手段からの割り込み信号に対応した処理を実行する。したがって、演算装置は、タスクレベルの処理の優先度の比較を多重割り込み手段に任せることになる。ゆえに、複数のタスクを切り替えて実行する演算装置の、タスクスケジューリングのために費やす時間の低減が、多重割り込み機能の利用によって実現される。
【００１４】
また、多重割り込み手段は、出力を要求された複数の割り込み信号、および現在演算装置が実行中のタスクレベル処理に対応する割り込み信号のうち最も優先度の高いものを特定して出力するようになっていてもよい。
【００１５】
また、割り込み要求手段は、同一の割り込み信号に複数種類のタスクレベル処理を割り当てていてもよい。このようになっていることで、多重割り込み手段において、タスクレベル処理毎に異なる割り込み信号を出力する必要がないので、多重割り込み手段における割り込み信号の種類の数を低減することができる。
【００１６】
また、割り込み依頼プログラムは、演算装置を、多重割り込み手段からの割り込み信号に対応した処理を実行する割り込み対応手段として機能させ、割り込み要求手段は、タスクレベル処理の実行の要求を受けたことに基づいて、このタスクレベル処理とこのタスクレベル処理の優先度とが対応づけられた実行待ちタスク情報を記憶媒体に記憶させ、このタスクレベル処理の優先度に対応した割り込み信号を出力するよう要求するようになっていてもよい。更に、ここでの割り込み対応手段は、記憶媒体に記憶された実行待ちタスク情報のうち、多重割り込み手段からの割り込み信号の優先度に対応したタスクレベル処理の中で、最も古く記憶されたタスクレベル処理を実行していてもよい。
【００１７】
また、演算装置を、この演算装置によるタスクレベル処理の実行が完了するとき、処理完了通知を多重割り込み手段に対して行う終了処理手段として機能させてもよい。ただし、この場合の多重割り込み手段は、演算装置から処理完了通知を受けることに基づいて、出力を要求された複数の割り込み信号のうち最も優先度の高いものを特定して出力するようになっていることが望ましい。
【００１８】
このようになっていることで、割り込み依頼プログラムを実行する演算装置が、この演算装置によるタスクレベル処理の実行が完了するとき、処理完了通知を多重割り込み手段に対して行う。すると、多重割り込み手段は、出力を要求されている複数の割り込み信号のうち最も優先度の高いものを特定して出力する。したがって、演算装置は、タスクレベルの処理の優先度の比較を多重割り込み手段に任せることになる。
【００１９】
また、演算装置を、この演算装置によるタスクレベル処理の実行が完了するとき、このタスクレベル処理と同じ優先度のタスクレベル処理が前記実行待ちタスク情報として記憶媒体に記憶されている場合、続いて当該記憶されているタスクレベル処理の１つを続いて実行し、そうでない場合、処理完了通知を前記多重割り込み手段に対して行う終了処理手段として機能させてもよい。ただし、この場合には、多重割り込み手段は、演算装置から処理完了通知を受けることに基づいて、出力を要求された複数の割り込み信号のうち最も優先度の高いものを特定して出力するようになっていることが望ましい。
【００２０】
また、多重割り込み手段が、直前に出力した割り込み信号の優先度を記憶するための現在優先度記憶媒体を有し、出力を要求された複数の割り込み信号のうち最も優先度の高いものを特定し、この特定したものの優先度がこの現在優先度記憶媒体に記憶された優先度より高ければそれを出力するようになっている場合には、演算装置を、前記多重割り込み手段の前記現在優先度記憶媒体が記憶する優先度をより高い優先度に書き換える現在優先度書き換え手段として機能させてもよい。このようにすることで、現在実行中のタスクレベル処理の優先度を擬似的に高めることができる。
【００２１】
また、多重割り込み手段が、直前に出力した割り込み信号の優先度を記憶するための現在優先度記憶媒体を有し、更に割り込み信号とその割り込み信号の優先度とを対応づける情報を記憶するための割り込み優先度記憶媒体を有し、出力を要求された複数の割り込み信号のうち最も優先度の高いものを特定し、この特定したものの優先度がこの現在優先度記憶媒体に記憶された優先度より高ければそれを出力するようになっている場合には、演算装置を、現在実行中のタスクレベル処理の優先度を擬似的に特定の優先度に高めるため、多重割り込み手段の前記割り込み優先度記憶媒体が記憶する情報のうち、特定の優先度以上の優先度を有する情報を、現在実行中のタスクレベル処理の優先度以下の優先度に書き換える割り込み優先度書き換え手段として機能させてもよい。
【００２２】
また、割り込み要求手段は、１つの割り込み信号には１種類のタスクレベル処理を割り当てており、多重割り込み手段は、各割り込み信号毎の計数データを記憶する計数記憶媒体を有し、ある種類のタスクレベル処理に対応した割り込み信号の出力要求を受けると、その割り込み信号についての計数データの値を１段階増加させ、またある割り込み信号を演算装置に出力した後の規定のタイミングで、その割り込み信号についての計数データの値を１段階減少させるようになっていてもよい。
【００２３】
また、上記発明は、割り込み依頼プログラムを実行するマイクロコンピュータの形態で実現してもよい。
【発明を実施するための最良の形態】
【００２４】
（第１実施形態）
以下、本発明の第１実施形態について説明する。図１に、本実施形態に係るエンジンＥＣＵ１の構成を示す。エンジンＥＣＵ１は、エンジン２を制御するための装置である。エンジンＥＣＵ１は、クランクセンサ２３からエンジン２のクランクの角度が所定のクランク角になった旨のパルス信号の入力を受け、水温センサ３１からエンジン冷却水３の温度の情報の入力を受け、またスロットルセンサ４１からスロットル開度の情報の入力を受ける。そしてエンジンＥＣＵ１は、これら入力を受けた情報に基づいて、エンジン２の点火タイミング、燃料噴射量、スロットル調整量等の演算を行い、この演算結果に基づいて、燃料の点火を行うイグナイタ２１、燃料噴射を行うインジェクタ２２、および電子スロットル４を制御する。
【００２５】
この作動のために、エンジンＥＣＵ１は、外部入出力回路１１およびマイクロコンピュータ１２を有している。また、マイクロコンピュータ１２は、割り込みコントローラ１４、演算装置としてのＣＰＵ１５、記憶媒体としてのＲＡＭ１６およびＲＯＭ１７を有している。
【００２６】
外部入出力回路１１は、水温センサ３１、スロットルセンサ４１から受けた情報をＣＰＵ１５に出力し、またクランクセンサ２３から受けたパルス信号に基づいて割り込みコントローラ１４に割り込み信号出力を要求する。また外部入出力回路１１は、ＣＰＵ１５から受けた制御信号をイグナイタ２１、インジェクタ２２、電子スロットル４に出力する。
【００２７】
ＣＰＵ１５は、ＲＯＭ１７に記憶されている各種プログラムを読み出して実行することで、外部入出力回路１１を介して水温センサ３１、スロットルセンサ４１から受けた信号に基づいて、点火タイミング、燃料噴射量、スロットル調整量等の演算を行う。その演算の際、ＣＰＵ１５は、必要に応じてＲＡＭ１６に対して情報の読み出し及び書き込みを行い、またはＲＯＭ１７から情報の読み出しを行う。またＣＰＵ１５は、割り込みコントローラ１４から受けた割り込み信号に基づいて所定のプログラムを実行するようになっている。
【００２８】
このＣＰＵ１５は、タイムシェアリング方式で複数のプログラムを実行するようになっている。すなわちＣＰＵ１５は、１度に１つのプログラムの実行のみ行い、あらかじめ決められたプログラムの優先度に基づいて、実行するプログラムを適宜切り替えるようになっている。なお、ＣＰＵ１５は、リアルタイムオペレーティングシステムのＯＳＥＫ−ＯＳを実行し、そのＯＳＥＫ−ＯＳ上で各種プログラムを実行するようになっている。
【００２９】
具体的には、ＣＰＵ１５は、割り込みコントローラ１４からの割り込み信号に基づいて、実行するプログラムを切り替える。
【００３０】
図２に、ＣＰＵ１５のプログラムの切り替えの作動を説明するための図として、割り込みコントローラ１４、ＣＰＵ１５、ＲＡＭ１６、ＲＯＭ１７のそれぞれにおける記憶媒体のデータ構成を示す。
【００３１】
ＣＰＵ１５は、演算結果レジスタ１５１、１５２等、演算結果を格納する複数のレジスタを有している。
【００３２】
ＲＡＭ１６は、スタック１６１、Ｒｅａｄｙキュー１６２、エンジン２の制御のための制御用変数領域１６３等の記憶領域を有している。Ｒｅａｄｙキュー１６２は、後述する割り込みコントローラ１４の第３〜第７割り込みレジスタ１４３〜１４７の数、すなわち５つのＦＩＦＯ（先入れ先出し）バッファを有している。
【００３３】
ＲＯＭ１７は、割り込みベクタ１７１、ＣＰＵ１５における実行用の複数のプログラム１７２、エンジン２の制御のための制御用定数１７３を有している。なお割り込みベクタ１７１は、割り込みコントローラ１４からの割り込み信号と、その割り込み信号に基づいてＣＰＵ１５が実行を開始するプログラムとの対応情報である。
【００３４】
割り込みコントローラ１４は、８個の第０〜第７割り込みレジスタ１４０〜１４７、禁止フラグレジスタ１４８、ＩｎｔＬｖｌレジスタ１４９、旧ＩｎｔＬｖｌレジスタ１５０という記憶媒体を有している。
【００３５】
第０〜第７割り込みレジスタ１４０〜１４７のデータの格納形式は同じである。図３に、これら第０〜第７割り込みレジスタ１４０〜１４７のデータの格納形式を示す。第０〜第７割り込みレジスタ１４０〜１４７のそれぞれは、データの格納領域の先頭から、割り込みフラグ５１、割り込みマスクフラグ５２および割り込み優先度５３の順にデータを格納する。
【００３６】
ここで、割り込みコントローラ１４の作動について説明する。なお、本実施形態における割り込みコントローラ１４は、周知の多重割り込みコントローラである。
【００３７】
割り込みコントローラ１４は、ＣＰＵ１５から、第０〜第７割り込みレジスタ１４０〜１４７のうちいずれかの割り込みレジスタを指定した割り込み信号の出力の要求を受けると、指定された割り込みレジスタの割り込みフラグ５１の値を１（オン）にセットし、また当該割り込みレジスタの割り込みマスクフラグ５２の値を０（オフ）にセットする。なお、本実施形態においては、ＣＰＵ１５からの割り込み信号は、後述するタスクレベル処理用の割り込み信号である。
【００３８】
また割り込みコントローラ１４は、外部入出力回路１１から、第０〜第７割り込みレジスタ１４０〜１４７のうちいずれかの割り込みレジスタを指定した割り込み信号の出力の要求を受けると、その指定された割り込みレジスタの割り込みフラグ５１の値を１（オン）にセットする。
【００３９】
このように、割り込みコントローラ１４は、ＣＰＵ１５、外部入出力回路１１等から特定の割り込み信号の出力が要求されていることを記憶媒体に記憶させる。
【００４０】
割り込み信号の出力の要求を受けた割り込みコントローラ１４は、続いて、第０〜第７割り込みレジスタ１４０〜１４７から、その割り込みフラグ５１の値が１であり、かつ割り込みマスクフラグ５２の値が０であるような割り込みレジスタ、すなわち現在要求されている割り込み信号に対応する割り込みレジスタを特定する。現在要求されている割り込み信号に対応する割り込みレジスタは、割り込み許可のある割り込みレジスタであるとも言える。続いて割り込みコントローラ１４は、それら特定した割り込みレジスタのうち、最も割り込み優先度の高い割り込みレジスタを特定する。
【００４１】
割り込みレジスタの優先度は、上記した割り込み優先度５３の値によって特定される。割り込み優先度の値は０から７までの整数値のいずれかを取り、値が小さいほど優先度が高い。本実施形態においては、第０割り込みレジスタ１４０の割り込み優先度５３には値０が、第１割り込みレジスタ１４１の割り込み優先度５３には値１が、第２割り込みレジスタ１４２の割り込み優先度５３には値２が、第３割り込みレジスタ１４３の割り込み優先度５３には値３が、第４割り込みレジスタ１４４の割り込み優先度５３には値４が、第５割り込みレジスタ１４５の割り込み優先度５３には値５が、第６割り込みレジスタ１４６の割り込み優先度５３には値６が、第７割り込みレジスタ１４７の割り込み優先度５３には値７が、それぞれあらかじめ記憶されている。
【００４２】
続いて割り込みコントローラ１４は、上記のように特定した、現在要求されている割り込み信号に対応する割り込みレジスタのうち最も割り込み優先度の高い割り込みレジスタの割り込み優先度５３の値と、ＩｎｔＬｖｌレジスタ１４９の値とを比較する。そして、ＩｎｔＬｖｌレジスタ１４９の値よりも当該割り込み優先度５３の値の方が低ければ、すなわちＩｎｔＬｖｌレジスタ１４９の優先度よりも当該割り込み優先度５３の優先度の方が高ければ、割り込みコントローラ１４は、上記特定した割り込みレジスタにあらかじめ割り当てられた割り込み信号をＣＰＵ１５に出力する。
【００４３】
割り込み信号の出力を要求されている割り込みレジスタがない場合、あるいは割り込み信号の出力を要求されている割り込みレジスタの全ての割り込み優先度５３が、ＩｎｔＬｖｌレジスタ１４９の値以上である場合は、割り込みコントローラ１４は割り込み信号を出力しない。
【００４４】
なお、第０〜第７割り込みレジスタ１４０〜１４７には、あらかじめそれぞれ異なる割り込み信号が割り当てられている。
【００４５】
割り込み信号を出力した後、割り込みコントローラ１４は、旧ＩｎｔＬｖｌレジスタ１５０の値を現在ＩｎｔＬｖｌレジスタ１４９に記憶されている値に変更し、その後、直前に出力した割り込み信号に対応する優先度の値、すなわち当該割り込み信号に割り当てられた割り込みレジスタの割り込み優先度５３の値、を旧ＩｎｔＬｖｌレジスタ１５０に出力する。
【００４６】
このように、割り込みコントローラ１４は、割り込み信号の出力の要求を受けると、出力を要求されている複数の割り込み信号のうち最も優先度の高いものを特定し、この特定したものの優先度が、直前に出力した割り込み信号の優先度を記憶するためのＩｎｔＬｖｌレジスタ１４９に記憶された優先度より高ければその割り込み信号を出力する。
【００４７】
またこのように、割り込み優先度５３を有する各割り込みレジスタは、割り込み信号とその割り込み信号の優先度とを対応づける情報を記憶するための割り込み優先度記憶媒体として機能する。またＩｎｔＬｖｌレジスタ１４９は、直前に出力した割り込み信号の優先度を記憶するための現在優先度記憶媒体として機能する。
【００４８】
また割り込みコントローラ１４は、ＣＰＵ１５または外部入出力回路１１から、第０〜第７割り込みレジスタ１４０〜１４７のうちいずれかの割り込みレジスタを指定する割り込み要求消去の信号を受けると、その指定された割り込みレジスタの割り込みマスクフラグ５２の値を１（オン）にセットする。これによって、割り込みコントローラ１４では、当該割り込みレジスタに対応する割り込み信号の要求を受けていない状態となる。
【００４９】
また割り込みコントローラ１４のＩｎｔＬｖｌレジスタ１４９は、ＣＰＵ１５からの書き換え制御によってその値が書き換わるようになっている。割り込みコントローラ１４は、ＣＰＵ１５の制御によってＩｎｔＬｖｌレジスタ１４９の値が書き換わったことを検出すると、上述した、ＣＰＵ１５または外部入出力回路１１から割り込み信号の出力の要求を信号として受けて割り込みフラグ５１等を書き換えた後の作動と同等の作動を行う。
【００５０】
また禁止フラグレジスタ１４８は、ＣＰＵ１５の書き換え制御によってその値が書き換わるようになっている。禁止フラグレジスタ１４８の値が１（オン）の場合は、割り込みコントローラ１４は、上記した作動の説明に関わらず、第０〜第７割り込みレジスタ１４０〜１４７に対応する割り込み信号をＣＰＵ１５に出力しない。また禁止フラグレジスタ１４８の値が０（オフ）の場合は、割り込みコントローラ１４は上記した説明の通りの作動で第０〜第７割り込みレジスタ１４０〜１４７に対応する割り込み信号をＣＰＵ１５に出力する。
【００５１】
なお、本実施形態のオペレーティングシステムは、割り込み信号のそれぞれ、すなわち割り込み優先度の１つ１つに、ＣＰＵ１５が実行するプログラムを割り当てている。図４に、割り込み優先度と、その割り込み優先度に割り当てられるプログラムの対応関係を示す。
【００５２】
図４中、矩形７０〜７７のそれぞれが、１つの割り込み優先度に対応し、図中上方に配置されている矩形ほど、その割り込み優先度の値が低い、すなわち割り込み優先度が高い。
【００５３】
値が３以上の割り込み優先度のそれぞれには、タスクレベル処理用のプログラムが割り当てられる。ＯＳＥＫ−ＯＳは、あるプログラムから他のプログラムを呼び出すときに用いることができるシステムコールを規定している。このシステムコールが、タスクレベル処理の実行の要求を受け付けるためのインターフェースである。本実施形態においては、後述するように、このインターフェースを、アクティベートタスクと呼ぶ。タスクレベル処理用のプログラムとは、このアクティベートタスクを用いて実行が開始されるようになっているプログラムをいう。
【００５４】
また、タスクレベル処理用のプログラムが割り当てられる割り込み優先度は、最高優先タスク（割り込み優先度＝３）、高優先タスク（割り込み優先度＝４）、中優先タスク（割り込み優先度＝５）、低優先タスク（割り込み優先度＝６）、アイドルタスク（割り込み優先度＝７）の５つに分かれている。それぞれの割り込み優先度に、複数のタスクレベル処理用のプログラムが割り当てられている。
【００５５】
なお、タスクレベル処理用のプログラムがどの割り込み優先度に割り当てられるかの情報は、当該プログラムに付随してＲＯＭ１７に記憶されている。この情報により、タスクレベル処理用のプログラムの優先度を特定することができる。
【００５６】
また、値が２以下の割り込み優先度には、割り込みレベル処理用のプログラムが割り当てられる。割り込みレベル処理用のプログラムとは、上記したアクティベートタスクを介さず、かつ割り込みコントローラ１４からの割り込み信号に基づいて実行が開始されるプログラムをいう。例えば、外部入出力回路１１を介してクランクセンサ２３等の外部の装置からの信号を割り込みコントローラ１４が受け、それによって割り込みコントローラ１４がＣＰＵ１５に割り込み信号を出力することによって、ＣＰＵ１５において実行が開始されるプログラムが、割り込みレベル処理用のプログラムに該当する。また、また、ＣＰＵで所定の割り込み命令が実行されると、ＣＰＵが割り込み信号を受けた場合と同等の作動を行うようになっている場合、所定の割り込み命令の実行に基づいて実行されるプログラムも、割り込みレベル処理のプログラムに該当する。
【００５７】
また、割り込みレベル処理用のプログラムが割り当てられる割り込み優先度は、高優先割り込み（割り込み優先度＝０）、中優先割り込み（割り込み優先度＝１）、低優先割り込み（割り込み優先度＝２）の３つに分かれている。
【００５８】
次に、上記のような作動の割り込みコントローラ１４を用いるＣＰＵ１５の実行プログラムの切り替えについて説明する。
【００５９】
図５に、以下で説明するタスクＡ、タスクＢ、タスクＣおよび割り込みＸのＣＰＵ１５における実行タイミングを表す。なお、タスクＡは高優先タスク（割り込み優先度４）に割り当てられたタスクレベル処理用のプログラムである。また、タスクＢは中優先タスク（割り込み優先度５）に割り当てられたタスクレベル処理用のプログラムである。また、タスクＣは低優先タスク（割り込み優先度６）に割り当てられたタスクレベル処理用のプログラムである。また、割り込みＸは中優先割り込みに割り当てられた割り込みレベル処理用のプログラムである。
【００６０】
図５においては、左から右への向きに時間が経過するものとし、各時刻において実行されるタスクは、矩形で表されている。
【００６１】
以下で説明する通り、タスクＣの実行中、タスクＣからタスクＡが呼び出される（矢印６１のタイミングに相当する）ことにより、タスクＣが中断してタスクＡの実行が始まる（矢印６２のタイミングに相当する）。そしてタスクＡの実行が終了すると、タスクＣの実行が再開する（矢印６３のタイミングに相当する）。その後再びタスクＣの実行が中断して割り込みＸの実行が始まる（矢印６４のタイミングに相当する）。
【００６２】
その後割り込みＸからタスクＢが呼び出され（矢印６５のタイミングに相当する）、割り込みＸの実行終了後にそのタスクＢの実行が始まる（矢印６６のタイミングに相当する）。その後タスクＢの実行が終了すると、タスクＣの実行が再開する（矢印６７のタイミングに相当する）。
【００６３】
まず、図６〜図９に、このような作動を行うタスクＡ〜Ｃ、および割り込みＸのフローチャートを示す。図６は、タスクＡのフローチャートである。まずステップ１１０でタスクＡ処理を行う。タスクＡ処理とは、例えばスロットルセンサ４１から受けた情報をＲＡＭ１６の所定の領域に記憶する処理等、エンジン２の制御のための処理の１つである。続いてステップ１２０でターミネートタスクを呼び出し、処理を終了する。ターミネートタスクとは、プログラムの実行を終了し、次のプログラムの実行を開始するために用いられる、ＯＳＥＫ−ＯＳが提供するインターフェースである。このターミネートタスクの処理の詳細については後述する。
【００６４】
図７は、タスクＢのフローチャートである。まずステップ１３０でタスクＢ処理を行う。タスクＢ処理とは、例えばイグナイタ２１、インジェクタ２２、電子スロットル４に対して、それぞれ点火制御、燃料噴射制御、スロットル開度調整の制御信号を出力する処理等、エンジン２の制御のための処理の１つである。続いてステップ１４０でターミネートタスクを呼び出し、処理を終了する。
【００６５】
図８は、タスクＣのフローチャートである。まずステップ１５０でタスクＣ第１処理を行う。これは、例えばＲＡＭ１６に記憶されたクランクセンサ２３、水温センサ３１、スロットルセンサ４１からの情報に基づいて、燃料噴射量、燃料点火タイミング、スロットル調整量等の計算を行う処理の一部等、エンジン２の制御のための処理の１つである。
【００６６】
続いてステップ１６０で、上述したアクティベートタスクを呼び出す。なお、呼び出す際に、タスクＡを指定する情報を引数としてアクティベートタスクに渡す。アクティベートタスクの処理の詳細については後述する。
【００６７】
続いてステップ１７０で、タスクＣ第２処理を行う。タスクＣ第２処理は、タスクＣ第１処理と同様に、例えば燃料噴射量、燃料点火タイミング、スロットル調整量等の計算を行う処理の一部等、エンジン２の制御のための処理の１つである。
【００６８】
続いてステップ１８０でターミネートタスクを呼び出し、処理を終了する。
【００６９】
図９は、割り込みＸのフローチャートである。割り込みＸは、割り込みベクタ１７１において、第２割り込みレジスタ１４２に割り当てられた割り込み信号に対応するプログラムである。ＣＰＵ１５は、割り込みコントローラ１４から割り込み信号を受けると、割り込みベクタ１７１から、受けた割り込み信号に対応するプログラムを特定し、特定したプログラムの実行を開始する。したがって、ＣＰＵ１５は、第２割り込みレジスタ１４２に割り当てられた割り込み信号を受けることで、割り込みＸの実行を開始する。
【００７０】
なお、割り込みＸ等、割り込みレベル処理のプログラムの実行において、ＣＰＵ１５は、その実行開始直前に、コンテキストの待避を行う。具体的には、ＣＰＵの演算結果レジスタ、ＲＡＭ１６中のテンポラリデータをスタック１６１の一部に書き込む。なお、テンポラリデータとは、直前に実行されたプログラムが利用していた一時的な変数等の作業用データをいう。
【００７１】
またＣＰＵ１５は、割り込みレベル処理のプログラムの実行の終了時に、コンテキストの復帰を行う。具体的には、当該割り込みレベル処理のプログラムの実行開始直前に行ったコンテキスト待避でスタック１６１に書き込んだデータを、演算結果レジスタやＲＡＭ１６の元の領域に書き戻す。
【００７２】
またＣＰＵ１５は、割り込みレベル処理のプログラムの実行の終了時に、割り込みコントローラ１４の対応する割り込みレジスタの割込みフラグ５１の値を０に書き換える。
【００７３】
割り込みＸの実行においては、まずステップ２１０で、割り込みＸ第１処理を行う。割り込みＸ第１処理とは、例えば現在時刻をクランクセンサ２３から信号を受けた時刻としてＲＡＭ１６に記憶させる処理の一部等、エンジン２の制御のための処理の１つである。
【００７４】
続いてステップ２２０で、アクティベートタスクを呼び出す。なお、呼び出す際に、タスクＢを指定する情報を引数としてアクティベートタスクに渡す。
【００７５】
続いてステップ２３０で、割り込みＸ第２処理を実行する。割り込みＸ第２処理は、割り込みＸ第１処理と同様に、例えば現在時刻をクランクセンサ２３から信号を受けた時刻としてＲＡＭ１６に記憶させる処理の一部等、エンジン２の制御のための処理の１つである。
【００７６】
続いてステップ２４０では、割り込みＸを終了する。具体的には、ＲＴＩ（リターンインタラプト）命令を実行することで、割り込みコントローラ１４のＩｎｔＬｖｌレジスタ１４９の値を旧ＩｎｔＬｖｌレジスタ１５０に記憶されている値に書き換える制御を行い、また、ＲＡＭ１６に設けられたプログラムカウンタバッファ、ステータスレジスタバッファの値を、それぞれ、ＣＰＵ１５が有するプログラムカウンタ、ステータスレジスタに書き込む。
【００７７】
なお、割り込みコントローラ１４のＩｎｔＬｖｌレジスタ１４９の値を旧ＩｎｔＬｖｌレジスタ１５０に記憶されている値に書き換える制御は、処理完了通知を割り込みコントローラ１４に対して行うことに相当する。
【００７８】
また、プログラムカウンタは、現在ＣＰＵ１５が実行している命令のＲＡＭ１６上のアドレスを示すデータが格納される記憶領域である。またステータスレジスタは、ＣＰＵ１５のプログラムの実行状態（エラー、割り込み、正常動作等）の情報が格納される記憶領域である。
【００７９】
図１０に、ＣＰＵ１５が、タスクレベル処理用のプログラムに対応する割り込み信号を受けたときに、この割り込みベクタ１７１を介して実行するプログラム、すなわちタスク用割り込みプログラムのフローチャートを記す。
【００８０】
まずステップ３１０では、割り込み禁止処理を行う。具体的には、禁止フラグレジスタ１４８を１に書き換える命令を割り込みコントローラ１４に出力する。これによって、以降は、再び禁止フラグレジスタ１４８の値が０に書き換わるまで、割り込みコントローラ１４から, 第０〜第７割り込みレジスタ１４０〜１４７に対応する割り込み信号は出力されない。
【００８１】
続いてステップ３２０で、コンテキスト待避を行う。具体的には、現在の演算結果レジスタの内容、およびＲＡＭ１６中のテンポラリデータをスタック１６１の一部分に書き込む。なお、テンポラリデータとは、直前に実行されたプログラムが利用していた一時的な変数等の作業用データをいう。この待避の処理により、スタックポインタの値は、スタック１６１のデータが書き込まれた終端の位置のアドレスに書き換わる。
【００８２】
続いてステップ３３０では、具体的には、現在のスタックポインタの値を、ＲＡＭ１６のスタックポインタバッファに格納する。
【００８３】
続いてステップ３４０で、Ｒｅａｄｙキュー１６２から一番古いタスクＩＤを取得する。
【００８４】
上述した通り、Ｒｅａｄｙキュー１６２は、タスクレベル処理プログラムが割り当てられる第３〜第７割り込みレジスタ１４３〜１４７の数だけＦＩＦＯバッファを有している。この各ＦＩＦＯバッファは、第３〜第７割り込みレジスタ１４３〜１４７のそれぞれの割り込み信号に対応している。したがって、Ｒｅａｄｙキュー１６２は、タスクレベル処理とこのタスクレベル処理の優先度とが対応づけられた実行待ちタスク情報を有しているといえる。
【００８５】
また後述する様に、各ＦＩＦＯバッファは、対応する割り込みレジスタに割り当てられたタスクレベル処理プログラムを識別する情報、すなわちタスクＩＤが、先入れ先出し方式で格納されるようになっている。
【００８６】
ステップ３４０では、具体的には、このタスク用割り込みが実行される原因となった割り込み信号に対応するＦＩＦＯバッファから、最も早く格納されたタスクＩＤの情報を読み出し、その情報を当該ＦＩＦＯバッファから削除する。
【００８７】
ステップ３５０では、割り込み許可の処理を行う。具体的には、禁止フラグレジスタ１４８を０に書き換える命令を割り込みコントローラ１４に出力する。これによって、以降は割り込みコントローラ１４から, 第０〜第７割り込みレジスタ１４０〜１４７に対応する割り込み信号を出力することが許可される。
【００８８】
続いてステップ３６０では、該当タスクへジャンプしてタスク用割り込みの実行を終了する。具体的には、ステップ３４０で読み出したタスクＩＤに相当するタスクレベル処理のプログラムを実行し、タスク用割り込みの実行を終了する。
【００８９】
このようなタスク用割り込みを実行することで、ＣＰＵ１５は、Ｒｅａｄｙキュー１６２中の、直前に受けた割り込み信号に対応するＦＩＦＯバッファに格納された最も古いタスクＩＤに相当するタスクレベル処理用プログラムを実行する。
【００９０】
また、ステップ３１０で割り込みを禁止し、ステップ３５０で割り込みを許可することにより、ステップ３１０〜ステップ３６０の間は、第０〜第７割り込みレジスタ１４０〜１４７からの割り込み信号によってプログラムの実行が切り替わることがない。
【００９１】
なお、ＣＰＵ１５は、割り込みコントローラ１４から割り込み信号を受けたとき、タスク用割り込みプログラムの実行の他に、別途、ハードウェア処理として、プログラムカウンタの値を上記したプログラムカウンタバッファに書き込み、またステータスレジスタの値を上記したステータスレジスタバッファの値に書き込むようになっている。
【００９２】
次に、タスクレベル処理のプログラムの実行の要求を受け付けるためにＯＳＥＫ−ＯＳが提供するインターフェースであるアクティベートタスクのプログラムのフローチャートを図１１に示す。
【００９３】
まずステップ４１０で、割り込み禁止の処理を行う。これは、図９のステップ３１０と同等の処理である。
【００９４】
続いてステップ４２０で、該当タスクＩＤをＲｅａｄｙキュー１６２に登録する。該当タスクＩＤとは、アクティベートタスクを呼び出したプログラムから渡された引数に含まれるタスクの指定に対応するタスクＩＤをいう。例えば、アクティベートタスクが上述のタスクＣのステップ１６０において呼び出される場合は、該当タスクＩＤはタスクＡのタスクＩＤである。Ｒｅａｄｙキュー１６２への登録は、具体的には、Ｒｅａｄｙキュー１６２のＦＩＦＯバッファの１つに、当該タスクＩＤを格納することで実現する。当該タスクＩＤをどのＦＩＦＯバッファに格納するかは、ＲＯＭ１７から、当該タスクＩＤのタスクのプログラムに付随する割り込み優先度の情報を読み出し、その割り込み優先度がどの割り込み信号に対応しているかに基づいて特定する。
【００９５】
続いてステップ４３０では、対応するタスク用割り込みを要求する。具体的には、当該タスクに対応する割り込みレジスタに、割込みフラグ５１の値を１（オン）にセットし、割込みマスクフラグ５２の値を０（オフ）にセットする制御信号を出力する。これは、当該割り込みレジスタを指定する情報を含む割り込み信号の出力の要求を、割り込みコントローラ１４に出力することに相当する。
【００９６】
続いてステップ４４０で、割り込み許可の処理を行う。これは、図９のステップ３５０と同等の処理である。ステップ４４０の後、アクティベートタスクの処理は終了し、ＣＰＵ１５は、このアクティベートタスクの呼び出し元のプログラムの実行を続ける。
【００９７】
以上のようなアクティベートタスクのプログラムを実行することにより、ＣＰＵ１５は、タスクレベル処理のプログラムの実行の要求を呼び出し元のプログラムから受けたことに基づいて、このタスクレベル処理のタスクＩＤを、このタスクレベルの処理の割り込み優先度に対応するＦＩＦＯバッファに格納させる（ステップ４２０参照）。これによって、当該タスクレベル処理と、このタスクレベル処理の割り込み優先度とが対応づけられてＲｅａｄｙキュー１６２に記憶される。
【００９８】
更にＣＰＵ１５は、割り込みコントローラ１４に、当該タスクレベル処理に対応した割り込み信号を出力するよう要求する（ステップ４３０参照）。
【００９９】
次に、タスクレベル処理のプログラムの実行を終了し、次のプログラムの実行を開始するために用いられるターミネートタスクのプログラムのフローチャートを図１２に示す。
【０１００】
まずステップ５１０で、割り込み禁止の処理を行う。これは、図９のステップ３１０と同等の処理である。
【０１０１】
続いてステップ５２０で、スタックポインタバッファの値をスタックポインタに書き込む。これによって、スタックポインタの値は、ターミネートタスクの呼び出し元のプログラムの実行が開始する前の値、より具体的にはタスク用割り込みプログラムのステップ３２０の直後の値に戻る。
【０１０２】
続いてステップ５３０で、割り込み優先度同一のタスクＩＤがＲｅａｄｙキュー１６２中にあるか否かを判定する。具体的には、ターミネートタスクの呼び出し元のタスクレベル処理のタスクＩＤが格納されていたＲｅａｄｙキュー１６２中のＦＩＦＯバッファに、他のタスクＩＤが現在格納されているか否かを判定する。格納されていれば、続いてステップ５７０の処理を実行し、格納されていなければ、続いてステップ５４０の処理を実行する。
【０１０３】
ステップ５４０では、割り込み要求消去の信号を割り込みコントローラ１４に出力する。この割り込み要求消去の信号には、このターミネートタスクの呼び出し元のタスクレベル処理の割り込み優先度に対応する割り込みレジスタを指定する情報を含める。
【０１０４】
続いてステップ５５０では、コンテキスト復帰の処理を行う。具体的には、現在のスタックポインタの値に基づいて、ターミネートタスクの呼び出し元のタスクレベル処理の実行の直前に実行されていたタスクレベル処理についての演算結果レジスタの値やテンポラリデータを、スタック１６１から読み出して元の演算結果レジスタ、ＲＡＭ１６の位置に戻す。
【０１０５】
続いてステップ５６０で、割り込み許可の処理を行う。これは、図９のステップ３５０と同等の処理である。
【０１０６】
続いてステップ５６５では、図９のステップ２４０と同様、ＲＴＩ命令を実行し、その後ターミネートタスクの処理を終了する。
【０１０７】
ステップ５７０では、Ｒｅａｄｙキュー１６２から優先度同一で一番古いタスクＩＤを取得する。具体的には、ターミネートタスクの呼び出し元のタスクレベル処理のタスクＩＤが格納されていたＲｅａｄｙキュー１６２中のＦＩＦＯバッファから、一番早く格納されたタスクＩＤを読み出し、そのタスクＩＤを当該ＦＩＦＯバッファから消去する。
【０１０８】
続いてステップ５８０で、ステップ５５０と同様の割り込み許可の処理を行う。
【０１０９】
続いてステップ５９０では、該当タスクへジャンプしてターミネートタスクの実行を終了する。具体的には、ステップ５７０で読み出したタスクＩＤに相当するタスクレベル処理のプログラムを実行し、タスク用割り込みの実行を終了する。
【０１１０】
以上のようなターミネートタスクのプログラムを実行することで、ＣＰＵ１５は、タスクレベル処理の実行が完了するとき、このタスクレベル処理の優先度と同一の優先度に対応づけられたタスクレベル処理がＲｅａｄｙキュー１６２に記憶されている場合、当該記憶されているタスクレベル処理のうち最も古い１つを引き続き実行し（ステップ５７０、５９０参照）、そうでない場合、ＲＴＩ命令を実行する（ステップ５６５参照）。
【０１１１】
以上のようなプログラム群を実行することにより、図５に示すようなＣＰＵ１５の実行プログラムの切り替えが実現することを以下説明する。
【０１１２】
まずＣＰＵ１５がタスクＣを実行しており、割り込みコントローラ１４の第０〜第７割り込みレジスタ１４０〜１４７の割り込みマスクフラグ５２の値は、第６割り込みレジスタ１４６について０である以外は全て１であり、ＩｎｔＬｖｌレジスタ１４９の値は６（低優先タスク）であり、Ｒｅａｄｙキュー１６２にはタスクＣのタスクＩＤのみが、対応するするＦＩＦＯバッファに格納されているとする。
【０１１３】
このとき、図８のステップ１６０が実行されることにより、アクティベートタスクが実行される。このアクティベートタスクの実行により、タスクＡに割り当てられた割り込み優先度に対応するＲｅａｄｙキュー１６２のＦＩＦＯバッファに、タスクＡのタスクＩＤが格納され（図１１のステップ４２０参照）、更に、当該割り込み優先度に対応する第４割り込みレジスタ１４４の割り込みフラグ５１および割り込みマスクフラグ５２がそれぞれ１および０に変更される（ステップ４３０参照）。この段階が図５の矢印６１のタイミングに相当する。
【０１１４】
これによって、割り込みコントローラ１４は、第４割り込みレジスタ１４４に対応する割り込み優先度の要求を受けている状態となる。そして割り込みコントローラ１４は、割り込みフラグ５１が１、割り込みマスクフラグ５２が０となっている割り込みレジスタは、第４割り込みレジスタ１４４、第６割り込みレジスタ１４６であると特定する。そして割り込みコントローラ１４は、これらの割り込みレジスタの割り込み優先度５３を比較して、第４割り込みレジスタ１４４が最も優先度が高いことを特定する。更に割り込みコントローラ１４は、第４割り込みレジスタ１４４の割り込み優先度５３の値がＩｎｔＬｖｌレジスタ１４９の値より小さいと判定し、この判定に基づいて、旧ＩｎｔＬｖｌレジスタ１５０の値を現在のＩｎｔＬｖｌレジスタ１４９の値である６に書き換え、ＩｎｔＬｖｌレジスタ１４９の値を現在の第４割り込みレジスタ１４４の割り込み優先度５３の値である４に書き換える。割り込みコントローラ１４は更に、第４割り込みレジスタ１４４に対応する割り込み信号をＣＰＵ１５に出力する。
【０１１５】
タスクＣを実行中だったＣＰＵ１５は、この割り込み信号を受けると、プログラムカウンタ、ステータスレジスタの値をそれぞれプログラムカウンタバッファ、ステータスレジスタバッファに待避すると共に、割り込みベクタ１７１を介して図１０に示したタスク用割り込みプログラムを実行する。そして、Ｒｅａｄｙキュー１６２の当該割り込み信号に対応するＦＩＦＯバッファに格納された一番古いタスクＩＤ、すなわちタスクＡのタスクＩＤを取り出して消去し、当該タスクＩＤのタスク、すなわちタスクＡを実行する。この段階が図５の矢印６２のタイミングとなる。
【０１１６】
その後、タスクＡの実行が終了するとき、図７のステップ１４０が実行される。すると、ターミネートタスクの実行が始まり、呼び出し元のタスクＡに対応するＦＩＦＯバッファが空であることを判定され（図１２のステップ５３０参照）、この判定に基づいてコンテキストの復帰が行われる（ステップ５５０参照）、これによって、ＣＰＵ１５の演算結果レジスタ等、およびＲＡＭ１６のテンポラリデータが、タスクＣの中断時のものに戻る。続いてＣＰＵ１５から割り込みコントローラ１４に割り込み要求消去信号が出力される（ステップ５４０参照）。これによって割り込みコントローラ１４では第４割り込みレジスタ１４４の割り込みマスクフラグ５２が１となる。
【０１１７】
そしてＣＰＵ１５がＲＴＩ命令を実行する（ステップ５６５参照）。これによって、プログラムカウンタ、ステータスレジスタの値が、タスクＣの中断時の値に戻り、ＩｎｔＬｖｌレジスタ１４９の値は旧ＩｎｔＬｖｌレジスタ１５０の値、すなわち６に戻る。続いて割り込みコントローラ１４は、割り込みフラグ５１が１であり割り込みマスクフラグ５２が０である割り込みレジスタは第６割り込みレジスタ１４６のみであることを判定する。更に割り込みコントローラ１４は、第６割り込みレジスタ１４６の割り込み優先度５３の値とＩｎｔＬｖｌレジスタ１４９の値とが同じであることに基づき、ＣＰＵ１５に割り込み信号を出力しない。
【０１１８】
ＣＰＵ１５は、プログラムカウンタの値の位置からタスクＣの実行を再開する。この段階が図５の矢印６３のタイミングとなる。
【０１１９】
また、タスクＣの実行中に、例えばクランクセンサ２３からのパルス信号を割り込みコントローラ１４が受けると、そのパルス信号に対応した割り込みレジスタ（ここでは第１割り込みレジスタ１４１とする）の割り込みフラグ５１の値を１（オン）にセットする。
【０１２０】
これによって、割り込みコントローラ１４は、第１割り込みレジスタ１４１に対応する割り込み優先度の要求を受けている状態となる。そして割り込みコントローラ１４は、割り込みフラグ５１が１、割り込みマスクフラグ５２が０となっている割り込みレジスタは、第１割り込みレジスタ１４１および第６割り込みレジスタ１４６であると特定する。そして割り込みコントローラ１４は、これらの割り込みレジスタの割り込み優先度５３を比較して、第１割り込みレジスタ１４１が最も優先度が高いことを特定する。更に割り込みコントローラ１４は、第１割り込みレジスタ１４１の割り込み優先度５３の値がＩｎｔＬｖｌレジスタ１４９の値より小さいと判定し、この判定に基づいて、旧ＩｎｔＬｖｌレジスタ１５０の値を現在のＩｎｔＬｖｌレジスタ１４９の値である６に書き換え、ＩｎｔＬｖｌレジスタ１４９の値を現在の第１割り込みレジスタ１４１の割り込み優先度５３の値である１に書き換える。割り込みコントローラ１４は更に、第１割り込みレジスタ１４１に対応する割り込み信号をＣＰＵ１５に出力する。
【０１２１】
タスクＣを実行中だったＣＰＵ１５は、この割り込み信号を受けると、プログラムカウンタ、ステータスレジスタの値をそれぞれプログラムカウンタバッファ、ステータスレジスタバッファに待避すると共に、割り込みベクタ１７１を介して割り込みＸのプログラムの実行を開始する。この段階が図５の矢印６４のタイミングとなる。
【０１２２】
この後、割り込みＸにおける図９のステップ２２０が実行されることにより、アクティベートタスクが実行される。このアクティベートタスクの実行により、タスクＢに割り当てられた割り込み優先度に対応するＲｅａｄｙキュー１６２のＦＩＦＯバッファに、タスクＢのタスクＩＤが格納され（図１１のステップ４２０参照）、更に、当該割り込み優先度に対応する第５割り込みレジスタ１４５の割り込みフラグ５１および割り込みマスクフラグ５２をそれぞれ１および０に変更させる（ステップ４３０参照）。この段階が図５の矢印６５のタイミングに相当する。
【０１２３】
これによって、割り込みコントローラ１４は、第５割り込みレジスタ１４５に対応する割り込み優先度の要求を受けている状態となる。そして割り込みコントローラ１４は、割り込みフラグ５１が１、割り込みマスクフラグ５２が０となっている割り込みレジスタは、第１割り込みレジスタ１４１、第５割り込みレジスタ１４５、第６割り込みレジスタ１４６であると特定する。そして割り込みコントローラ１４は、これらの割り込みレジスタの割り込み優先度５３を比較して、第１割り込みレジスタ１４１が最も優先度が高いことを特定する。更に割り込みコントローラ１４は、第１割り込みレジスタ１４１の割り込み優先度５３の値がＩｎｔＬｖｌレジスタ１４９の値と同じであると判定する。従って、この時点では割り込みコントローラ１４からＣＰＵ１５に割り込み信号は出力されない。すなわち、タスクＢよりも割り込みＸの方が優先度が高いので、割り込みＸ実行中は、タスクＢは実行されない。
【０１２４】
その後割り込みＸの実行が終了するとき、ＣＰＵ１５がＲＴＩ命令を実行する（図９のステップ２４０参照）。これによって、プログラムカウンタ、ステータスレジスタの値が、タスクＣの２度目の中断時の値に戻り、ＩｎｔＬｖｌレジスタ１４９の値は旧ＩｎｔＬｖｌレジスタ１５０の値、すなわち６に戻る。
【０１２５】
続いて割り込みコントローラ１４は、割り込みフラグ５１が１であり割り込みマスクフラグ５２が０である割り込みレジスタは第５割り込みレジスタ１４５および第６割り込みレジスタ１４６のみであることを判定し、さらに第５割り込みレジスタ１４５の割り込み優先度５３の値の方が第６割り込みレジスタ１４６の割り込み優先度５３の値よりも小さいことを判定する。更に割り込みコントローラ１４は、第５割り込みレジスタ１４５の割り込み優先度５３の値の方がＩｎｔＬｖｌレジスタ１４９の値より小さいことに基づき、ＣＰＵ１５に第５割り込みレジスタ１４５に対応する割り込み信号を出力する。
【０１２６】
この割り込み信号を受けたＣＰＵ１５は、プログラムカウンタ、ステータスレジスタの値をそれぞれプログラムカウンタバッファ、ステータスレジスタバッファに待避すると共に、割り込みベクタ１７１を介して図１０に示したタスク用割り込みプログラムを実行する。そして、Ｒｅａｄｙキュー１６２の当該割り込み信号に対応するＦＩＦＯバッファに格納された一番古いタスクＩＤ、すなわちタスクＢのタスクＩＤを取り出して消去し、当該タスクＩＤのタスク、すなわちタスクＢを実行する。この段階が図５の矢印６６のタイミングとなる。
【０１２７】
その後、タスクＢの実行が終了するとき、ターミネートタスクが実行される。そして、矢印６３のタイミングでタスクＡが終了してタスクＣの実行が再開する場合において、タスクＡをタスクＢに置き換えたものと同等の作動により、矢印６７のタイミングで、タスクＢの処理が終了し、タスクＣの処理が再開する。
【０１２８】
以上のようにして、図５に示したＣＰＵ１５の実行プログラム切り替えの処理が実現する。
【０１２９】
この図５に示した切り替えにおいて、タスクＣからタスクＡへの切り替えは、矢印６１のタイミングにおけるアクティベートタスクにおいて、割り込みコントローラ１４に割り込み信号出力の要求を行うことによって実現される。従来のアクティベートタスクの場合、ソフトウェア処理としてＣＰＵ１５がタスクレベル処理間の優先度を比較し、その結果に基づいて実行するタスクレベル処理を実現するのに対し、本実施形態では割り込みコントローラ１４に割り込み優先度の比較を行わせるようになっている。
【０１３０】
またタスクＡからタスクＣの実行に戻る場合、割り込みＸからタスクＢの実行に切り替わる場合およびタスクＢからタスクＣの実行に戻る場合、ターミネートタスクにおいて（図１２のステップ５６５参照）、または直接（図９のステップ２４０参照）、ＣＰＵ１５がＲＴＩ命令を実行する。これにより、割り込みコントローラ１４が割り込み優先度の比較を行い、その比較結果に基づいてＣＰＵ１５が実行タスクの切り替えを行う。従来のターミネートタスクの場合においても、従来のアクティベートタスク同様、ソフトウェア処理としてＣＰＵ１５がタスクレベル処理間の優先度を比較し、その結果に基づいて実行するタスクレベル処理を実現するのに対し、本実施形態では割り込みコントローラ１４に割り込み優先度の比較を行わせるようになっている。
【０１３１】
このように、ＣＰＵ１５は、タスクレベル処理の実行の要求があるとき、アクティベートタスクを実行することで、割り込みコントローラ１４に当該タスクレベルの処理に対応した割り込み信号を出力するよう要求する。そして、この要求を受けた割り込みコントローラ１４は、受けた要求のうち最も優先度の高いものを特定して、それの割り込み優先度５３の値がＩｎｔＬｖｌレジスタ１４９の値より低ければ、その特定した要求についての割り込み信号を出力する。そしてＣＰＵは、この割り込みコントローラ１４からの割り込み信号に対応した処理を実行する。したがって、ＣＰＵ１５は、タスクレベルの処理の優先度の比較を割り込みコントローラ１４に任せることになる。それゆえ、複数のタスクを切り替えて実行するＣＰＵ１５の、タスクスケジューリングのために費やす時間の低減が、割り込みコントローラ１４の多重割り込み機能の利用によって実現される。
【０１３２】
またＣＰＵ１５は、タスクレベル処理の実行が完了するとき、ＲＴＩ命令を実行する。すると、割り込みコントローラ１４、出力を要求されている複数の割り込み信号のうち最も優先度の高いものを特定し、それの割り込み優先度５３の値がＩｎｔＬｖｌレジスタ１４９の値より低ければ、それを出力する。したがって、ＣＰＵは、タスクレベルの処理の優先度の比較を割り込みコントローラ１４に任せることになる。
【０１３３】
また、図５の例において、例えばタスクＢの実行中に、タスクＢと同じ割り込み優先度に割り当てられたタスクＤを引数とするアクティベートタスクが呼び出された場合について以下説明する。この場合、アクティベートタスクの実行により、タスクＢに対応するＦＩＦＯバッファにタスクＤのタスクＩＤが格納される。そして、タスクＢの終了時、ターミネートタスクの実行において、図１２のステップ５３０で、タスクＢと同じ割り込み優先度のＦＩＦＯバッファに他のタスクＩＤがあると判定する。そして、ステップ５７０で当該ＦＩＦＯバッファから当該タスクＤのタスクＩＤを読み出し、ステップ５９０で、当該タスクＤの実行を開始する。
【０１３４】
このように、１つのタスク処理用プログラムが終了する時に、続いて同じ割り込み優先度のＦＩＦＯバッファに別のタスク処理用プログラムのタスクＩＤが格納されている場合は、当該１つのタスク処理用プログラムのコンテキストの待避、割り込みコントローラ１４への割り込み要求、割り込み要求消去等を行うことなく、続いて当該別のタスク処理用プログラムを実行する。これは、現在実行中のタスク処理用プログラムと同じ優先度のタスク処理用プログラムのタスクＩＤがＦＩＦＯバッファにあるということは、このＦＩＦＯバッファにあるタスク処理用のプログラムは必ずその先頭から実行が開始されるからである。このようにすることで、ＣＰＵ１５における、コンテキストの待避等による処理の負荷が軽減される。
【０１３５】
また、本実施形態においては、割り込みコントローラ１４の割り込みマスクフラグ５２の値としては、１または０のいずれかしかない。したがって、ある割り込み優先度のタスクレベル処理について割り込みコントローラ１４が割り込み信号出力の要求を受けているときに、更に同じ割り込み優先度のタスクレベル処理について割り込み信号出力の要求を受けても、割り込みマスクフラグ５２の値に変化がない。それゆえ、仮にその当該割り込み優先度のタスクレベル処理の１つが終了する度に、図１２のステップ５４０と同等の処理によって、必ず対応する割り込みレジスタの割り込みマスクフラグ５２が１に変化するようになっていたとするなら、割り込みコントローラ１４においては、後の割り込み信号出力の要求はなかったことになってしまう。
【０１３６】
しかし、本実施形態のように、同じ割り込み優先度のタスクレベル処理が多重に要求されている場合は、そのタスクレベル処理の１つが完了するときも、割り込み要求消去を行わず、後に要求された方のタスクレベル処理を続けて実行するようにすることで、このような問題は回避される。
（第２実施形態）
次に、本発明の第２実施形態について説明する。本実施形態が第１実施形態と異なるのは、ＣＰＵ１５が、割り込みコントローラ１４のＩｎｔＬｖｌレジスタ１４９を書き換える処理を、現在実行中のタスクレベル処理の優先度を擬似的に特定の優先度に高めるために、実行することである。
【０１３７】
現在実行中のタスクレベル処理の優先度を擬似的に特定の優先度に高めることが必要となる具体的なケースとしては、例えば、複数の異なる優先度のタスクレベル処理が、エンジンＥＣＵ１の同じリソースを用いるようになっている場合、すなわち複数の異なる優先度のタスクレベル処理によるリソースの共有がある場合が考えられる。ここで、エンジンＥＣＵ１のリソースとは、マイクロコンピュータ１２のＲＡＭ１６、または図示しないＥＥＰＲＯＭの所定の領域、外部入出力回路１１、図示しない車両内の他のＥＣＵと通信するための通信装置等、エンジンＥＣＵ１においてＣＰＵ１５が利用する物理デバイスをいう。
【０１３８】
このような場合においては、割り込み優先度の低い方のタスクレベル処理が、自身より割り込み優先度が高い他のタスクレベル処理の実行が要求されることによって、自身が利用しているリソースを、その利用の途中で当該他のタスクレベル処理に利用されてしまうことを防ぎたい場合がある。すなわち、タスクレベル処理が、共有されるリソースを排他的に利用したい場合がある。
【０１３９】
本実施形態のＯＳＥＫ−ＯＳでは、このような場合、これらタスクレベル処理間でのリソースへのアクセスの競合を避けて、当該リソースの排他的利用を実現するためのインターフェースとして、リソース取得プログラム、リソース解放プログラムを提供している。
【０１４０】
割り込み優先度の低い方のタスクレベル処理は、排他的に利用したいリソースの利用開始時に、このリソース取得プログラムを呼び出す。また、利用を終えた当該リソースを他のタスクレベル処理が利用できるようにするために、このリソース解放プログラムを呼び出す。なお、リソース取得プログラム、リソース解放プログラムを呼び出すときは、引数として、排他利用の開始および終了の対象となるリソースの指定が、渡されるようになっている。
【０１４１】
図１３に、リソース取得プログラムのフローチャートを示す。
【０１４２】
リソース取得プログラムが呼び出されると、まずＣＰＵ１５は、ステップ６１０で、割り込み禁止の処理を行う。これは、図９のステップ３１０と同等の処理である。
【０１４３】
続いてステップ６２０で、割り込みコントローラ１４のＩｎｔＬｖｌレジスタ１４９の現在の値をＲＡＭ１６に記憶する。
【０１４４】
続いてステップ６３０で、ＩｎｔＬｖｌレジスタ１４９の値を、取得するリソースのレベルの値に書き換える。取得するリソースとは、今から排他利用したいリソースをいい、リソース取得プログラムの呼び出し元から引数として渡されたリソースをいう。リソースのレベルとは、エンジンＥＣＵ１の各リソースに割り当てられた割り込み優先度の値である。この値は、当該リソースを共有するタスクレベル処理の割り込み優先度のうち、最も高い割り込み優先度の値と同じである。各リソースのレベルは、エンジンＥＣＵ１の設計時にあらかじめ定められ、ＲＯＭ１７にその情報が記憶されている。
【０１４５】
続いてステップ６４０で、割り込み許可を行う。これは、図９のステップ３５０と同等の処理である。そして、このプログラムの実行は終了し、ＣＰＵ１５は、呼び出し元のプログラムの実行を再開する。
【０１４６】
このようなリソース取得プログラムをＣＰＵ１５が実行することで、ＩｎｔＬｖｌレジスタ１４９は、現実に実行されているタスクレベル処理の割り込み優先度より優先度の高いことを示す値を記憶するようになる。
【０１４７】
このとき、ＣＰＵ１５から割り込みコントローラ１４に対して、当該リソースを利用する他のタスクレベル処理に対応する割り込み信号の出力要求が為された場合を考える。このとき、ＩｎｔＬｖｌレジスタ１４９の値は、この割り込み信号の割り込み優先度と同じ、またはそれよりも高い優先度を示す。なぜなら、ＩｎｔＬｖｌレジスタ１４９の値は、当該リソースを共有するタスクレベル処理の優先度のうち、最も高い優先度を示す値となっているので、これより優先度が高い値を示し、かつ当該リソースを利用するタスクレベル処理は存在しないからである。
【０１４８】
従って、ＩｎｔＬｖｌレジスタ１４９と当該割り込み信号に対応する割り込みレジスタの割り込み優先度５３の値との比較の結果、割り込みコントローラ１４から割り込み信号が出力されない。すなわち、リソース取得プログラムの呼び出し元のタスクレベル処理は、当該リソースを、他のタスクレベル処理による利用を排した形で、利用することができるようになる。
【０１４９】
次に、図１４に、リソース解放プログラムのフローチャートを示す。
【０１５０】
リソース解放プログラムが呼び出されると、まずＣＰＵ１５は、ステップ６５０で、割り込み禁止の処理を行う。これは、図９のステップ３１０と同等の処理である。
【０１５１】
続いてステップ６６０で、リソース取得時にＲＡＭ１６に記憶したＩｎｔＬｖｌレジスタ１４９の値を、ＩｎｔＬｖｌレジスタ１４９に書き込む。
【０１５２】
続いてステップ６７０で、割り込み許可を行う。これは、図９のステップ６７０と同等の処理である。そして、このプログラムの実行は終了し、ＣＰＵ１５は、呼び出し元のプログラムの実行を再開する。
【０１５３】
このようなリソース解放プログラムを実行することで、ＩｎｔＬｖｌレジスタ１４９の値はリソース取得前の値に戻る。これにより、リソース取得プログラムが呼び出されてから、リソース解放プログラムが呼び出されるまでの間に、より割り込み優先度が高く、かつ当該リソースを利用するタスクレベル処理に対応する割り込み信号の出力要求があった場合、リソース解放プログラムの実行後すぐ、そのタスクレベル処理が実行されることになる。すなわち、他のタスクレベル処理が当該リソースを利用できるようになる。
（第３実施形態）
次に、本発明の第３実施形態について説明する。なお、以下では、本実施形態が第２実施形態と異なる部分についてのみ詳細に説明する。本実施形態は、現在実行中のタスクレベル処理の優先度を擬似的に特定の優先度に高めるためのインターフェースとして、ＯＳＥＫ−ＯＳがリソース取得プログラム、リソース解放プログラムを提供する点は、第２実施形態と同じである。
【０１５４】
ただし、本実施形態のリソース取得プログラムは、第２実施形態と異なり、割り込みコントローラ１４の割り込みレジスタの割り込み優先度５３の値を現在実行中のタスクレベル処理の優先度以下の優先度に書き換えることで、当該リソースの排他的利用を実現するようになっている。
【０１５５】
なお、このために本実施形態の割り込みコントローラ１４は、ＣＰＵ１５の書き換え制御によって、第３〜第７割り込みレジスタ１４３〜１４７の割り込み優先度５３の値が書き換わるようになっている。また割り込みコントローラ１４は、ＣＰＵ１５の制御によって割り込み優先度５３の値が書き換わったことを検出すると、第１実施形態において説明した、ＣＰＵ１５または外部入出力回路１１から割り込み信号の出力の要求を信号として受けて割り込みフラグ５１等を書き換えた後の作動と同等の作動を行う。
【０１５６】
図１５に、リソース取得プログラムのフローチャートを示す。
【０１５７】
リソース取得プログラムが呼び出されると、まずＣＰＵ１５は、ステップ７０５で、割り込み禁止の処理を行う。これは、図９のステップ３１０と同等の処理である。
【０１５８】
続いてステップ７１０で、現在実行しているタスクレベル処理の割り込み優先度をＲＡＭ１６に記憶する。
【０１５９】
続いてステップ７１５では、取得するリソースの優先度の値が７（アイドルタスクの優先度に相当する）であるか否かを判定する。７であれば続いてステップ７７５の処理を実行し、７でなければ続いてステップ７２０の処理を実行する。
【０１６０】
ステップ７２０では、取得するリソースの優先度の値が６（低優先タスクの優先度に相当する）であるか否かを判定する。６であれば続いてステップ７６５の処理を実行し、６でなければ続いてステップ７２５の処理を実行する。
【０１６１】
ステップ７２５では、取得するリソースの優先度の値が５（中優先タスクの優先度に相当する）であるか否かを判定する。５であれば続いてステップ７５５の処理を実行し、６でなければ続いてステップ７３０の処理を実行する。
【０１６２】
ステップ７３０では、取得するリソースの優先度の値が４（高優先タスクの優先度に相当する）であるか否かを判定する。４であれば続いてステップ７４５の処理を実行し、６でなければ続いてステップ７３５の処理を実行する。
【０１６３】
ステップ７３５では、ステップ７１０でＲＡＭ１６に記憶した現在実行しているタスクレベル処理の割り込み優先度の値が３より大きい（最高優先タスクより優先度が低い）か否かを判定する。３より大きければ続いてステップ７４０の処理を実行し、３以下であれば続いてステップ７７５の処理を実行する。
【０１６４】
ステップ７４０では、最高優先タスク用割り込み優先度の値を７にする。具体的には第３割り込みレジスタ１４３の割り込み優先度５３の値を７に書き換える制御を行う。
【０１６５】
ステップ７４５では、ステップ７１０でＲＡＭ１６に記憶した現在実行しているタスクレベル処理の割り込み優先度の値が４より大きい（高優先タスクより優先度が低い）か否かを判定する。４より大きければ続いてステップ７５０の処理を実行し、４以下であれば続いてステップ７７５の処理を実行する。
【０１６６】
ステップ７５０では、高優先タスク用割り込み優先度の値を７にする。具体的には第４割り込みレジスタ１４４の割り込み優先度５３の値を７に書き換える制御を行う。
【０１６７】
ステップ７５５では、ステップ７１０でＲＡＭ１６に記憶した現在実行しているタスクレベル処理の割り込み優先度の値が５より大きい（中優先タスクより優先度が低い）か否かを判定する。５より大きければ続いてステップ７６０の処理を実行し、５以下であれば続いてステップ７７５の処理を実行する。
【０１６８】
ステップ７６０では、中優先タスク用割り込み優先度の値を７にする。具体的には第５割り込みレジスタ１４５の割り込み優先度５３の値を７に書き換える制御を行う。
【０１６９】
ステップ７６５では、ステップ７１０でＲＡＭ１６に記憶した現在実行しているタスクレベル処理の割り込み優先度の値が６より大きい（低優先タスクより優先度が低い）か否かを判定する。６より大きければ続いてステップ７７０の処理を実行し、６以下であれば続いてステップ７７５の処理を実行する。
【０１７０】
ステップ７７０では、低優先タスク用割り込み優先度の値を７にする。具体的には第６割り込みレジスタ１４６の割り込み優先度５３の値を７に書き換える制御を行う。
【０１７１】
ステップ７７５では、割り込み許可を行う。これは、図９のステップ３５０と同等の処理である。ステップ８５０の後、このプログラムの実行は終了し、ＣＰＵ１５は、呼び出し元のタスクレベル処理の実行を再開する。
【０１７２】
このようなリソース取得プログラムをＣＰＵ１５が実行することで、現在実行しているタスクレベル処理（すなわちリソース取得プログラムの呼び出し元のタスクレベル処理）の割り込み優先度より優先度が高く、かつ取得するリソースの優先度と比べて優先度が同等または低い割り込み信号に対応する割り込みレジスタの割り込み優先度５３の値を７（最も優先度の低いアイドルタスク）に変更する。
【０１７３】
このとき、ＣＰＵ１５から割り込みコントローラ１４に対して、当該リソースを利用する他のタスクレベル処理に対応する、より優先度の高い割り込み信号の出力要求が為された場合を考える。このとき、当該割り込み信号に対応する割り込みレジスタの割り込み優先度５３の値は７となっている。また、ＩｎｔＬｖｌレジスタ１４９の値は、リソース取得プログラムの呼び出し元のタスクレベル処理の優先度の値となっている。
【０１７４】
従って、ＩｎｔＬｖｌレジスタ１４９と当該割り込み信号に対応する割り込みレジスタの割り込み優先度５３の値との比較の結果、割り込みコントローラ１４からは割り込み信号が出力されない。すなわち、リソース取得プログラムの呼び出し元のタスクレベル処理は、当該リソースを、他のタスクレベル処理による利用を排した形で、利用することができるようになる。
【０１７５】
次に、図１６に、本実施形態におけるリソース解放プログラムのフローチャートを示す。このリソース取得プログラムが呼び出されると、まずＣＰＵ１５は、ステップ８０５で、割り込み禁止の処理を行う。これは、図９のステップ３１０と同等の処理である。
【０１７６】
続いて、ステップ８１０では、リソース取得時に記憶した優先度の値、すなわち、直前のリソース解放プログラムのステップ７１０の実行においてＲＡＭ１６に記憶したＩｎｔＬｖｌレジスタ１４９の値が３（最高優先タスク）であるか否かを判定する。３であれば続いてステップ８５０の処理を実行し、３でなければ続いてステップ８１５の処理を実行する。
【０１７７】
ステップ８１５では、リソース取得時に記憶した優先度の値が４（高優先タスク）であるか否かを判定する。４であれば続いてステップ８４５の処理を実行し、４でなければ続いてステップ８２０の処理を実行する。
【０１７８】
ステップ８２０では、リソース取得時に記憶した優先度の値が５（中優先タスク）であるか否かを判定する。５であれば続いてステップ８４０の処理を実行し、５でなければ続いてステップ８２５の処理を実行する。
【０１７９】
ステップ８２５では、リソース取得時に記憶した優先度の値が６（低優先タスク）であるか否かを判定する。６であれば続いてステップ８３５の処理を実行し、４でなければ続いてステップ８３０の処理を実行する。
【０１８０】
ステップ８３０では、低優先タスク用割り込み優先度の値、すなわち、第６割り込みレジスタ１４６の割り込み優先度５３の値を６に書き換える。
【０１８１】
ステップ８３５では、中優先タスク用割り込み優先度の値、すなわち、第５割り込みレジスタ１４５の割り込み優先度５３の値を５に書き換える。
【０１８２】
ステップ８４０では、高優先タスク用割り込み優先度の値、すなわち、第４割り込みレジスタ１４４の割り込み優先度５３の値を４に書き換える。
【０１８３】
ステップ８４５では、最高優先タスク用割り込み優先度の値、すなわち、第３割り込みレジスタ１４３の割り込み優先度５３の値を３に書き換える。
【０１８４】
ステップ８５０では、割り込み許可を行う。これは、図９のステップ３５０と同等の処理である。そして、このプログラムの実行は終了し、ＣＰＵ１５は、呼び出し元のタスクレベル処理の実行を再開する。
【０１８５】
このようなリソース取得プログラムをＣＰＵ１５が実行することで、リソース解放プログラムの呼び出し元のタスクレベル処理の割り込み優先度より優先度が高く、かつ取得するリソースの優先度と比べて優先度が同等または低い割り込み信号に対応する割り込みレジスタの割り込み優先度５３の値を、リソース取得プログラムが呼び出される前の値に戻す。その結果、第３〜第７割り込みレジスタ１４３〜１４７の割り込み優先度５３の値は、それぞれ３、４、５、６、７となる。これにより、リソース取得プログラムが呼び出されてから、リソース解放プログラムが呼び出されるまでの間に、より割り込み優先度が高く、かつ当該リソースを利用するタスクレベル処理に対応する割り込み信号の出力要求があった場合、リソース解放プログラムの実行後すぐに、そのタスクレベル処理が実行されることになる。すなわち、他のタスクレベル処理が当該リソースを利用できるようになる。
（第４実施形態）
次に、本発明の第４実施形態について説明する。以下、本実施形態が第１実施形態と異なる部分についてのみ詳細に説明する。第１実施形態においては、同一の割り込み信号に複数種類のタスクレベル処理が割り当てられているが、本実施形態では、１つの割り込み信号にはただ１つタスクレベル処理が割り当てられており、かつ、１つの優先度にはただ１つのタスクレベル処理が割り当てられている。従って、ＣＰＵ１５において実行されるタスクレベル処理の総数と、タスクレベル処理用の割り込みレジスタの数とは等しくなる。
【０１８６】
このように、タスクレベル処理毎に優先度および割り込み信号があるような場合に、多重割り込み機能を利用したタスクスケジューリングを行うため、本実施形態の割り込みコントローラ１４における割り込みレジスタのデータの格納形式は、図１７のようになっている。
【０１８７】
すなわち、割り込みコントローラ１４のタスクレベル処理用の、割り込みレジスタはそれぞれ、割り込みフラグ５１、割り込みマスクフラグ５２、割り込み優先度５３、カウンタ５４のデータ領域を有している。割り込みフラグ５１、割り込みマスクフラグ５２、割り込み優先度５３に格納されるデータは、第１実施形態と同様である。
【０１８８】
本実施形態の割り込みコントローラ１４の作動は、第１実施形態の割り込みコントローラ１４と同じである。ただし、割り込み信号出力の要求を受けた場合、および割り込み要求消去の信号を受けたときの、割り込みレジスタに格納された値の書き換えの作動は、以下のようになっている。
【０１８９】
すなわち、割り込みコントローラ１４は、ＣＰＵ１５からタスクレベル処理用の割り込み信号の出力の要求を信号として受けると、その要求信号に含まれる情報から、その要求信号が、第０〜第７割り込みレジスタ１４０〜１４７のうちどの割り込みレジスタを指定しているかを特定し、その特定した割り込みレジスタのカウンタ５４に格納されている値を１段階分（例えば１）だけ増加させる。そしてその際、当該割り込み信号の出力の要求に基づいて、割り込みフラグ５１および割り込みマスクフラグ５２の値がそれぞれ１（オン）および０（オフ）にセットされる。
【０１９０】
また割り込みコントローラ１４は、ＣＰＵ１５または外部入出力回路１１から割り込み要求消去の信号を受けると、その要求信号に含まれる情報から、その要求信号が、第０〜第７割り込みレジスタ１４０〜１４７のうちどの割り込みレジスタを指定しているかを特定し、その特定した割り込みレジスタのカウンタ５４に格納されている値を１段階分だけ減少させる。そして、カウンタ５４の値が、当該割り込みレジスタに対応する割り込み信号の要求を受けていない状態を示す値（例えば０）であれば、割り込みフラグ５１の値を０に書き換える。
【０１９１】
このような割り込みコントローラ１４の作動によって、カウンタ５４は、各割り込み信号毎の計数データを記憶する計数記憶媒体として機能する。
【０１９２】
また、本実施形態においては、ＲＡＭ１６にＲｅａｄｙキュー１６２の領域はない。
【０１９３】
これに対応して、ＣＰＵ１５は、図１０に示したタスク用割り込みの実行において、本実施形態においては、ステップ３４０の処理は実行せず、ステップ３６０において、受けた割り込み信号に対応する唯一のタスクの実行を開始するようになっている。
【０１９４】
また、ＣＰＵ１５は、図１１に示したアクティベートタスクの実行において、ステップ４２０の処理を実行しない。
【０１９５】
また、ＣＰＵ１５は、図１２に示したターミネートタスクの実行において、ステップ５３０、５７０、５８０、５９０の処理は実行せず、ステップ５２０に続いてステップ５４０の処理を実行するようになっている。
【０１９６】
このようになっていることで、割り込みコントローラ１４は、あるタスクレベル処理に対応した割り込み信号の出力要求を受けると、その割り込み信号についての計数データの値を１段階増加させ、またある割り込み信号を演算装置に出力した後の規定のタイミング、具体的には図１２のステップ５４０の処理を実行するタイミング、その割り込み信号についての計数データの値を１段階減少させるようになる。
【０１９７】
このようにすることで、ＣＰＵ１５は、同一のタスクレベル処理のプログラムが複数起動要求された場合でも、このカウンタ５４にその実行要求の回数が反映されるので、Ｒｅａｄｙキュー１６２を用いずに、これら複数の同じタスクレベル処理についてのタスクスケジューリングを実現することができる。また、本実施形態においては、ＣＰＵ１５は、同一タスクレベル処理の実行要求のソフト的な計数、（具体的には上記したステップ３４０、３６０、５７０の処理を）行う必要がないので、ＣＰＵ１５の処理負荷が低減される。また、割り込み信号の要求をする必要があるか否かの判定（具体的には上記したステップ５３０の判定処理）を行う必要がないので、ＣＰＵ１５の処理負荷が低減される。
【０１９８】
なお、割り込み信号を演算装置に出力した後の規定のタイミングとしては、当該割り込み信号を出力した時点であってもよい。
（他の実施形態）
なお、上記した各実施形態において、図１０のステップ３２０のコンテキスト待避処理、図１２のステップ５５０のコンテキスト復帰処理においては、ＣＰＵ１５のレジスタとＲＡＭ１６との間のデータの移動のための読み出し、書き込み処理が行われているが、必ずしもこのようになっている必要はない。
【０１９９】
例えば、従来のマイクロコンピュータにおいては、割り込み信号の発生時における待避、コンテキスト待避、コンテキスト復帰の処理のために、複数のＣＰＵのレジスタセットを有し、割り込み発生時のコンテキスト待避においては、用いるレジスタセットを現在とは別のものに切り替え、コンテキスト復帰においては、用いるレジスタセットを元に戻すようにしているものがある。
【０２００】
上記した実施形態におけるマイクロコンピュータ１２として、このような複数のレジスタセットを有するマイクロコンピュータを用いて、上記したステップ３２０において、用いるレジスタセットを現在とは別の使用していないレジスタセットに切り替え、ステップ５７０においては、用いるレジスタセットを、１つ前に用いていたレジスタセットに切り替えるようにすることができる。このようにすれば、コンテキスト待避および復帰の際に、ＲＡＭ１６とレジスタとの間でのデータの移動のための処理が不要となる。
【０２０１】
なお、上記した各実施形態において、割り込みコントローラ１４が多重割り込み手段に相当する。
【０２０２】
また、図９〜図１６に示したプログラムが、割り込み依頼プログラムに相当する。
【０２０３】
また、ＣＰＵ１５が、図１５に示したアクティベートタスクを実行することで、割り込み要求手段として機能する。
【０２０４】
また、ＣＰＵ１５が、図１０に示したタスク用割り込みを実行することで、割り込み対応手段として機能する。
【０２０５】
また、ＣＰＵ１５が、図１２に示したターミネートタスクを実行することで、終了処理手段として機能する。
【０２０６】
また、ＣＰＵ１５が、図１３、図１４に示したリソース取得プログラム、リソース解放プログラムを実行することで、現在優先度書き換え手段として機能する。
【０２０７】
また、ＣＰＵ１５が、図１５、図１６に示したリソース取得プログラム、リソース解放プログラムを実行することで、割り込み優先度書き換え手段として機能する。
【図面の簡単な説明】
【０２０８】
【図１】エンジンＥＣＵ１の構成を示す図である。
【図２】割り込みコントローラ１４、ＣＰＵ１５、ＲＡＭ１６、ＲＯＭ１７のそれぞれにおける記憶媒体のデータ構成を示す図である。
【図３】第０〜第７割り込みレジスタ１４０〜１４７のデータの格納形式を示す図である。
【図４】図４に、割り込み優先度と、その割り込み優先度に割り当てられるプログラムの対応関係を示す。
【図５】タスクＡ、タスクＢ、タスクＣおよび割り込みＸのＣＰＵ１５における実行タイミングを表すタイミング図である。
【図６】タスクＡのフローチャートである。
【図７】タスクＢのフローチャートである。
【図８】タスクＣのフローチャートである。
【図９】割り込みＸのフローチャートである。
【図１０】タスク用割り込みプログラムのフローチャートである。
【図１１】アクティベートタスクのプログラムのフローチャートである。
【図１２】ターミネートタスクのプログラムのフローチャートである。
【図１３】第２実施形態におけるリソース取得プログラムのフローチャートである。
【図１４】第２実施形態におけるリソース解放プログラムのフローチャートである。
【図１５】第３実施形態におけるリソース取得プログラムのフローチャートである。
【図１６】第３実施形態におけるリソース解放プログラムのフローチャートである。
【図１７】第４実施形態における第０〜第７割り込みレジスタ１４０〜１４７のデータの格納形式を示す図である。
【符号の説明】
【０２０９】
１…エンジンＥＣＵ、２…エンジン、３…エンジン冷却水、４…電子スロットル、
１１…外部入出力回路、１２…マイクロコンピュータ、１４…割り込みコントローラ、
１５…ＣＰＵ、１６…ＲＡＭ、１７…ＲＯＭ、２１…イグナイタ、
２２…インジェクタ、２３…クランクセンサ、３１…水温センサ、
４１…スロットルセンサ、５１…割り込みフラグ、５２…割り込みマスクフラグ、
５３…割り込み優先度、５４…カウンタ、６１〜６６…矢印６１、
１４０…第０割り込みレジスタ、１４１…第１割り込みレジスタ、
１４２…第２割り込みレジスタ、１４３…第３割り込みレジスタ、
１４４…第４割り込みレジスタ、１４５…第５割り込みレジスタ、
１４６…第６割り込みレジスタ、１４７…第７割り込みレジスタ、
１４８…禁止フラグレジスタ、１４９…ＩｎｔＬｖｌレジスタ、
１５０…旧ＩｎｔＬｖｌレジスタ、１５１…演算結果レジスタ、
１５２…演算結果レジスタ、１６１…スタック、１６２…Ｒｅａｄｙキュー、
１６３…制御用変数領域、１７１…割り込みベクタ、１７２…プログラム、
１７３…制御用定数。
【図１】
2005276097.tif 000003
【図２】
2005276097.tif 000004
【図３】
2005276097.tif 000005
【図４】
2005276097.tif 000006
【図５】
2005276097.tif 000007
【図６】
2005276097.tif 000008
【図７】
2005276097.tif 000009
【図８】
2005276097.tif 000010
【図９】
2005276097.tif 000011
【図１０】
2005276097.tif 000012
【図１１】
2005276097.tif 000013
【図１２】
2005276097.tif 000014
【図１３】
2005276097.tif 000015
【図１４】
2005276097.tif 000016
【図１５】
2005276097.tif 000017
【図１６】
2005276097.tif 000018
【図１７】
2005276097.tif 000019