JP2005276097A - 割り込み依頼プログラムおよびマイクロコンピュータ - Google Patents

割り込み依頼プログラムおよびマイクロコンピュータ Download PDF

Info

Publication number
JP2005276097A
JP2005276097A JP2004092067A JP2004092067A JP2005276097A JP 2005276097 A JP2005276097 A JP 2005276097A JP 2004092067 A JP2004092067 A JP 2004092067A JP 2004092067 A JP2004092067 A JP 2004092067A JP 2005276097 A JP2005276097 A JP 2005276097A
Authority
JP
Japan
Prior art keywords
interrupt
priority
task
task level
register
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2004092067A
Other languages
English (en)
Other versions
JP4241462B2 (ja
Inventor
Tadaharu Nishimura
忠治 西村
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Denso Corp
Original Assignee
Denso Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Denso Corp filed Critical Denso Corp
Priority to JP2004092067A priority Critical patent/JP4241462B2/ja
Priority to DE102005013913A priority patent/DE102005013913A1/de
Priority to US11/089,309 priority patent/US7269678B2/en
Publication of JP2005276097A publication Critical patent/JP2005276097A/ja
Application granted granted Critical
Publication of JP4241462B2 publication Critical patent/JP4241462B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/24Handling requests for interconnection or transfer for access to input/output bus using interrupt

Abstract

【課題】 複数のタスクを切り替えて実行するCPUの、タスクスケジューリングのために費やす時間の低減を、多重割り込み機能を利用して実現することを目的とする。
【解決手段】 出力を要求された複数の割り込み信号のうち最も優先度の高いものを特定して出力する割り込みコントローラからの割り込み信号に対応した処理を実行するCPUが、OSの提供するプログラムを実行することで、タスクレベル処理の実行の要求を受けたことに基づいて、割り込みコントローラに当該タスクレベル処理に対応した割り込み信号を出力するよう要求する。
【選択図】 図11

Description

本発明は、タスクスケジューリングにおけるタスクレベル処理の優先度の比較を多重割り込み手段に行わせるためのプログラム、およびそのプログラムを実行するマイクロコンピュータに関する。
従来、OSEK−OS、ITRON等の、CPU等の演算装置上で動作する一般的なRTOS(リアルタイムオペレーティングシステム)の仕様は、そのオペレーティングシステム上で実行される処理の分類区分として、割り込みレベル処理、およびタスクレベル処理を規定している。
具体的には、RTOSの仕様は、タスクレベル処理の実行の要求を受け付けるためのインターフェースを規定している。プログラムの開発者は、所定のプログラムをタスクレベルの処理として呼び出すようなアプリケーションプログラムを作成する際に、当該インターフェースを用いて当該所定のプログラムを呼び出すように、当該アプリケーションプログラムのプログラミングを行う。
またRTOSの仕様は、CPUが割り込みコントローラからの割り込み信号を受けることによって実行する処理を、割り込みレベル処理であると規定する。また、CPUで所定の割り込み命令が実行されると、CPUが割り込み信号を受けた場合と同等の作動を行うようになっている場合、その所定の割り込み命令の実行に基づいて実行される処理も、割り込みレベル処理であると規定している。
RTOS上で実行される処理がタスクレベル処理であるか否かは、その処理がどのようにして実行されたかに基づいて特定することができる。具体的には、その処理が、タスクレベル処理の実行の要求を受け付けるためのインターフェース(以下タスク起動インターフェースと記す)を用いることで実行されていれば、その処理はタスクレベルの処理である。そして、その処理が、タスクレベル処理の実行の要求を受け付けるためのインターフェースを用いずに実行されていれば、その処理はタスクレベルの処理でない。
従来のRTOSでは、上記のようなタスク起動インターフェースを介してタスクレベル処理の実行の要求を受け付けると、CPUは、当該実行の要求を受け付けたタスクレベル処理、現在実行している処理、および過去に処理の実行の要求を受け付けかつ現時点でまだ実行が完了していないタスクレベル処理の優先度を比較し、最も優先度の高い処理を実行する。このような、RTOSによる優先度の比較、およびこの比較に基づいた実行する処理の決定は、RTOSのタスクスケジューリングと呼ばれている。
また、RTOSのタスクスケジューリングにおいては、CPUは、RTOS上で現在実行されている処理が終了すると、過去に処理の実行の要求を受け付けかつ現時点でまだ実行が完了していないタスクレベル処理の優先度を比較し、最も優先度の高い処理を実行する。
なお、割り込みレベル処理は、一般的にタスクレベル処理よりも高い優先度で実行されるようになっている。従って、タスクレベル処理がRTOS上で実行されているときに、割り込みコントローラからの割り込み信号をCPUが受けると、CPUは現在実行しているタスクレベル処理を中断し、受けた割り込み信号に対応する割り込みレベル処理を実行する。
従来用いられている割り込みコントローラとしては、多重割り込み機能を有する割り込みコントローラがある。多重割り込み機能とは、出力を要求された複数の割り込み信号のうち、最も優先度の高いものを特定して出力する機能をいう。具体的には、多重割り込み機能を有する割り込みコントローラは、ある割り込み信号をCPUに出力したことにより、現在当該CPUがその割り込み信号に対応する処理を実行しているとき、他の割り込み信号の出力要求を受けると、当該出力要求を受けた割り込み信号の優先度と、先に出力した割り込み信号の優先度とを比較する。そして、当該出力要求を受けた割り込み信号の優先度が、先に出力した割り込み信号の優先度より高い場合にのみ、当該要求を受けた割り込み処理をCPUに出力する。
しかし、上記のようなタスクスケジューリングをCPUが実行するような従来のRTOSでは、このタスクスケジューリングのための処理自体に多くのCPU処理時間が費やされることになる。その結果、実際のタスクレベル処理、割り込みレベル処理のために用いることができるCPU時間が制限されてしまうという問題がある。
本発明は上記問題点に鑑み、複数のタスクを切り替えて実行するCPUの、タスクスケジューリングのために費やす時間の低減を、多重割り込み機能を利用して実現することを目的とする。
上記目的を達成するための本発明に係る割り込み依頼プログラムの特徴は、「出力を要求された複数の割り込み信号のうち最も優先度の高いものを特定して出力する多重割り込み手段」からの割り込み信号に対応した処理を実行する演算装置を、「タスクレベル処理の実行の要求を受けたことに基づいて、多重割り込み手段に当該タスクレベル処理に対応した割り込み信号を出力するよう要求する割り込み要求手段」として機能させることである。
このような割り込み依頼プログラムを実行することで、演算装置は、タスクレベルの処理の実行の要求を受けたことに基づいて、多重割り込み手段、に当該タスクレベルの処理に対応した割り込み信号を出力するよう要求する。そして、この要求を受けた多重割り込み手段は、受けた要求のうち最も優先度の高いものを特定して、その特定した要求についての割り込み信号を出力する。そして演算装置は、この多重割り込み手段からの割り込み信号に対応した処理を実行する。したがって、演算装置は、タスクレベルの処理の優先度の比較を多重割り込み手段に任せることになる。ゆえに、複数のタスクを切り替えて実行する演算装置の、タスクスケジューリングのために費やす時間の低減が、多重割り込み機能の利用によって実現される。
また、多重割り込み手段は、出力を要求された複数の割り込み信号、および現在演算装置が実行中のタスクレベル処理に対応する割り込み信号のうち最も優先度の高いものを特定して出力するようになっていてもよい。
また、割り込み要求手段は、同一の割り込み信号に複数種類のタスクレベル処理を割り当てていてもよい。このようになっていることで、多重割り込み手段において、タスクレベル処理毎に異なる割り込み信号を出力する必要がないので、多重割り込み手段における割り込み信号の種類の数を低減することができる。
また、割り込み依頼プログラムは、演算装置を、多重割り込み手段からの割り込み信号に対応した処理を実行する割り込み対応手段として機能させ、割り込み要求手段は、タスクレベル処理の実行の要求を受けたことに基づいて、このタスクレベル処理とこのタスクレベル処理の優先度とが対応づけられた実行待ちタスク情報を記憶媒体に記憶させ、このタスクレベル処理の優先度に対応した割り込み信号を出力するよう要求するようになっていてもよい。更に、ここでの割り込み対応手段は、記憶媒体に記憶された実行待ちタスク情報のうち、多重割り込み手段からの割り込み信号の優先度に対応したタスクレベル処理の中で、最も古く記憶されたタスクレベル処理を実行していてもよい。
また、演算装置を、この演算装置によるタスクレベル処理の実行が完了するとき、処理完了通知を多重割り込み手段に対して行う終了処理手段として機能させてもよい。ただし、この場合の多重割り込み手段は、演算装置から処理完了通知を受けることに基づいて、出力を要求された複数の割り込み信号のうち最も優先度の高いものを特定して出力するようになっていることが望ましい。
このようになっていることで、割り込み依頼プログラムを実行する演算装置が、この演算装置によるタスクレベル処理の実行が完了するとき、処理完了通知を多重割り込み手段に対して行う。すると、多重割り込み手段は、出力を要求されている複数の割り込み信号のうち最も優先度の高いものを特定して出力する。したがって、演算装置は、タスクレベルの処理の優先度の比較を多重割り込み手段に任せることになる。
また、演算装置を、この演算装置によるタスクレベル処理の実行が完了するとき、このタスクレベル処理と同じ優先度のタスクレベル処理が前記実行待ちタスク情報として記憶媒体に記憶されている場合、続いて当該記憶されているタスクレベル処理の1つを続いて実行し、そうでない場合、処理完了通知を前記多重割り込み手段に対して行う終了処理手段として機能させてもよい。ただし、この場合には、多重割り込み手段は、演算装置から処理完了通知を受けることに基づいて、出力を要求された複数の割り込み信号のうち最も優先度の高いものを特定して出力するようになっていることが望ましい。
また、多重割り込み手段が、直前に出力した割り込み信号の優先度を記憶するための現在優先度記憶媒体を有し、出力を要求された複数の割り込み信号のうち最も優先度の高いものを特定し、この特定したものの優先度がこの現在優先度記憶媒体に記憶された優先度より高ければそれを出力するようになっている場合には、演算装置を、前記多重割り込み手段の前記現在優先度記憶媒体が記憶する優先度をより高い優先度に書き換える現在優先度書き換え手段として機能させてもよい。このようにすることで、現在実行中のタスクレベル処理の優先度を擬似的に高めることができる。
また、多重割り込み手段が、直前に出力した割り込み信号の優先度を記憶するための現在優先度記憶媒体を有し、更に割り込み信号とその割り込み信号の優先度とを対応づける情報を記憶するための割り込み優先度記憶媒体を有し、出力を要求された複数の割り込み信号のうち最も優先度の高いものを特定し、この特定したものの優先度がこの現在優先度記憶媒体に記憶された優先度より高ければそれを出力するようになっている場合には、演算装置を、現在実行中のタスクレベル処理の優先度を擬似的に特定の優先度に高めるため、多重割り込み手段の前記割り込み優先度記憶媒体が記憶する情報のうち、特定の優先度以上の優先度を有する情報を、現在実行中のタスクレベル処理の優先度以下の優先度に書き換える割り込み優先度書き換え手段として機能させてもよい。
また、割り込み要求手段は、1つの割り込み信号には1種類のタスクレベル処理を割り当てており、多重割り込み手段は、各割り込み信号毎の計数データを記憶する計数記憶媒体を有し、ある種類のタスクレベル処理に対応した割り込み信号の出力要求を受けると、その割り込み信号についての計数データの値を1段階増加させ、またある割り込み信号を演算装置に出力した後の規定のタイミングで、その割り込み信号についての計数データの値を1段階減少させるようになっていてもよい。
また、上記発明は、割り込み依頼プログラムを実行するマイクロコンピュータの形態で実現してもよい。
(第1実施形態)
以下、本発明の第1実施形態について説明する。図1に、本実施形態に係るエンジンECU1の構成を示す。エンジンECU1は、エンジン2を制御するための装置である。エンジンECU1は、クランクセンサ23からエンジン2のクランクの角度が所定のクランク角になった旨のパルス信号の入力を受け、水温センサ31からエンジン冷却水3の温度の情報の入力を受け、またスロットルセンサ41からスロットル開度の情報の入力を受ける。そしてエンジンECU1は、これら入力を受けた情報に基づいて、エンジン2の点火タイミング、燃料噴射量、スロットル調整量等の演算を行い、この演算結果に基づいて、燃料の点火を行うイグナイタ21、燃料噴射を行うインジェクタ22、および電子スロットル4を制御する。
この作動のために、エンジンECU1は、外部入出力回路11およびマイクロコンピュータ12を有している。また、マイクロコンピュータ12は、割り込みコントローラ14、演算装置としてのCPU15、記憶媒体としてのRAM16およびROM17を有している。
外部入出力回路11は、水温センサ31、スロットルセンサ41から受けた情報をCPU15に出力し、またクランクセンサ23から受けたパルス信号に基づいて割り込みコントローラ14に割り込み信号出力を要求する。また外部入出力回路11は、CPU15から受けた制御信号をイグナイタ21、インジェクタ22、電子スロットル4に出力する。
CPU15は、ROM17に記憶されている各種プログラムを読み出して実行することで、外部入出力回路11を介して水温センサ31、スロットルセンサ41から受けた信号に基づいて、点火タイミング、燃料噴射量、スロットル調整量等の演算を行う。その演算の際、CPU15は、必要に応じてRAM16に対して情報の読み出し及び書き込みを行い、またはROM17から情報の読み出しを行う。またCPU15は、割り込みコントローラ14から受けた割り込み信号に基づいて所定のプログラムを実行するようになっている。
このCPU15は、タイムシェアリング方式で複数のプログラムを実行するようになっている。すなわちCPU15は、1度に1つのプログラムの実行のみ行い、あらかじめ決められたプログラムの優先度に基づいて、実行するプログラムを適宜切り替えるようになっている。なお、CPU15は、リアルタイムオペレーティングシステムのOSEK−OSを実行し、そのOSEK−OS上で各種プログラムを実行するようになっている。
具体的には、CPU15は、割り込みコントローラ14からの割り込み信号に基づいて、実行するプログラムを切り替える。
図2に、CPU15のプログラムの切り替えの作動を説明するための図として、割り込みコントローラ14、CPU15、RAM16、ROM17のそれぞれにおける記憶媒体のデータ構成を示す。
CPU15は、演算結果レジスタ151、152等、演算結果を格納する複数のレジスタを有している。
RAM16は、スタック161、Readyキュー162、エンジン2の制御のための制御用変数領域163等の記憶領域を有している。Readyキュー162は、後述する割り込みコントローラ14の第3〜第7割り込みレジスタ143〜147の数、すなわち5つのFIFO(先入れ先出し)バッファを有している。
ROM17は、割り込みベクタ171、CPU15における実行用の複数のプログラム172、エンジン2の制御のための制御用定数173を有している。なお割り込みベクタ171は、割り込みコントローラ14からの割り込み信号と、その割り込み信号に基づいてCPU15が実行を開始するプログラムとの対応情報である。
割り込みコントローラ14は、8個の第0〜第7割り込みレジスタ140〜147、禁止フラグレジスタ148、IntLvlレジスタ149、旧IntLvlレジスタ150という記憶媒体を有している。
第0〜第7割り込みレジスタ140〜147のデータの格納形式は同じである。図3に、これら第0〜第7割り込みレジスタ140〜147のデータの格納形式を示す。第0〜第7割り込みレジスタ140〜147のそれぞれは、データの格納領域の先頭から、割り込みフラグ51、割り込みマスクフラグ52および割り込み優先度53の順にデータを格納する。
ここで、割り込みコントローラ14の作動について説明する。なお、本実施形態における割り込みコントローラ14は、周知の多重割り込みコントローラである。
割り込みコントローラ14は、CPU15から、第0〜第7割り込みレジスタ140〜147のうちいずれかの割り込みレジスタを指定した割り込み信号の出力の要求を受けると、指定された割り込みレジスタの割り込みフラグ51の値を1(オン)にセットし、また当該割り込みレジスタの割り込みマスクフラグ52の値を0(オフ)にセットする。なお、本実施形態においては、CPU15からの割り込み信号は、後述するタスクレベル処理用の割り込み信号である。
また割り込みコントローラ14は、外部入出力回路11から、第0〜第7割り込みレジスタ140〜147のうちいずれかの割り込みレジスタを指定した割り込み信号の出力の要求を受けると、その指定された割り込みレジスタの割り込みフラグ51の値を1(オン)にセットする。
このように、割り込みコントローラ14は、CPU15、外部入出力回路11等から特定の割り込み信号の出力が要求されていることを記憶媒体に記憶させる。
割り込み信号の出力の要求を受けた割り込みコントローラ14は、続いて、第0〜第7割り込みレジスタ140〜147から、その割り込みフラグ51の値が1であり、かつ割り込みマスクフラグ52の値が0であるような割り込みレジスタ、すなわち現在要求されている割り込み信号に対応する割り込みレジスタを特定する。現在要求されている割り込み信号に対応する割り込みレジスタは、割り込み許可のある割り込みレジスタであるとも言える。続いて割り込みコントローラ14は、それら特定した割り込みレジスタのうち、最も割り込み優先度の高い割り込みレジスタを特定する。
割り込みレジスタの優先度は、上記した割り込み優先度53の値によって特定される。割り込み優先度の値は0から7までの整数値のいずれかを取り、値が小さいほど優先度が高い。本実施形態においては、第0割り込みレジスタ140の割り込み優先度53には値0が、第1割り込みレジスタ141の割り込み優先度53には値1が、第2割り込みレジスタ142の割り込み優先度53には値2が、第3割り込みレジスタ143の割り込み優先度53には値3が、第4割り込みレジスタ144の割り込み優先度53には値4が、第5割り込みレジスタ145の割り込み優先度53には値5が、第6割り込みレジスタ146の割り込み優先度53には値6が、第7割り込みレジスタ147の割り込み優先度53には値7が、それぞれあらかじめ記憶されている。
続いて割り込みコントローラ14は、上記のように特定した、現在要求されている割り込み信号に対応する割り込みレジスタのうち最も割り込み優先度の高い割り込みレジスタの割り込み優先度53の値と、IntLvlレジスタ149の値とを比較する。そして、IntLvlレジスタ149の値よりも当該割り込み優先度53の値の方が低ければ、すなわちIntLvlレジスタ149の優先度よりも当該割り込み優先度53の優先度の方が高ければ、割り込みコントローラ14は、上記特定した割り込みレジスタにあらかじめ割り当てられた割り込み信号をCPU15に出力する。
割り込み信号の出力を要求されている割り込みレジスタがない場合、あるいは割り込み信号の出力を要求されている割り込みレジスタの全ての割り込み優先度53が、IntLvlレジスタ149の値以上である場合は、割り込みコントローラ14は割り込み信号を出力しない。
なお、第0〜第7割り込みレジスタ140〜147には、あらかじめそれぞれ異なる割り込み信号が割り当てられている。
割り込み信号を出力した後、割り込みコントローラ14は、旧IntLvlレジスタ150の値を現在IntLvlレジスタ149に記憶されている値に変更し、その後、直前に出力した割り込み信号に対応する優先度の値、すなわち当該割り込み信号に割り当てられた割り込みレジスタの割り込み優先度53の値、を旧IntLvlレジスタ150に出力する。
このように、割り込みコントローラ14は、割り込み信号の出力の要求を受けると、出力を要求されている複数の割り込み信号のうち最も優先度の高いものを特定し、この特定したものの優先度が、直前に出力した割り込み信号の優先度を記憶するためのIntLvlレジスタ149に記憶された優先度より高ければその割り込み信号を出力する。
またこのように、割り込み優先度53を有する各割り込みレジスタは、割り込み信号とその割り込み信号の優先度とを対応づける情報を記憶するための割り込み優先度記憶媒体として機能する。またIntLvlレジスタ149は、直前に出力した割り込み信号の優先度を記憶するための現在優先度記憶媒体として機能する。
また割り込みコントローラ14は、CPU15または外部入出力回路11から、第0〜第7割り込みレジスタ140〜147のうちいずれかの割り込みレジスタを指定する割り込み要求消去の信号を受けると、その指定された割り込みレジスタの割り込みマスクフラグ52の値を1(オン)にセットする。これによって、割り込みコントローラ14では、当該割り込みレジスタに対応する割り込み信号の要求を受けていない状態となる。
また割り込みコントローラ14のIntLvlレジスタ149は、CPU15からの書き換え制御によってその値が書き換わるようになっている。割り込みコントローラ14は、CPU15の制御によってIntLvlレジスタ149の値が書き換わったことを検出すると、上述した、CPU15または外部入出力回路11から割り込み信号の出力の要求を信号として受けて割り込みフラグ51等を書き換えた後の作動と同等の作動を行う。
また禁止フラグレジスタ148は、CPU15の書き換え制御によってその値が書き換わるようになっている。禁止フラグレジスタ148の値が1(オン)の場合は、割り込みコントローラ14は、上記した作動の説明に関わらず、第0〜第7割り込みレジスタ140〜147に対応する割り込み信号をCPU15に出力しない。また禁止フラグレジスタ148の値が0(オフ)の場合は、割り込みコントローラ14は上記した説明の通りの作動で第0〜第7割り込みレジスタ140〜147に対応する割り込み信号をCPU15に出力する。
なお、本実施形態のオペレーティングシステムは、割り込み信号のそれぞれ、すなわち割り込み優先度の1つ1つに、CPU15が実行するプログラムを割り当てている。図4に、割り込み優先度と、その割り込み優先度に割り当てられるプログラムの対応関係を示す。
図4中、矩形70〜77のそれぞれが、1つの割り込み優先度に対応し、図中上方に配置されている矩形ほど、その割り込み優先度の値が低い、すなわち割り込み優先度が高い。
値が3以上の割り込み優先度のそれぞれには、タスクレベル処理用のプログラムが割り当てられる。OSEK−OSは、あるプログラムから他のプログラムを呼び出すときに用いることができるシステムコールを規定している。このシステムコールが、タスクレベル処理の実行の要求を受け付けるためのインターフェースである。本実施形態においては、後述するように、このインターフェースを、アクティベートタスクと呼ぶ。タスクレベル処理用のプログラムとは、このアクティベートタスクを用いて実行が開始されるようになっているプログラムをいう。
また、タスクレベル処理用のプログラムが割り当てられる割り込み優先度は、最高優先タスク(割り込み優先度=3)、高優先タスク(割り込み優先度=4)、中優先タスク(割り込み優先度=5)、低優先タスク(割り込み優先度=6)、アイドルタスク(割り込み優先度=7)の5つに分かれている。それぞれの割り込み優先度に、複数のタスクレベル処理用のプログラムが割り当てられている。
なお、タスクレベル処理用のプログラムがどの割り込み優先度に割り当てられるかの情報は、当該プログラムに付随してROM17に記憶されている。この情報により、タスクレベル処理用のプログラムの優先度を特定することができる。
また、値が2以下の割り込み優先度には、割り込みレベル処理用のプログラムが割り当てられる。割り込みレベル処理用のプログラムとは、上記したアクティベートタスクを介さず、かつ割り込みコントローラ14からの割り込み信号に基づいて実行が開始されるプログラムをいう。例えば、外部入出力回路11を介してクランクセンサ23等の外部の装置からの信号を割り込みコントローラ14が受け、それによって割り込みコントローラ14がCPU15に割り込み信号を出力することによって、CPU15において実行が開始されるプログラムが、割り込みレベル処理用のプログラムに該当する。また、また、CPUで所定の割り込み命令が実行されると、CPUが割り込み信号を受けた場合と同等の作動を行うようになっている場合、所定の割り込み命令の実行に基づいて実行されるプログラムも、割り込みレベル処理のプログラムに該当する。
また、割り込みレベル処理用のプログラムが割り当てられる割り込み優先度は、高優先割り込み(割り込み優先度=0)、中優先割り込み(割り込み優先度=1)、低優先割り込み(割り込み優先度=2)の3つに分かれている。
次に、上記のような作動の割り込みコントローラ14を用いるCPU15の実行プログラムの切り替えについて説明する。
図5に、以下で説明するタスクA、タスクB、タスクCおよび割り込みXのCPU15における実行タイミングを表す。なお、タスクAは高優先タスク(割り込み優先度4)に割り当てられたタスクレベル処理用のプログラムである。また、タスクBは中優先タスク(割り込み優先度5)に割り当てられたタスクレベル処理用のプログラムである。また、タスクCは低優先タスク(割り込み優先度6)に割り当てられたタスクレベル処理用のプログラムである。また、割り込みXは中優先割り込みに割り当てられた割り込みレベル処理用のプログラムである。
図5においては、左から右への向きに時間が経過するものとし、各時刻において実行されるタスクは、矩形で表されている。
以下で説明する通り、タスクCの実行中、タスクCからタスクAが呼び出される(矢印61のタイミングに相当する)ことにより、タスクCが中断してタスクAの実行が始まる(矢印62のタイミングに相当する)。そしてタスクAの実行が終了すると、タスクCの実行が再開する(矢印63のタイミングに相当する)。その後再びタスクCの実行が中断して割り込みXの実行が始まる(矢印64のタイミングに相当する)。
その後割り込みXからタスクBが呼び出され(矢印65のタイミングに相当する)、割り込みXの実行終了後にそのタスクBの実行が始まる(矢印66のタイミングに相当する)。その後タスクBの実行が終了すると、タスクCの実行が再開する(矢印67のタイミングに相当する)。
まず、図6〜図9に、このような作動を行うタスクA〜C、および割り込みXのフローチャートを示す。図6は、タスクAのフローチャートである。まずステップ110でタスクA処理を行う。タスクA処理とは、例えばスロットルセンサ41から受けた情報をRAM16の所定の領域に記憶する処理等、エンジン2の制御のための処理の1つである。続いてステップ120でターミネートタスクを呼び出し、処理を終了する。ターミネートタスクとは、プログラムの実行を終了し、次のプログラムの実行を開始するために用いられる、OSEK−OSが提供するインターフェースである。このターミネートタスクの処理の詳細については後述する。
図7は、タスクBのフローチャートである。まずステップ130でタスクB処理を行う。タスクB処理とは、例えばイグナイタ21、インジェクタ22、電子スロットル4に対して、それぞれ点火制御、燃料噴射制御、スロットル開度調整の制御信号を出力する処理等、エンジン2の制御のための処理の1つである。続いてステップ140でターミネートタスクを呼び出し、処理を終了する。
図8は、タスクCのフローチャートである。まずステップ150でタスクC第1処理を行う。これは、例えばRAM16に記憶されたクランクセンサ23、水温センサ31、スロットルセンサ41からの情報に基づいて、燃料噴射量、燃料点火タイミング、スロットル調整量等の計算を行う処理の一部等、エンジン2の制御のための処理の1つである。
続いてステップ160で、上述したアクティベートタスクを呼び出す。なお、呼び出す際に、タスクAを指定する情報を引数としてアクティベートタスクに渡す。アクティベートタスクの処理の詳細については後述する。
続いてステップ170で、タスクC第2処理を行う。タスクC第2処理は、タスクC第1処理と同様に、例えば燃料噴射量、燃料点火タイミング、スロットル調整量等の計算を行う処理の一部等、エンジン2の制御のための処理の1つである。
続いてステップ180でターミネートタスクを呼び出し、処理を終了する。
図9は、割り込みXのフローチャートである。割り込みXは、割り込みベクタ171において、第2割り込みレジスタ142に割り当てられた割り込み信号に対応するプログラムである。CPU15は、割り込みコントローラ14から割り込み信号を受けると、割り込みベクタ171から、受けた割り込み信号に対応するプログラムを特定し、特定したプログラムの実行を開始する。したがって、CPU15は、第2割り込みレジスタ142に割り当てられた割り込み信号を受けることで、割り込みXの実行を開始する。
なお、割り込みX等、割り込みレベル処理のプログラムの実行において、CPU15は、その実行開始直前に、コンテキストの待避を行う。具体的には、CPUの演算結果レジスタ、RAM16中のテンポラリデータをスタック161の一部に書き込む。なお、テンポラリデータとは、直前に実行されたプログラムが利用していた一時的な変数等の作業用データをいう。
またCPU15は、割り込みレベル処理のプログラムの実行の終了時に、コンテキストの復帰を行う。具体的には、当該割り込みレベル処理のプログラムの実行開始直前に行ったコンテキスト待避でスタック161に書き込んだデータを、演算結果レジスタやRAM16の元の領域に書き戻す。
またCPU15は、割り込みレベル処理のプログラムの実行の終了時に、割り込みコントローラ14の対応する割り込みレジスタの割込みフラグ51の値を0に書き換える。
割り込みXの実行においては、まずステップ210で、割り込みX第1処理を行う。割り込みX第1処理とは、例えば現在時刻をクランクセンサ23から信号を受けた時刻としてRAM16に記憶させる処理の一部等、エンジン2の制御のための処理の1つである。
続いてステップ220で、アクティベートタスクを呼び出す。なお、呼び出す際に、タスクBを指定する情報を引数としてアクティベートタスクに渡す。
続いてステップ230で、割り込みX第2処理を実行する。割り込みX第2処理は、割り込みX第1処理と同様に、例えば現在時刻をクランクセンサ23から信号を受けた時刻としてRAM16に記憶させる処理の一部等、エンジン2の制御のための処理の1つである。
続いてステップ240では、割り込みXを終了する。具体的には、RTI(リターンインタラプト)命令を実行することで、割り込みコントローラ14のIntLvlレジスタ149の値を旧IntLvlレジスタ150に記憶されている値に書き換える制御を行い、また、RAM16に設けられたプログラムカウンタバッファ、ステータスレジスタバッファの値を、それぞれ、CPU15が有するプログラムカウンタ、ステータスレジスタに書き込む。
なお、割り込みコントローラ14のIntLvlレジスタ149の値を旧IntLvlレジスタ150に記憶されている値に書き換える制御は、処理完了通知を割り込みコントローラ14に対して行うことに相当する。
また、プログラムカウンタは、現在CPU15が実行している命令のRAM16上のアドレスを示すデータが格納される記憶領域である。またステータスレジスタは、CPU15のプログラムの実行状態(エラー、割り込み、正常動作等)の情報が格納される記憶領域である。
図10に、CPU15が、タスクレベル処理用のプログラムに対応する割り込み信号を受けたときに、この割り込みベクタ171を介して実行するプログラム、すなわちタスク用割り込みプログラムのフローチャートを記す。
まずステップ310では、割り込み禁止処理を行う。具体的には、禁止フラグレジスタ148を1に書き換える命令を割り込みコントローラ14に出力する。これによって、以降は、再び禁止フラグレジスタ148の値が0に書き換わるまで、割り込みコントローラ14から, 第0〜第7割り込みレジスタ140〜147に対応する割り込み信号は出力されない。
続いてステップ320で、コンテキスト待避を行う。具体的には、現在の演算結果レジスタの内容、およびRAM16中のテンポラリデータをスタック161の一部分に書き込む。なお、テンポラリデータとは、直前に実行されたプログラムが利用していた一時的な変数等の作業用データをいう。この待避の処理により、スタックポインタの値は、スタック161のデータが書き込まれた終端の位置のアドレスに書き換わる。
続いてステップ330では、具体的には、現在のスタックポインタの値を、RAM16のスタックポインタバッファに格納する。
続いてステップ340で、Readyキュー162から一番古いタスクIDを取得する。
上述した通り、Readyキュー162は、タスクレベル処理プログラムが割り当てられる第3〜第7割り込みレジスタ143〜147の数だけFIFOバッファを有している。この各FIFOバッファは、第3〜第7割り込みレジスタ143〜147のそれぞれの割り込み信号に対応している。したがって、Readyキュー162は、タスクレベル処理とこのタスクレベル処理の優先度とが対応づけられた実行待ちタスク情報を有しているといえる。
また後述する様に、各FIFOバッファは、対応する割り込みレジスタに割り当てられたタスクレベル処理プログラムを識別する情報、すなわちタスクIDが、先入れ先出し方式で格納されるようになっている。
ステップ340では、具体的には、このタスク用割り込みが実行される原因となった割り込み信号に対応するFIFOバッファから、最も早く格納されたタスクIDの情報を読み出し、その情報を当該FIFOバッファから削除する。
ステップ350では、割り込み許可の処理を行う。具体的には、禁止フラグレジスタ148を0に書き換える命令を割り込みコントローラ14に出力する。これによって、以降は割り込みコントローラ14から, 第0〜第7割り込みレジスタ140〜147に対応する割り込み信号を出力することが許可される。
続いてステップ360では、該当タスクへジャンプしてタスク用割り込みの実行を終了する。具体的には、ステップ340で読み出したタスクIDに相当するタスクレベル処理のプログラムを実行し、タスク用割り込みの実行を終了する。
このようなタスク用割り込みを実行することで、CPU15は、Readyキュー162中の、直前に受けた割り込み信号に対応するFIFOバッファに格納された最も古いタスクIDに相当するタスクレベル処理用プログラムを実行する。
また、ステップ310で割り込みを禁止し、ステップ350で割り込みを許可することにより、ステップ310〜ステップ360の間は、第0〜第7割り込みレジスタ140〜147からの割り込み信号によってプログラムの実行が切り替わることがない。
なお、CPU15は、割り込みコントローラ14から割り込み信号を受けたとき、タスク用割り込みプログラムの実行の他に、別途、ハードウェア処理として、プログラムカウンタの値を上記したプログラムカウンタバッファに書き込み、またステータスレジスタの値を上記したステータスレジスタバッファの値に書き込むようになっている。
次に、タスクレベル処理のプログラムの実行の要求を受け付けるためにOSEK−OSが提供するインターフェースであるアクティベートタスクのプログラムのフローチャートを図11に示す。
まずステップ410で、割り込み禁止の処理を行う。これは、図9のステップ310と同等の処理である。
続いてステップ420で、該当タスクIDをReadyキュー162に登録する。該当タスクIDとは、アクティベートタスクを呼び出したプログラムから渡された引数に含まれるタスクの指定に対応するタスクIDをいう。例えば、アクティベートタスクが上述のタスクCのステップ160において呼び出される場合は、該当タスクIDはタスクAのタスクIDである。Readyキュー162への登録は、具体的には、Readyキュー162のFIFOバッファの1つに、当該タスクIDを格納することで実現する。当該タスクIDをどのFIFOバッファに格納するかは、ROM17から、当該タスクIDのタスクのプログラムに付随する割り込み優先度の情報を読み出し、その割り込み優先度がどの割り込み信号に対応しているかに基づいて特定する。
続いてステップ430では、対応するタスク用割り込みを要求する。具体的には、当該タスクに対応する割り込みレジスタに、割込みフラグ51の値を1(オン)にセットし、割込みマスクフラグ52の値を0(オフ)にセットする制御信号を出力する。これは、当該割り込みレジスタを指定する情報を含む割り込み信号の出力の要求を、割り込みコントローラ14に出力することに相当する。
続いてステップ440で、割り込み許可の処理を行う。これは、図9のステップ350と同等の処理である。ステップ440の後、アクティベートタスクの処理は終了し、CPU15は、このアクティベートタスクの呼び出し元のプログラムの実行を続ける。
以上のようなアクティベートタスクのプログラムを実行することにより、CPU15は、タスクレベル処理のプログラムの実行の要求を呼び出し元のプログラムから受けたことに基づいて、このタスクレベル処理のタスクIDを、このタスクレベルの処理の割り込み優先度に対応するFIFOバッファに格納させる(ステップ420参照)。これによって、当該タスクレベル処理と、このタスクレベル処理の割り込み優先度とが対応づけられてReadyキュー162に記憶される。
更にCPU15は、割り込みコントローラ14に、当該タスクレベル処理に対応した割り込み信号を出力するよう要求する(ステップ430参照)。
次に、タスクレベル処理のプログラムの実行を終了し、次のプログラムの実行を開始するために用いられるターミネートタスクのプログラムのフローチャートを図12に示す。
まずステップ510で、割り込み禁止の処理を行う。これは、図9のステップ310と同等の処理である。
続いてステップ520で、スタックポインタバッファの値をスタックポインタに書き込む。これによって、スタックポインタの値は、ターミネートタスクの呼び出し元のプログラムの実行が開始する前の値、より具体的にはタスク用割り込みプログラムのステップ320の直後の値に戻る。
続いてステップ530で、割り込み優先度同一のタスクIDがReadyキュー162中にあるか否かを判定する。具体的には、ターミネートタスクの呼び出し元のタスクレベル処理のタスクIDが格納されていたReadyキュー162中のFIFOバッファに、他のタスクIDが現在格納されているか否かを判定する。格納されていれば、続いてステップ570の処理を実行し、格納されていなければ、続いてステップ540の処理を実行する。
ステップ540では、割り込み要求消去の信号を割り込みコントローラ14に出力する。この割り込み要求消去の信号には、このターミネートタスクの呼び出し元のタスクレベル処理の割り込み優先度に対応する割り込みレジスタを指定する情報を含める。
続いてステップ550では、コンテキスト復帰の処理を行う。具体的には、現在のスタックポインタの値に基づいて、ターミネートタスクの呼び出し元のタスクレベル処理の実行の直前に実行されていたタスクレベル処理についての演算結果レジスタの値やテンポラリデータを、スタック161から読み出して元の演算結果レジスタ、RAM16の位置に戻す。
続いてステップ560で、割り込み許可の処理を行う。これは、図9のステップ350と同等の処理である。
続いてステップ565では、図9のステップ240と同様、RTI命令を実行し、その後ターミネートタスクの処理を終了する。
ステップ570では、Readyキュー162から優先度同一で一番古いタスクIDを取得する。具体的には、ターミネートタスクの呼び出し元のタスクレベル処理のタスクIDが格納されていたReadyキュー162中のFIFOバッファから、一番早く格納されたタスクIDを読み出し、そのタスクIDを当該FIFOバッファから消去する。
続いてステップ580で、ステップ550と同様の割り込み許可の処理を行う。
続いてステップ590では、該当タスクへジャンプしてターミネートタスクの実行を終了する。具体的には、ステップ570で読み出したタスクIDに相当するタスクレベル処理のプログラムを実行し、タスク用割り込みの実行を終了する。
以上のようなターミネートタスクのプログラムを実行することで、CPU15は、タスクレベル処理の実行が完了するとき、このタスクレベル処理の優先度と同一の優先度に対応づけられたタスクレベル処理がReadyキュー162に記憶されている場合、当該記憶されているタスクレベル処理のうち最も古い1つを引き続き実行し(ステップ570、590参照)、そうでない場合、RTI命令を実行する(ステップ565参照)。
以上のようなプログラム群を実行することにより、図5に示すようなCPU15の実行プログラムの切り替えが実現することを以下説明する。
まずCPU15がタスクCを実行しており、割り込みコントローラ14の第0〜第7割り込みレジスタ140〜147の割り込みマスクフラグ52の値は、第6割り込みレジスタ146について0である以外は全て1であり、IntLvlレジスタ149の値は6(低優先タスク)であり、Readyキュー162にはタスクCのタスクIDのみが、対応するするFIFOバッファに格納されているとする。
このとき、図8のステップ160が実行されることにより、アクティベートタスクが実行される。このアクティベートタスクの実行により、タスクAに割り当てられた割り込み優先度に対応するReadyキュー162のFIFOバッファに、タスクAのタスクIDが格納され(図11のステップ420参照)、更に、当該割り込み優先度に対応する第4割り込みレジスタ144の割り込みフラグ51および割り込みマスクフラグ52がそれぞれ1および0に変更される(ステップ430参照)。この段階が図5の矢印61のタイミングに相当する。
これによって、割り込みコントローラ14は、第4割り込みレジスタ144に対応する割り込み優先度の要求を受けている状態となる。そして割り込みコントローラ14は、割り込みフラグ51が1、割り込みマスクフラグ52が0となっている割り込みレジスタは、第4割り込みレジスタ144、第6割り込みレジスタ146であると特定する。そして割り込みコントローラ14は、これらの割り込みレジスタの割り込み優先度53を比較して、第4割り込みレジスタ144が最も優先度が高いことを特定する。更に割り込みコントローラ14は、第4割り込みレジスタ144の割り込み優先度53の値がIntLvlレジスタ149の値より小さいと判定し、この判定に基づいて、旧IntLvlレジスタ150の値を現在のIntLvlレジスタ149の値である6に書き換え、IntLvlレジスタ149の値を現在の第4割り込みレジスタ144の割り込み優先度53の値である4に書き換える。割り込みコントローラ14は更に、第4割り込みレジスタ144に対応する割り込み信号をCPU15に出力する。
タスクCを実行中だったCPU15は、この割り込み信号を受けると、プログラムカウンタ、ステータスレジスタの値をそれぞれプログラムカウンタバッファ、ステータスレジスタバッファに待避すると共に、割り込みベクタ171を介して図10に示したタスク用割り込みプログラムを実行する。そして、Readyキュー162の当該割り込み信号に対応するFIFOバッファに格納された一番古いタスクID、すなわちタスクAのタスクIDを取り出して消去し、当該タスクIDのタスク、すなわちタスクAを実行する。この段階が図5の矢印62のタイミングとなる。
その後、タスクAの実行が終了するとき、図7のステップ140が実行される。すると、ターミネートタスクの実行が始まり、呼び出し元のタスクAに対応するFIFOバッファが空であることを判定され(図12のステップ530参照)、この判定に基づいてコンテキストの復帰が行われる(ステップ550参照)、これによって、CPU15の演算結果レジスタ等、およびRAM16のテンポラリデータが、タスクCの中断時のものに戻る。続いてCPU15から割り込みコントローラ14に割り込み要求消去信号が出力される(ステップ540参照)。これによって割り込みコントローラ14では第4割り込みレジスタ144の割り込みマスクフラグ52が1となる。
そしてCPU15がRTI命令を実行する(ステップ565参照)。これによって、プログラムカウンタ、ステータスレジスタの値が、タスクCの中断時の値に戻り、IntLvlレジスタ149の値は旧IntLvlレジスタ150の値、すなわち6に戻る。続いて割り込みコントローラ14は、割り込みフラグ51が1であり割り込みマスクフラグ52が0である割り込みレジスタは第6割り込みレジスタ146のみであることを判定する。更に割り込みコントローラ14は、第6割り込みレジスタ146の割り込み優先度53の値とIntLvlレジスタ149の値とが同じであることに基づき、CPU15に割り込み信号を出力しない。
CPU15は、プログラムカウンタの値の位置からタスクCの実行を再開する。この段階が図5の矢印63のタイミングとなる。
また、タスクCの実行中に、例えばクランクセンサ23からのパルス信号を割り込みコントローラ14が受けると、そのパルス信号に対応した割り込みレジスタ(ここでは第1割り込みレジスタ141とする)の割り込みフラグ51の値を1(オン)にセットする。
これによって、割り込みコントローラ14は、第1割り込みレジスタ141に対応する割り込み優先度の要求を受けている状態となる。そして割り込みコントローラ14は、割り込みフラグ51が1、割り込みマスクフラグ52が0となっている割り込みレジスタは、第1割り込みレジスタ141および第6割り込みレジスタ146であると特定する。そして割り込みコントローラ14は、これらの割り込みレジスタの割り込み優先度53を比較して、第1割り込みレジスタ141が最も優先度が高いことを特定する。更に割り込みコントローラ14は、第1割り込みレジスタ141の割り込み優先度53の値がIntLvlレジスタ149の値より小さいと判定し、この判定に基づいて、旧IntLvlレジスタ150の値を現在のIntLvlレジスタ149の値である6に書き換え、IntLvlレジスタ149の値を現在の第1割り込みレジスタ141の割り込み優先度53の値である1に書き換える。割り込みコントローラ14は更に、第1割り込みレジスタ141に対応する割り込み信号をCPU15に出力する。
タスクCを実行中だったCPU15は、この割り込み信号を受けると、プログラムカウンタ、ステータスレジスタの値をそれぞれプログラムカウンタバッファ、ステータスレジスタバッファに待避すると共に、割り込みベクタ171を介して割り込みXのプログラムの実行を開始する。この段階が図5の矢印64のタイミングとなる。
この後、割り込みXにおける図9のステップ220が実行されることにより、アクティベートタスクが実行される。このアクティベートタスクの実行により、タスクBに割り当てられた割り込み優先度に対応するReadyキュー162のFIFOバッファに、タスクBのタスクIDが格納され(図11のステップ420参照)、更に、当該割り込み優先度に対応する第5割り込みレジスタ145の割り込みフラグ51および割り込みマスクフラグ52をそれぞれ1および0に変更させる(ステップ430参照)。この段階が図5の矢印65のタイミングに相当する。
これによって、割り込みコントローラ14は、第5割り込みレジスタ145に対応する割り込み優先度の要求を受けている状態となる。そして割り込みコントローラ14は、割り込みフラグ51が1、割り込みマスクフラグ52が0となっている割り込みレジスタは、第1割り込みレジスタ141、第5割り込みレジスタ145、第6割り込みレジスタ146であると特定する。そして割り込みコントローラ14は、これらの割り込みレジスタの割り込み優先度53を比較して、第1割り込みレジスタ141が最も優先度が高いことを特定する。更に割り込みコントローラ14は、第1割り込みレジスタ141の割り込み優先度53の値がIntLvlレジスタ149の値と同じであると判定する。従って、この時点では割り込みコントローラ14からCPU15に割り込み信号は出力されない。すなわち、タスクBよりも割り込みXの方が優先度が高いので、割り込みX実行中は、タスクBは実行されない。
その後割り込みXの実行が終了するとき、CPU15がRTI命令を実行する(図9のステップ240参照)。これによって、プログラムカウンタ、ステータスレジスタの値が、タスクCの2度目の中断時の値に戻り、IntLvlレジスタ149の値は旧IntLvlレジスタ150の値、すなわち6に戻る。
続いて割り込みコントローラ14は、割り込みフラグ51が1であり割り込みマスクフラグ52が0である割り込みレジスタは第5割り込みレジスタ145および第6割り込みレジスタ146のみであることを判定し、さらに第5割り込みレジスタ145の割り込み優先度53の値の方が第6割り込みレジスタ146の割り込み優先度53の値よりも小さいことを判定する。更に割り込みコントローラ14は、第5割り込みレジスタ145の割り込み優先度53の値の方がIntLvlレジスタ149の値より小さいことに基づき、CPU15に第5割り込みレジスタ145に対応する割り込み信号を出力する。
この割り込み信号を受けたCPU15は、プログラムカウンタ、ステータスレジスタの値をそれぞれプログラムカウンタバッファ、ステータスレジスタバッファに待避すると共に、割り込みベクタ171を介して図10に示したタスク用割り込みプログラムを実行する。そして、Readyキュー162の当該割り込み信号に対応するFIFOバッファに格納された一番古いタスクID、すなわちタスクBのタスクIDを取り出して消去し、当該タスクIDのタスク、すなわちタスクBを実行する。この段階が図5の矢印66のタイミングとなる。
その後、タスクBの実行が終了するとき、ターミネートタスクが実行される。そして、矢印63のタイミングでタスクAが終了してタスクCの実行が再開する場合において、タスクAをタスクBに置き換えたものと同等の作動により、矢印67のタイミングで、タスクBの処理が終了し、タスクCの処理が再開する。
以上のようにして、図5に示したCPU15の実行プログラム切り替えの処理が実現する。
この図5に示した切り替えにおいて、タスクCからタスクAへの切り替えは、矢印61のタイミングにおけるアクティベートタスクにおいて、割り込みコントローラ14に割り込み信号出力の要求を行うことによって実現される。従来のアクティベートタスクの場合、ソフトウェア処理としてCPU15がタスクレベル処理間の優先度を比較し、その結果に基づいて実行するタスクレベル処理を実現するのに対し、本実施形態では割り込みコントローラ14に割り込み優先度の比較を行わせるようになっている。
またタスクAからタスクCの実行に戻る場合、割り込みXからタスクBの実行に切り替わる場合およびタスクBからタスクCの実行に戻る場合、ターミネートタスクにおいて(図12のステップ565参照)、または直接(図9のステップ240参照)、CPU15がRTI命令を実行する。これにより、割り込みコントローラ14が割り込み優先度の比較を行い、その比較結果に基づいてCPU15が実行タスクの切り替えを行う。従来のターミネートタスクの場合においても、従来のアクティベートタスク同様、ソフトウェア処理としてCPU15がタスクレベル処理間の優先度を比較し、その結果に基づいて実行するタスクレベル処理を実現するのに対し、本実施形態では割り込みコントローラ14に割り込み優先度の比較を行わせるようになっている。
このように、CPU15は、タスクレベル処理の実行の要求があるとき、アクティベートタスクを実行することで、割り込みコントローラ14に当該タスクレベルの処理に対応した割り込み信号を出力するよう要求する。そして、この要求を受けた割り込みコントローラ14は、受けた要求のうち最も優先度の高いものを特定して、それの割り込み優先度53の値がIntLvlレジスタ149の値より低ければ、その特定した要求についての割り込み信号を出力する。そしてCPUは、この割り込みコントローラ14からの割り込み信号に対応した処理を実行する。したがって、CPU15は、タスクレベルの処理の優先度の比較を割り込みコントローラ14に任せることになる。それゆえ、複数のタスクを切り替えて実行するCPU15の、タスクスケジューリングのために費やす時間の低減が、割り込みコントローラ14の多重割り込み機能の利用によって実現される。
またCPU15は、タスクレベル処理の実行が完了するとき、RTI命令を実行する。すると、割り込みコントローラ14、出力を要求されている複数の割り込み信号のうち最も優先度の高いものを特定し、それの割り込み優先度53の値がIntLvlレジスタ149の値より低ければ、それを出力する。したがって、CPUは、タスクレベルの処理の優先度の比較を割り込みコントローラ14に任せることになる。
また、図5の例において、例えばタスクBの実行中に、タスクBと同じ割り込み優先度に割り当てられたタスクDを引数とするアクティベートタスクが呼び出された場合について以下説明する。この場合、アクティベートタスクの実行により、タスクBに対応するFIFOバッファにタスクDのタスクIDが格納される。そして、タスクBの終了時、ターミネートタスクの実行において、図12のステップ530で、タスクBと同じ割り込み優先度のFIFOバッファに他のタスクIDがあると判定する。そして、ステップ570で当該FIFOバッファから当該タスクDのタスクIDを読み出し、ステップ590で、当該タスクDの実行を開始する。
このように、1つのタスク処理用プログラムが終了する時に、続いて同じ割り込み優先度のFIFOバッファに別のタスク処理用プログラムのタスクIDが格納されている場合は、当該1つのタスク処理用プログラムのコンテキストの待避、割り込みコントローラ14への割り込み要求、割り込み要求消去等を行うことなく、続いて当該別のタスク処理用プログラムを実行する。これは、現在実行中のタスク処理用プログラムと同じ優先度のタスク処理用プログラムのタスクIDがFIFOバッファにあるということは、このFIFOバッファにあるタスク処理用のプログラムは必ずその先頭から実行が開始されるからである。このようにすることで、CPU15における、コンテキストの待避等による処理の負荷が軽減される。
また、本実施形態においては、割り込みコントローラ14の割り込みマスクフラグ52の値としては、1または0のいずれかしかない。したがって、ある割り込み優先度のタスクレベル処理について割り込みコントローラ14が割り込み信号出力の要求を受けているときに、更に同じ割り込み優先度のタスクレベル処理について割り込み信号出力の要求を受けても、割り込みマスクフラグ52の値に変化がない。それゆえ、仮にその当該割り込み優先度のタスクレベル処理の1つが終了する度に、図12のステップ540と同等の処理によって、必ず対応する割り込みレジスタの割り込みマスクフラグ52が1に変化するようになっていたとするなら、割り込みコントローラ14においては、後の割り込み信号出力の要求はなかったことになってしまう。
しかし、本実施形態のように、同じ割り込み優先度のタスクレベル処理が多重に要求されている場合は、そのタスクレベル処理の1つが完了するときも、割り込み要求消去を行わず、後に要求された方のタスクレベル処理を続けて実行するようにすることで、このような問題は回避される。
(第2実施形態)
次に、本発明の第2実施形態について説明する。本実施形態が第1実施形態と異なるのは、CPU15が、割り込みコントローラ14のIntLvlレジスタ149を書き換える処理を、現在実行中のタスクレベル処理の優先度を擬似的に特定の優先度に高めるために、実行することである。
現在実行中のタスクレベル処理の優先度を擬似的に特定の優先度に高めることが必要となる具体的なケースとしては、例えば、複数の異なる優先度のタスクレベル処理が、エンジンECU1の同じリソースを用いるようになっている場合、すなわち複数の異なる優先度のタスクレベル処理によるリソースの共有がある場合が考えられる。ここで、エンジンECU1のリソースとは、マイクロコンピュータ12のRAM16、または図示しないEEPROMの所定の領域、外部入出力回路11、図示しない車両内の他のECUと通信するための通信装置等、エンジンECU1においてCPU15が利用する物理デバイスをいう。
このような場合においては、割り込み優先度の低い方のタスクレベル処理が、自身より割り込み優先度が高い他のタスクレベル処理の実行が要求されることによって、自身が利用しているリソースを、その利用の途中で当該他のタスクレベル処理に利用されてしまうことを防ぎたい場合がある。すなわち、タスクレベル処理が、共有されるリソースを排他的に利用したい場合がある。
本実施形態のOSEK−OSでは、このような場合、これらタスクレベル処理間でのリソースへのアクセスの競合を避けて、当該リソースの排他的利用を実現するためのインターフェースとして、リソース取得プログラム、リソース解放プログラムを提供している。
割り込み優先度の低い方のタスクレベル処理は、排他的に利用したいリソースの利用開始時に、このリソース取得プログラムを呼び出す。また、利用を終えた当該リソースを他のタスクレベル処理が利用できるようにするために、このリソース解放プログラムを呼び出す。なお、リソース取得プログラム、リソース解放プログラムを呼び出すときは、引数として、排他利用の開始および終了の対象となるリソースの指定が、渡されるようになっている。
図13に、リソース取得プログラムのフローチャートを示す。
リソース取得プログラムが呼び出されると、まずCPU15は、ステップ610で、割り込み禁止の処理を行う。これは、図9のステップ310と同等の処理である。
続いてステップ620で、割り込みコントローラ14のIntLvlレジスタ149の現在の値をRAM16に記憶する。
続いてステップ630で、IntLvlレジスタ149の値を、取得するリソースのレベルの値に書き換える。取得するリソースとは、今から排他利用したいリソースをいい、リソース取得プログラムの呼び出し元から引数として渡されたリソースをいう。リソースのレベルとは、エンジンECU1の各リソースに割り当てられた割り込み優先度の値である。この値は、当該リソースを共有するタスクレベル処理の割り込み優先度のうち、最も高い割り込み優先度の値と同じである。各リソースのレベルは、エンジンECU1の設計時にあらかじめ定められ、ROM17にその情報が記憶されている。
続いてステップ640で、割り込み許可を行う。これは、図9のステップ350と同等の処理である。そして、このプログラムの実行は終了し、CPU15は、呼び出し元のプログラムの実行を再開する。
このようなリソース取得プログラムをCPU15が実行することで、IntLvlレジスタ149は、現実に実行されているタスクレベル処理の割り込み優先度より優先度の高いことを示す値を記憶するようになる。
このとき、CPU15から割り込みコントローラ14に対して、当該リソースを利用する他のタスクレベル処理に対応する割り込み信号の出力要求が為された場合を考える。このとき、IntLvlレジスタ149の値は、この割り込み信号の割り込み優先度と同じ、またはそれよりも高い優先度を示す。なぜなら、IntLvlレジスタ149の値は、当該リソースを共有するタスクレベル処理の優先度のうち、最も高い優先度を示す値となっているので、これより優先度が高い値を示し、かつ当該リソースを利用するタスクレベル処理は存在しないからである。
従って、IntLvlレジスタ149と当該割り込み信号に対応する割り込みレジスタの割り込み優先度53の値との比較の結果、割り込みコントローラ14から割り込み信号が出力されない。すなわち、リソース取得プログラムの呼び出し元のタスクレベル処理は、当該リソースを、他のタスクレベル処理による利用を排した形で、利用することができるようになる。
次に、図14に、リソース解放プログラムのフローチャートを示す。
リソース解放プログラムが呼び出されると、まずCPU15は、ステップ650で、割り込み禁止の処理を行う。これは、図9のステップ310と同等の処理である。
続いてステップ660で、リソース取得時にRAM16に記憶したIntLvlレジスタ149の値を、IntLvlレジスタ149に書き込む。
続いてステップ670で、割り込み許可を行う。これは、図9のステップ670と同等の処理である。そして、このプログラムの実行は終了し、CPU15は、呼び出し元のプログラムの実行を再開する。
このようなリソース解放プログラムを実行することで、IntLvlレジスタ149の値はリソース取得前の値に戻る。これにより、リソース取得プログラムが呼び出されてから、リソース解放プログラムが呼び出されるまでの間に、より割り込み優先度が高く、かつ当該リソースを利用するタスクレベル処理に対応する割り込み信号の出力要求があった場合、リソース解放プログラムの実行後すぐ、そのタスクレベル処理が実行されることになる。すなわち、他のタスクレベル処理が当該リソースを利用できるようになる。
(第3実施形態)
次に、本発明の第3実施形態について説明する。なお、以下では、本実施形態が第2実施形態と異なる部分についてのみ詳細に説明する。本実施形態は、現在実行中のタスクレベル処理の優先度を擬似的に特定の優先度に高めるためのインターフェースとして、OSEK−OSがリソース取得プログラム、リソース解放プログラムを提供する点は、第2実施形態と同じである。
ただし、本実施形態のリソース取得プログラムは、第2実施形態と異なり、割り込みコントローラ14の割り込みレジスタの割り込み優先度53の値を現在実行中のタスクレベル処理の優先度以下の優先度に書き換えることで、当該リソースの排他的利用を実現するようになっている。
なお、このために本実施形態の割り込みコントローラ14は、CPU15の書き換え制御によって、第3〜第7割り込みレジスタ143〜147の割り込み優先度53の値が書き換わるようになっている。また割り込みコントローラ14は、CPU15の制御によって割り込み優先度53の値が書き換わったことを検出すると、第1実施形態において説明した、CPU15または外部入出力回路11から割り込み信号の出力の要求を信号として受けて割り込みフラグ51等を書き換えた後の作動と同等の作動を行う。
図15に、リソース取得プログラムのフローチャートを示す。
リソース取得プログラムが呼び出されると、まずCPU15は、ステップ705で、割り込み禁止の処理を行う。これは、図9のステップ310と同等の処理である。
続いてステップ710で、現在実行しているタスクレベル処理の割り込み優先度をRAM16に記憶する。
続いてステップ715では、取得するリソースの優先度の値が7(アイドルタスクの優先度に相当する)であるか否かを判定する。7であれば続いてステップ775の処理を実行し、7でなければ続いてステップ720の処理を実行する。
ステップ720では、取得するリソースの優先度の値が6(低優先タスクの優先度に相当する)であるか否かを判定する。6であれば続いてステップ765の処理を実行し、6でなければ続いてステップ725の処理を実行する。
ステップ725では、取得するリソースの優先度の値が5(中優先タスクの優先度に相当する)であるか否かを判定する。5であれば続いてステップ755の処理を実行し、6でなければ続いてステップ730の処理を実行する。
ステップ730では、取得するリソースの優先度の値が4(高優先タスクの優先度に相当する)であるか否かを判定する。4であれば続いてステップ745の処理を実行し、6でなければ続いてステップ735の処理を実行する。
ステップ735では、ステップ710でRAM16に記憶した現在実行しているタスクレベル処理の割り込み優先度の値が3より大きい(最高優先タスクより優先度が低い)か否かを判定する。3より大きければ続いてステップ740の処理を実行し、3以下であれば続いてステップ775の処理を実行する。
ステップ740では、最高優先タスク用割り込み優先度の値を7にする。具体的には第3割り込みレジスタ143の割り込み優先度53の値を7に書き換える制御を行う。
ステップ745では、ステップ710でRAM16に記憶した現在実行しているタスクレベル処理の割り込み優先度の値が4より大きい(高優先タスクより優先度が低い)か否かを判定する。4より大きければ続いてステップ750の処理を実行し、4以下であれば続いてステップ775の処理を実行する。
ステップ750では、高優先タスク用割り込み優先度の値を7にする。具体的には第4割り込みレジスタ144の割り込み優先度53の値を7に書き換える制御を行う。
ステップ755では、ステップ710でRAM16に記憶した現在実行しているタスクレベル処理の割り込み優先度の値が5より大きい(中優先タスクより優先度が低い)か否かを判定する。5より大きければ続いてステップ760の処理を実行し、5以下であれば続いてステップ775の処理を実行する。
ステップ760では、中優先タスク用割り込み優先度の値を7にする。具体的には第5割り込みレジスタ145の割り込み優先度53の値を7に書き換える制御を行う。
ステップ765では、ステップ710でRAM16に記憶した現在実行しているタスクレベル処理の割り込み優先度の値が6より大きい(低優先タスクより優先度が低い)か否かを判定する。6より大きければ続いてステップ770の処理を実行し、6以下であれば続いてステップ775の処理を実行する。
ステップ770では、低優先タスク用割り込み優先度の値を7にする。具体的には第6割り込みレジスタ146の割り込み優先度53の値を7に書き換える制御を行う。
ステップ775では、割り込み許可を行う。これは、図9のステップ350と同等の処理である。ステップ850の後、このプログラムの実行は終了し、CPU15は、呼び出し元のタスクレベル処理の実行を再開する。
このようなリソース取得プログラムをCPU15が実行することで、現在実行しているタスクレベル処理(すなわちリソース取得プログラムの呼び出し元のタスクレベル処理)の割り込み優先度より優先度が高く、かつ取得するリソースの優先度と比べて優先度が同等または低い割り込み信号に対応する割り込みレジスタの割り込み優先度53の値を7(最も優先度の低いアイドルタスク)に変更する。
このとき、CPU15から割り込みコントローラ14に対して、当該リソースを利用する他のタスクレベル処理に対応する、より優先度の高い割り込み信号の出力要求が為された場合を考える。このとき、当該割り込み信号に対応する割り込みレジスタの割り込み優先度53の値は7となっている。また、IntLvlレジスタ149の値は、リソース取得プログラムの呼び出し元のタスクレベル処理の優先度の値となっている。
従って、IntLvlレジスタ149と当該割り込み信号に対応する割り込みレジスタの割り込み優先度53の値との比較の結果、割り込みコントローラ14からは割り込み信号が出力されない。すなわち、リソース取得プログラムの呼び出し元のタスクレベル処理は、当該リソースを、他のタスクレベル処理による利用を排した形で、利用することができるようになる。
次に、図16に、本実施形態におけるリソース解放プログラムのフローチャートを示す。このリソース取得プログラムが呼び出されると、まずCPU15は、ステップ805で、割り込み禁止の処理を行う。これは、図9のステップ310と同等の処理である。
続いて、ステップ810では、リソース取得時に記憶した優先度の値、すなわち、直前のリソース解放プログラムのステップ710の実行においてRAM16に記憶したIntLvlレジスタ149の値が3(最高優先タスク)であるか否かを判定する。3であれば続いてステップ850の処理を実行し、3でなければ続いてステップ815の処理を実行する。
ステップ815では、リソース取得時に記憶した優先度の値が4(高優先タスク)であるか否かを判定する。4であれば続いてステップ845の処理を実行し、4でなければ続いてステップ820の処理を実行する。
ステップ820では、リソース取得時に記憶した優先度の値が5(中優先タスク)であるか否かを判定する。5であれば続いてステップ840の処理を実行し、5でなければ続いてステップ825の処理を実行する。
ステップ825では、リソース取得時に記憶した優先度の値が6(低優先タスク)であるか否かを判定する。6であれば続いてステップ835の処理を実行し、4でなければ続いてステップ830の処理を実行する。
ステップ830では、低優先タスク用割り込み優先度の値、すなわち、第6割り込みレジスタ146の割り込み優先度53の値を6に書き換える。
ステップ835では、中優先タスク用割り込み優先度の値、すなわち、第5割り込みレジスタ145の割り込み優先度53の値を5に書き換える。
ステップ840では、高優先タスク用割り込み優先度の値、すなわち、第4割り込みレジスタ144の割り込み優先度53の値を4に書き換える。
ステップ845では、最高優先タスク用割り込み優先度の値、すなわち、第3割り込みレジスタ143の割り込み優先度53の値を3に書き換える。
ステップ850では、割り込み許可を行う。これは、図9のステップ350と同等の処理である。そして、このプログラムの実行は終了し、CPU15は、呼び出し元のタスクレベル処理の実行を再開する。
このようなリソース取得プログラムをCPU15が実行することで、リソース解放プログラムの呼び出し元のタスクレベル処理の割り込み優先度より優先度が高く、かつ取得するリソースの優先度と比べて優先度が同等または低い割り込み信号に対応する割り込みレジスタの割り込み優先度53の値を、リソース取得プログラムが呼び出される前の値に戻す。その結果、第3〜第7割り込みレジスタ143〜147の割り込み優先度53の値は、それぞれ3、4、5、6、7となる。これにより、リソース取得プログラムが呼び出されてから、リソース解放プログラムが呼び出されるまでの間に、より割り込み優先度が高く、かつ当該リソースを利用するタスクレベル処理に対応する割り込み信号の出力要求があった場合、リソース解放プログラムの実行後すぐに、そのタスクレベル処理が実行されることになる。すなわち、他のタスクレベル処理が当該リソースを利用できるようになる。
(第4実施形態)
次に、本発明の第4実施形態について説明する。以下、本実施形態が第1実施形態と異なる部分についてのみ詳細に説明する。第1実施形態においては、同一の割り込み信号に複数種類のタスクレベル処理が割り当てられているが、本実施形態では、1つの割り込み信号にはただ1つタスクレベル処理が割り当てられており、かつ、1つの優先度にはただ1つのタスクレベル処理が割り当てられている。従って、CPU15において実行されるタスクレベル処理の総数と、タスクレベル処理用の割り込みレジスタの数とは等しくなる。
このように、タスクレベル処理毎に優先度および割り込み信号があるような場合に、多重割り込み機能を利用したタスクスケジューリングを行うため、本実施形態の割り込みコントローラ14における割り込みレジスタのデータの格納形式は、図17のようになっている。
すなわち、割り込みコントローラ14のタスクレベル処理用の、割り込みレジスタはそれぞれ、割り込みフラグ51、割り込みマスクフラグ52、割り込み優先度53、カウンタ54のデータ領域を有している。割り込みフラグ51、割り込みマスクフラグ52、割り込み優先度53に格納されるデータは、第1実施形態と同様である。
本実施形態の割り込みコントローラ14の作動は、第1実施形態の割り込みコントローラ14と同じである。ただし、割り込み信号出力の要求を受けた場合、および割り込み要求消去の信号を受けたときの、割り込みレジスタに格納された値の書き換えの作動は、以下のようになっている。
すなわち、割り込みコントローラ14は、CPU15からタスクレベル処理用の割り込み信号の出力の要求を信号として受けると、その要求信号に含まれる情報から、その要求信号が、第0〜第7割り込みレジスタ140〜147のうちどの割り込みレジスタを指定しているかを特定し、その特定した割り込みレジスタのカウンタ54に格納されている値を1段階分(例えば1)だけ増加させる。そしてその際、当該割り込み信号の出力の要求に基づいて、割り込みフラグ51および割り込みマスクフラグ52の値がそれぞれ1(オン)および0(オフ)にセットされる。
また割り込みコントローラ14は、CPU15または外部入出力回路11から割り込み要求消去の信号を受けると、その要求信号に含まれる情報から、その要求信号が、第0〜第7割り込みレジスタ140〜147のうちどの割り込みレジスタを指定しているかを特定し、その特定した割り込みレジスタのカウンタ54に格納されている値を1段階分だけ減少させる。そして、カウンタ54の値が、当該割り込みレジスタに対応する割り込み信号の要求を受けていない状態を示す値(例えば0)であれば、割り込みフラグ51の値を0に書き換える。
このような割り込みコントローラ14の作動によって、カウンタ54は、各割り込み信号毎の計数データを記憶する計数記憶媒体として機能する。
また、本実施形態においては、RAM16にReadyキュー162の領域はない。
これに対応して、CPU15は、図10に示したタスク用割り込みの実行において、本実施形態においては、ステップ340の処理は実行せず、ステップ360において、受けた割り込み信号に対応する唯一のタスクの実行を開始するようになっている。
また、CPU15は、図11に示したアクティベートタスクの実行において、ステップ420の処理を実行しない。
また、CPU15は、図12に示したターミネートタスクの実行において、ステップ530、570、580、590の処理は実行せず、ステップ520に続いてステップ540の処理を実行するようになっている。
このようになっていることで、割り込みコントローラ14は、あるタスクレベル処理に対応した割り込み信号の出力要求を受けると、その割り込み信号についての計数データの値を1段階増加させ、またある割り込み信号を演算装置に出力した後の規定のタイミング、具体的には図12のステップ540の処理を実行するタイミング、その割り込み信号についての計数データの値を1段階減少させるようになる。
このようにすることで、CPU15は、同一のタスクレベル処理のプログラムが複数起動要求された場合でも、このカウンタ54にその実行要求の回数が反映されるので、Readyキュー162を用いずに、これら複数の同じタスクレベル処理についてのタスクスケジューリングを実現することができる。また、本実施形態においては、CPU15は、同一タスクレベル処理の実行要求のソフト的な計数、(具体的には上記したステップ340、360、570の処理を)行う必要がないので、CPU15の処理負荷が低減される。また、割り込み信号の要求をする必要があるか否かの判定(具体的には上記したステップ530の判定処理)を行う必要がないので、CPU15の処理負荷が低減される。
なお、割り込み信号を演算装置に出力した後の規定のタイミングとしては、当該割り込み信号を出力した時点であってもよい。
(他の実施形態)
なお、上記した各実施形態において、図10のステップ320のコンテキスト待避処理、図12のステップ550のコンテキスト復帰処理においては、CPU15のレジスタとRAM16との間のデータの移動のための読み出し、書き込み処理が行われているが、必ずしもこのようになっている必要はない。
例えば、従来のマイクロコンピュータにおいては、割り込み信号の発生時における待避、コンテキスト待避、コンテキスト復帰の処理のために、複数のCPUのレジスタセットを有し、割り込み発生時のコンテキスト待避においては、用いるレジスタセットを現在とは別のものに切り替え、コンテキスト復帰においては、用いるレジスタセットを元に戻すようにしているものがある。
上記した実施形態におけるマイクロコンピュータ12として、このような複数のレジスタセットを有するマイクロコンピュータを用いて、上記したステップ320において、用いるレジスタセットを現在とは別の使用していないレジスタセットに切り替え、ステップ570においては、用いるレジスタセットを、1つ前に用いていたレジスタセットに切り替えるようにすることができる。このようにすれば、コンテキスト待避および復帰の際に、RAM16とレジスタとの間でのデータの移動のための処理が不要となる。
なお、上記した各実施形態において、割り込みコントローラ14が多重割り込み手段に相当する。
また、図9〜図16に示したプログラムが、割り込み依頼プログラムに相当する。
また、CPU15が、図15に示したアクティベートタスクを実行することで、割り込み要求手段として機能する。
また、CPU15が、図10に示したタスク用割り込みを実行することで、割り込み対応手段として機能する。
また、CPU15が、図12に示したターミネートタスクを実行することで、終了処理手段として機能する。
また、CPU15が、図13、図14に示したリソース取得プログラム、リソース解放プログラムを実行することで、現在優先度書き換え手段として機能する。
また、CPU15が、図15、図16に示したリソース取得プログラム、リソース解放プログラムを実行することで、割り込み優先度書き換え手段として機能する。
エンジンECU1の構成を示す図である。 割り込みコントローラ14、CPU15、RAM16、ROM17のそれぞれにおける記憶媒体のデータ構成を示す図である。 第0〜第7割り込みレジスタ140〜147のデータの格納形式を示す図である。 図4に、割り込み優先度と、その割り込み優先度に割り当てられるプログラムの対応関係を示す。 タスクA、タスクB、タスクCおよび割り込みXのCPU15における実行タイミングを表すタイミング図である。 タスクAのフローチャートである。 タスクBのフローチャートである。 タスクCのフローチャートである。 割り込みXのフローチャートである。 タスク用割り込みプログラムのフローチャートである。 アクティベートタスクのプログラムのフローチャートである。 ターミネートタスクのプログラムのフローチャートである。 第2実施形態におけるリソース取得プログラムのフローチャートである。 第2実施形態におけるリソース解放プログラムのフローチャートである。 第3実施形態におけるリソース取得プログラムのフローチャートである。 第3実施形態におけるリソース解放プログラムのフローチャートである。 第4実施形態における第0〜第7割り込みレジスタ140〜147のデータの格納形式を示す図である。
符号の説明
1…エンジンECU、2…エンジン、3…エンジン冷却水、4…電子スロットル、
11…外部入出力回路、12…マイクロコンピュータ、14…割り込みコントローラ、
15…CPU、16…RAM、17…ROM、21…イグナイタ、
22…インジェクタ、23…クランクセンサ、31…水温センサ、
41…スロットルセンサ、51…割り込みフラグ、52…割り込みマスクフラグ、
53…割り込み優先度、54…カウンタ、61〜66…矢印61、
140…第0割り込みレジスタ、141…第1割り込みレジスタ、
142…第2割り込みレジスタ、143…第3割り込みレジスタ、
144…第4割り込みレジスタ、145…第5割り込みレジスタ、
146…第6割り込みレジスタ、147…第7割り込みレジスタ、
148…禁止フラグレジスタ、149…IntLvlレジスタ、
150…旧IntLvlレジスタ、151…演算結果レジスタ、
152…演算結果レジスタ、161…スタック、162…Readyキュー、
163…制御用変数領域、171…割り込みベクタ、172…プログラム、
173…制御用定数。

Claims (9)

  1. 出力を要求された複数の割り込み信号のうち最も優先度の高いものを特定して出力する多重割り込み手段、からの割り込み信号に対応した処理を実行する演算装置を、
    タスクレベル処理の実行の要求を受けたことに基づいて、前記多重割り込み手段に当該タスクレベル処理に対応した割り込み信号を出力するよう要求する割り込み要求手段として機能させる割り込み依頼プログラム。
  2. 前記割り込み要求手段は、同一の割り込み信号に複数種類のタスクレベル処理を割り当てていることを特徴とする請求項1に記載の割り込み依頼プログラム。
  3. 前記演算装置を、前記多重割り込み手段からの割り込み信号に対応した処理を実行する割り込み対応手段として機能させ、
    前記割り込み要求手段は、タスクレベル処理の実行の要求を受けたことに基づいて、このタスクレベル処理とこのタスクレベル処理の優先度とが対応づけられた実行待ちタスク情報を記憶媒体に記憶させ、このタスクレベル処理の優先度に対応した割り込み信号を出力するよう要求し、
    前記割り込み対応手段は、前記記憶媒体に記憶された実行待ちタスク情報のうち、前記多重割り込み手段からの割り込み信号の優先度に対応したタスクレベル処理の中で、最も古く記憶されたタスクレベル処理を実行することを特徴とする請求項2に記載の割り込み依頼プログラム。
  4. 前記演算装置を、この演算装置によるタスクレベル処理の実行が完了するとき、処理完了通知を前記多重割り込み手段に対して行う終了処理手段として機能させ、
    前記多重割り込み手段は、前記演算装置から前記処理完了通知を受けることに基づいて、出力を要求された複数の割り込み信号のうち最も優先度の高いものを特定して出力することを特徴とする請求項1ないし3に記載の割り込み依頼プログラム。
  5. 前記演算装置を、この演算装置によるタスクレベル処理の実行が完了するとき、このタスクレベル処理と同じ優先度のタスクレベル処理が前記実行待ちタスク情報として前記記憶媒体に記憶されている場合、続いて当該記憶されているタスクレベル処理の1つを続いて実行し、そうでない場合、処理完了通知を前記多重割り込み手段に対して行う終了処理手段として機能させ、
    前記多重割り込み手段は、前記演算装置から前記処理完了通知を受けることに基づいて、出力を要求された複数の割り込み信号のうち最も優先度の高いものを特定して出力することを特徴とする請求項2または3に記載の割り込み依頼プログラム。
  6. 前記多重割り込み手段は、直前に出力した割り込み信号の優先度を記憶するための現在優先度記憶媒体を有し、出力を要求された複数の割り込み信号のうち最も優先度の高いものを特定し、この特定したものの優先度がこの現在優先度記憶媒体に記憶された優先度より高ければそれを出力するようになっており、
    前記演算装置を、現在実行中のタスクレベル処理の優先度を擬似的に高めるため、前記多重割り込み手段の前記現在優先度記憶媒体が記憶する優先度をより高い優先度に書き換える現在優先度書き換え手段として機能させることを特徴とする請求項1ないし5のいずれか1つに記載の割り込み依頼プログラム。
  7. 前記多重割り込み手段は、直前に出力した割り込み信号の優先度を記憶するための現在優先度記憶媒体を有し、更に割り込み信号とその割り込み信号の優先度とを対応づける情報を記憶するための割り込み優先度記憶媒体を有し、出力を要求された複数の割り込み信号のうち最も優先度の高いものを特定し、この特定したものの優先度がこの現在優先度記憶媒体に記憶された優先度より高ければそれを出力するようになっており、
    前記演算装置を、現在実行中のタスクレベル処理の優先度を擬似的に特定の優先度に高めるため、前記多重割り込み手段の前記割り込み優先度記憶媒体が記憶する情報のうち、前記特定の優先度以上の優先度を有する情報を、現在実行中のタスクレベル処理の優先度以下の優先度に書き換える割り込み優先度書き換え手段として機能させることを特徴とする請求項1ないし5のいずれか1つに記載の割り込み依頼プログラム。
  8. 前記割り込み要求手段は、1つの割り込み信号には1種類のタスクレベル処理を割り当てており、
    前記多重割り込み手段は、各割り込み信号毎の計数データを記憶する計数記憶媒体を有し、ある種類のタスクレベル処理に対応した割り込み信号の出力要求を受けると、その割り込み信号についての計数データの値を1段階増加させ、またある割り込み信号を演算装置に出力した後の規定のタイミングで、その割り込み信号についての計数データの値を1段階減少させることを特徴とする請求項1に記載の割り込み依頼プログラム。
  9. 出力を要求された複数の割り込み信号のうち最も優先度の高いものを特定して出力する多重割り込み手段、からの割り込み信号に対応した処理を実行する割り込み対応手段と、
    タスクレベル処理の実行の要求を受けたことに基づいて、前記多重割り込み手段に当該タスクレベル処理に対応した割り込み信号を出力するよう要求する割り込み要求手段と、を備えたマイクロコンピュータ。
JP2004092067A 2004-03-26 2004-03-26 制御ユニットおよびマイクロコンピュータ Expired - Fee Related JP4241462B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2004092067A JP4241462B2 (ja) 2004-03-26 2004-03-26 制御ユニットおよびマイクロコンピュータ
DE102005013913A DE102005013913A1 (de) 2004-03-26 2005-03-24 Unterbrechungsanforderungsprogramm und Mikrocomputer
US11/089,309 US7269678B2 (en) 2004-03-26 2005-03-25 Interrupt request program and microcomputer

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004092067A JP4241462B2 (ja) 2004-03-26 2004-03-26 制御ユニットおよびマイクロコンピュータ

Publications (2)

Publication Number Publication Date
JP2005276097A true JP2005276097A (ja) 2005-10-06
JP4241462B2 JP4241462B2 (ja) 2009-03-18

Family

ID=34991490

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004092067A Expired - Fee Related JP4241462B2 (ja) 2004-03-26 2004-03-26 制御ユニットおよびマイクロコンピュータ

Country Status (3)

Country Link
US (1) US7269678B2 (ja)
JP (1) JP4241462B2 (ja)
DE (1) DE102005013913A1 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008243032A (ja) * 2007-03-28 2008-10-09 Nomura Research Institute Ltd ジョブの実行順序制御装置、方法及びプログラム
JP2009147102A (ja) * 2007-12-14 2009-07-02 Tecdia Kk 光通信用デバイスの制御方式及び光通信用デバイスの制御方法

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7260663B2 (en) * 2005-04-07 2007-08-21 International Business Machines Corporation System and method for presenting interrupts
US7925815B1 (en) * 2006-06-29 2011-04-12 David Dunn Modifications to increase computer system security
US20080189487A1 (en) * 2007-02-06 2008-08-07 Arm Limited Control of cache transactions
US8316158B1 (en) * 2007-03-12 2012-11-20 Cypress Semiconductor Corporation Configuration of programmable device using a DMA controller
JP4624448B2 (ja) * 2008-07-30 2011-02-02 株式会社オートネットワーク技術研究所 制御装置、制御システム及びコンピュータプログラム
US9454737B2 (en) * 2008-08-29 2016-09-27 International Business Machines Corporation Solution that leverages an instant messaging system to manage ad hoc business process workflows
DE102008062692B4 (de) * 2008-12-17 2013-11-14 Texas Instruments Deutschland Gmbh Eingebettetes Mikrocontrollersystem und Verfahren zur Konfiguration eines eingebetteten Mikrocontrollersystems mit gesteuertem Schaltmodus
US8484648B2 (en) 2009-10-19 2013-07-09 International Business Machines Corporation Hardware multi-threading co-scheduling for parallel processing systems
US8560750B2 (en) 2011-05-25 2013-10-15 Lsi Corporation Systems and methods for advanced interrupt scheduling and priority processing in a storage system environment
JP5590069B2 (ja) * 2012-04-27 2014-09-17 株式会社デンソー マイクロコンピュータ
US10248463B2 (en) * 2015-02-13 2019-04-02 Honeywell International Inc. Apparatus and method for managing a plurality of threads in an operating system
JP6771272B2 (ja) * 2015-07-01 2020-10-21 日立オートモティブシステムズ株式会社 車載電子制御装置及びスタック使用方法
US10069949B2 (en) 2016-10-14 2018-09-04 Honeywell International Inc. System and method for enabling detection of messages having previously transited network devices in support of loop detection
US10810086B2 (en) 2017-10-19 2020-10-20 Honeywell International Inc. System and method for emulation of enhanced application module redundancy (EAM-R)
US10783026B2 (en) 2018-02-15 2020-09-22 Honeywell International Inc. Apparatus and method for detecting network problems on redundant token bus control network using traffic sensor

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4001783A (en) * 1975-03-26 1977-01-04 Honeywell Information Systems, Inc. Priority interrupt mechanism
US5613128A (en) * 1990-12-21 1997-03-18 Intel Corporation Programmable multi-processor interrupt controller system with a processor integrated local interrupt controller
JPH0588916A (ja) 1991-09-30 1993-04-09 Ricoh Co Ltd 割込制御装置
JPH06202887A (ja) 1992-12-28 1994-07-22 Matsushita Electric Ind Co Ltd マイクロコンピュータ
JPH06309179A (ja) 1993-04-20 1994-11-04 Oki Electric Ind Co Ltd 割り込み制御装置
US6418496B2 (en) * 1997-12-10 2002-07-09 Intel Corporation System and apparatus including lowest priority logic to select a processor to receive an interrupt message
US6298410B1 (en) * 1997-12-31 2001-10-02 Intel Corporation Apparatus and method for initiating hardware priority management by software controlled register access
JP3600095B2 (ja) * 1999-12-07 2004-12-08 松下電器産業株式会社 割り込み管理装置及び割り込み管理方法
US6983339B1 (en) * 2000-09-29 2006-01-03 Intel Corporation Method and apparatus for processing interrupts of a bus
JP2004234643A (ja) 2003-01-07 2004-08-19 Matsushita Electric Ind Co Ltd プロセススケジューリング装置、プロセススケジューリング方法、プロセススケジューリングのためのプログラム、及びプロセススケジューリングのためのプログラムを記録した記録媒体

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008243032A (ja) * 2007-03-28 2008-10-09 Nomura Research Institute Ltd ジョブの実行順序制御装置、方法及びプログラム
JP4685053B2 (ja) * 2007-03-28 2011-05-18 株式会社野村総合研究所 ジョブの実行順序制御装置、方法及びプログラム
JP2009147102A (ja) * 2007-12-14 2009-07-02 Tecdia Kk 光通信用デバイスの制御方式及び光通信用デバイスの制御方法

Also Published As

Publication number Publication date
US20050216635A1 (en) 2005-09-29
DE102005013913A1 (de) 2005-11-10
US7269678B2 (en) 2007-09-11
JP4241462B2 (ja) 2009-03-18

Similar Documents

Publication Publication Date Title
JP4241462B2 (ja) 制御ユニットおよびマイクロコンピュータ
US5469571A (en) Operating system architecture using multiple priority light weight kernel task based interrupt handling
US6675191B1 (en) Method of starting execution of threads simultaneously at a plurality of processors and device therefor
US7412590B2 (en) Information processing apparatus and context switching method
US7793296B2 (en) System and method for scheduling a multi-threaded processor
EP1685486B1 (en) Interrupt handling in an embedded multi-threaded processor to avoid priority inversion and maintain real-time operation
US6820155B1 (en) Interruption managing device and interruption managing method
US20100199283A1 (en) Data processing unit
US20090100200A1 (en) Channel-less multithreaded DMA controller
US20060112394A1 (en) Computer system
KR970016979A (ko) 다중 처리 시스템에서 타스크의 큐잉 시스템 및 방법
WO2009153620A1 (en) A system, method and computer program product for scheduling a processing entity task
US20040098722A1 (en) System, method, and computer program product for operating-system task management
US20120226842A1 (en) Enhanced prioritising and unifying interrupt controller
JP4206653B2 (ja) タスクスケジューリングシステムおよび方法、プログラム
JP2003515805A (ja) プロセッサシステム
US7930523B2 (en) Inter-CPU data transfer device
US20050050541A1 (en) Method of and apparatus for task control, and computer product
CA2769899C (en) Enhanced prioritising and unifying interrupt controller
US20050066093A1 (en) Real-time processor system and control method
JP7263746B2 (ja) 情報処理装置
JP2002073354A (ja) タスク制御装置とタスク制御方法
CN101751293B (zh) 程序的线程群组管理方法
JP2020135214A (ja) タスク管理装置
JP2020086807A (ja) 車両制御装置およびプログラム実行方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20060517

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20071227

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080115

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080314

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20080507

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080704

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20080827

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080930

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20081118

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20081209

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20081222

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120109

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 4241462

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130109

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140109

Year of fee payment: 5

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees