(57)【要約】周期タスクを的確に実施し、複数のオーバヘッド時間の累積による処理開始時間の遅れを防止することで、より細かな応答が可能な制御及び複数の指令に対して迅速かつ確実に応答可能な制御を行うリアルタイム制御システムを提供する。  入力信号を受信し各種タスク処理に対応した割込み信号を出力するドライバ部と、該割込み信号に基づいてポーリングするポーリング部と、前記割込み信号に基づきタスク処理をするタスク処理部と、を備えたリアルタイム制御システムであって、前記ポーリング部は、前記タスク終了時に前記ポーリングに基づきタスク処理信号を出力し、前記タスク処理部は、タスク処理信号に基づいて前記タスク処理をしてなる。
2005013130.tif 000002
【特許請求の範囲】
【請求項１】
入力信号を受信し各種タスク処理に対応した割込み信号を出力するドライバ部と、該割込み信号に基づいてポーリングするポーリング部と、前記割込み信号に基づきタスク処理をするタスク処理部と、を備えたリアルタイム制御システムであって、
前記ポーリング部は、前記タスク終了時に前記ポーリングに基づきタスク処理信号を出力し、前記タスク処理部は、タスク処理信号に基づいて前記タスク処理をすることを特徴とするリアルタイム制御システム。
【請求項２】
前記タスク処理部は、イベント処理を実行するイベント処理手段、及び該イベント処理の継続性を判定処理するタスク判定手段からなり、前記イベント処理手段は、前記判定結果が継続時に、前記イベント処理を継続実行することを特徴とする請求項１に記載のリアルタイム制御システム。
【請求項３】
前記イベント処理手段は、周期起動するイベント処理をすることを特徴とする請求項１又は２に記載のリアルタイム制御システム。
【請求項４】
前記ポーリング部は、タイマをポーリングし、前記タスク処理の開始時刻となる前記タスク処理信号を出力することを特徴とする請求項１〜３のいずれか一項に記載のリアルタイム制御システム。
【請求項５】
前記タスク判定手段は、前記タスク処理の継続回数、又は前記タスク処理中の割込み信号の有無に基づき、前記タスク処理の継続性を判定することを特徴とする請求項２〜４のいずれか一項に記載のリアルタイム制御システム。
【請求項６】
前記ドライバ部、前記タスク処理部、及び前記ポーリング部と通信し、前記割込み信号の受信に伴い起動し、前記判定結果を格納するスケジューラを備えることを特徴とする請求項２〜５のいずれか一項に記載のリアルタイム制御システム。
【請求項７】
前記スケジューラは、前記イベント処理手段に対応した周期を記録する周期テーブルを有し、前記タスク判定手段は、前記イベント処理の完了時に、前記周期テーブルの信号に基づき前記イベント処理の継続性を判定することを特徴とする請求項６に記載のリアルタイム制御システム。
【請求項８】
前記スケジューラは、前記タスク判定手段が起動中に、終了となる前記判定結果を格納するまでは、前記割込み信号が前記タスクに割込むことを禁止することを特徴とする請求項６又は７に記載のリアルタイム制御システム。
【請求項９】
前記ポーリング部は、前記タスク処理中に発生した前記割込み信号をポーリングし、該割込み信号に対応した前記イベント処理を実行する前記タスク処理信号を出力することを特徴とする請求項１又は２に記載のリアルタイム制御システム。
【請求項１０】
前記タスク判定手段は、前記タスク処理信号の有無に基づいて、前記イベント処理の継続性を判定することを特徴とする請求項９に記載のリアルタイム制御システム。
【請求項１１】
複数の前記タスク処理信号が、同時に検出された時は、前記タスク判定手段は、前記タスク処理信号の各々に優先順位を付けて、リードすることを特徴とする請求項２又は１０に記載のリアルタイム制御システム。
【請求項１２】
複数の前記タスク処理信号が、同時に検出された時は、前記タスク判定手段は、前記検出時に、前記イベント処理手段がイベント処理をしている処理に対応した前記タスク処理信号とは異なる信号を優先的にリードすることを特徴とする請求項２又は１０に記載のリアルタイム制御システム。
【発明の詳細な説明】
【技術分野】  本発明はリアルタイム制御システムに係り、特に、周期的なイベントを検出し、又は複数の信号のイベントを検出してタスク処理を行うリアルタイム制御システムに関する。
【背景技術】  自動車の制御コントローラ及びその他の産業機器の制御コントローラにおいて、制御対象からの信号を受信してから処理を開始するまでの応答性能を向上させ、かつ制約時間内に必要な処理を確実に実行し終了させるような、リアルタイム性が求められている。特に、自動車の制御応答性及び安全性の確保などを課題として所定の処理をリアルタイムに実行する必要性があるオペレーティングシステム（以下ＯＳと云う）においては、周期的にタスクを起動する周期タスクと、イベント発生時にタスクを起動するイベントタスクと、をサポートする必要がある。
例えば、非特許文献であるＯＳＥＫ／ＶＤＸ  Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ  ２．２．１に示される如きような自動車に搭載された標準的なＯＳは、タイムテーブルサービスという、周期的に複数のタスクを起動する機能を提供している。このタイムテーブルサービスを開始するシステムコールを実行すると、登録されたタスク群が、指定された周期毎に起動され、この起動により、周期タスクが、実現される。
このような、ＯＳを有したリアルタイム制御システムは、自動車のエンジン制御用のコントローラで用いられており、このコントローラは、周期タスクを用いて、時間駆動で動作するようにシステムが構築されることが多い。なぜなら、この方式では、タスクの実行間隔を調整することにより、演算負荷を調節しやすいことと、タスクの記述が簡素になることと、からである。この方式では、周期タスクは、最初に、イベントが発生しているかどうかを、入力モジュールのポーリングで判定し、発生時に、イベント処理を続けて行う。
ただし、特殊なエンジン制御では、ＯＳの定義する周期以下で、タスクを起動したいことがある。この場合は、周期タスク機能を用いることはできない。かわりに、タイマポーリング関数をタスク内にもち、次の周期時間になるまで、ポーリングを行うことになる。
また、非特許文献であるＯｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ  Ｃｏｍｃｅｐｔｓ  −Ｆｏｕｒｔｈ  Ｅｄｉｔｉｏｎ−ｐｐ．３０−３２（Ａｂｒａｈａｍ  Ｓｉｌｂｅｒｓｃｈａｔｚ著：Ａｄｄｉｓｏｎ−Ｗｅｓｌｅｙ  Ｐｕｂｌｉｓｈｉｎｇ  ｃｏｍｍｐａｎｙ出版）には、以下のようなリアルタイム制御システムが開示されている。このリアルタイム制御システムは、制御の応答性を高めるために、制御対象物からの入力を、割込み信号として、演算機に通知し、割込みを発生させ、実行中に処理を中断させ、割込みハンドラから、制御対象物の処理を行うタスクを起動し、実行する。また、割込み処理実行中のタスクのリアルタイム性を保証するため、そのタスクの割込み中は、割込み禁止にしている。
さらに、特開２００２−１８９６０６号公報の明細書には、周期的プログラムを一次停止し、再開するように構成することにより、再開時のオーバヘッド時間をなくすような周期タスク制御方法が開示されている。この他にも、特開２０００−２５０７６４号公報の明細書には、複数あるタクスを機能毎に細分化して、独立タスクとすることにより、アプリケーションの切り替えオーバヘッド時間を少なくする処理実行装置が開示されている。
このように、同一タスクを繰り返し周期的に実行するエンジン制御などの場合は、周期タクスの起動周期が、最低でも１ｍｓｅｃ程度であり、又はタイマを使用して複数のタスクを実行する場合は、入力間隔が、１ｍｓｅｃ程度であった。そして、これらの時間は、ＣＰＵ（５０〜６０ＭＨｚ動作）の処理速度に対して、比較的長い時間であるために、演算負荷はそれほど大きくなかった。しかし、最近では、環境対応の要求などにより、より細かい制御が必要となってきている。例えば、電駆弁などを用いた自動車用エンジンでは、従来の周期よりも一桁以上短い周期で制御することが求められている。又は、複数のタスクを実行する場合でも、より木目細かいタイミング（数１０ｕｓｅｃ）で制御することが求められている。
これらの条件を満たすためには、周期的にタスクを実行するような処理の場合は、その処理周期を短くする必要がある。従来の方法では、周期始めにあたる割込み処理に要するオーバヘッド時間は変えられないので、イベント処理の時間を短くなるような処理を行っている。しかし、これは、タイマ割込みの回数が多発するため、演算負荷が増大する。また、オーバヘッド時間よりも短い周期でタスクを実行することはできない。さらに、このような周期タスク方式では、各周期に発生するオーバヘッド時間が累積されることにより、イベントの検出が最大で１周期遅れる可能性もある。また、従来のタイマポーリング方式では、起動中のタスク以外のタスクを動作させることができないため、キャリブレーションなどの制御以外の処理を行えない。
さらに、複数の割込み処理を行う場合は、各々の処理が重複するような割込みを禁止しているので、それぞれ独立して、上記の処理が発生すため、各々の割込みには、オーバヘッド時間が数１０〜数１００ｕｓｅｃ必要となる。このオーバヘッド時間は、非常に大きいため、上述した、要求は満たせない。また、複数の割込みを順に処理するので、個々の割込みのオーバヘッド時間が累積されて全体として処理の時間がかかり、後に実行されるタスクほど、その開始が遅れ、さらに、割込みが多い時は、すべての割込みに対してその要求を満たせなことも考えられる。
このように、複数の割込みが連続的、又は同時に発生した時に、個々の割込み時に発生するオーバヘッド時間を軽減するような構成に関わる技術は、これまでに開示されていない。
本発明は、このような問題に鑑みてなされたものであって、その目的とするところは、周期性のあるイベントが発生した場合又は複数のイベントが同時に発生した場合において、周期タスクを的確に実施し、複数のオーバヘッド時間の累積による処理開始時間の遅れを防止することで、より細かな応答が可能な制御及び複数の指令に対して迅速かつ確実に応答可能な制御を行うリアルタイム制御システムを提供することにある。
【発明の開示】
前記目的を達成すべく、本発明に係るリアルタイム制御システムは、入力信号を受信し各種タスク処理に対応した割込み信号を出力するドライバ部と、該割込み信号に基づいてポーリングするポーリング部と、前記割込み信号に基づきタスク処理をするタスク処理部と、を備えたリアルタイム制御システムであって、前記ポーリング部は、前記タスク終了時に前記ポーリングに基づきタスク処理信号を出力し、前記タスク処理部は、前記タスク処理信号に基づいてタスク処理をする。
前記のごとく構成された本発明のリアルタイム制御システムは、ドライバ部で、割込み処理をし、割込み信号に基づいてタスク処理を行ない、それ以降の割込み信号は、ドライバ部で割込み処理を行なわず、ポーリング部からのタスク処理信号に基づいてタスク処理される。すなわち、イベント処理をする際には、ドライバ部から、繰り返して割込み信号を受信して、タスクを起動しなくてもよく、タスク処理が連続時には、オーバヘッド時間は、初回の一回となる。
本発明に係るリアルタイム制御システムは、前記タスク処理部が、イベント処理を実行するイベント処理手段、及び該イベント処理の継続性を判定処理するタスク判定手段からなり、前記イベント処理手段は、前記判定結果が継続時に、前記イベント処理を継続実行する。
前記のごとく構成された本発明のリアルタイム制御システムは、入力信号に合わせたイベント処理手段を備えたとしても、タスク処理中に連続的又は同時に入力された複数の入力信号は、タスク判定処理を行なうので、一連の処理であるとみなすためオーバヘッド時間は、タスク処理始めの一回のみとなる。また、間隔が開いた入力の場合は、オーバヘッド時間とポーリング部の処理時間が発生するが、ポーリング部の処理時間は、それほどの時間は要しないので、全体としての時間に影響はない。
本発明に係るリアルタイム制御システムは、前記イベント処理手段が、周期起動するイベント処理をし、タスク判定手段で判定されたイベント処理の継続又は終了の判定に従って、処理の実行を決定する。
前記のごとく構成された本発明のリアルタイム制御システムは、周期起動を行う際には、タスク内でイベント処理の継続又は終了の判定を行い、イベント処理手段のイベント処理の動作を決定するので、周期毎に、発生していたオーバヘッド時間は、周期起動時に一回発生するのみである。
本発明に係るリアルタイム制御システムは、前記ポーリング部が、現時点の時刻をタイマからポーリングし、このポーリング結果を基づいて、前記イベント処理手段の開始時刻となるタスク処理信号を出力する。
前記のごとく構成された本発明のリアルタイム制御システムは、周期起動をするようなタスク処理の場合には、タスク処理信号が、タスク処理の開始時刻となる信号であってもよく、この開始時刻を決める信号は、本発明のシステムの外部のタイマをコールし、ドライバ部を経由して開始時刻決定をするすることがないので、開始時刻をより早くタスク内の処理手段に送信することができる。
本発明に係るリアルタイム制御システムは、前記タスク判定手段が、前記タスク処理の継続回数、又は前記タスク処理中の割込み信号の有無に基づき、前記タスク処理の継続性を判定する。
前記のごとく構成された本発明のリアルタイム制御システムは、イベント処理の継続性を、その信号の割込み、イベント処理の内容、などのに合わせて決定できる。
本発明に係るリアルタイム制御システムは、前記ドライバ部、前記タスク処理部、及び前記ポーリング部と通信し、前記割込み信号の受信に伴い起動し、前記判定結果を格納するスケジューラを備える。
前記のごとく構成された本発明のリアルタイム制御システムは、ドライバ部、タスク、及びポーリング部が相互通信を行う時にスケジューラにデータを一時格納することが可能となり、効率のよいタイミングにスケジューラからデータを伝達することができる。
本発明に係るリアルタイム制御システムは、前記スケジューラが、前記イベント処理手段に対応した周期を記録する周期テーブルを有し、前記イベント処理の完了時に、前記タスク判定手段は、前記周期テーブルから前記イベント処理の継続性を判定する。
前記のごとく構成された本発明のリアルタイム制御システムは、スケジューラに処理に対応した周期テーブルを設けているので、先に示したタイマからポーリングした時刻と、周期テーブルの周期から、ポーリング部で、対応したタスク処理の開始時刻を算出し、それらのデータをタスク処理部に送信することができる。また、周期テーブルから、イベント処理手段に周期性があるかの判定をすることが可能となり、この判定結果からも、イベント処理を継続するか決定できる。さらに、周期テーブルをスケジューラ内に設けているが、周期テーブルはスケジューラ外に設け、スケジューラが周期テーブルの周期を受信してもよい。
本発明に係るリアルタイム制御システムは、前記スケジューラが、前記タスク判定手段が起動中に、終了となる前記判定結果を格納するまでは、前記割込み信号が前記タスクに割込むことを禁止する。
前記のごとく構成された本発明のリアルタイム制御システムは、イベント処理途中に割込み信号の割込みを禁止しているので、タクス処理中に、割込みの影響を受けることが無く、確実に処理を実行できる。
本発明に係るリアルタイム制御システムは、前記ポーリング部が、前記イベント処理中に発生した前記割込み信号をポーリングし、該割込み信号に対応した前記イベント処理を実行するタスク処理信号を出力する。
前記のごとく構成された本発明のリアルタイム制御システムは、イベント処理中に、次のイベント処理の要求が発生したとしても、ポーリングしているので、このような割込みを禁止し再度ドライバ部に入力信号を送信する必要がない。よって、個々の割込み時に、オーバヘッド時間は発生しない。
本発明に係るリアルタイム制御システムは、前記タスク判定手段が、前記タスク処理信号の有無に基づいて、前記イベント処理の継続性を判定する。
前記のごとく構成された本発明のリアルタイム制御システムは、割込み信号がタスク処理信号であり、割込みが無い時は、イベント処理は終了することができる。
また、本発明に係るリアルタイム制御システムは、複数の前記タスク処理信号が、同時に検出された時に、前記タスク判定手段が、前記タスク処理信号の各々に優先順位を付けて、リードする。また、本発明に係るリアルタイム制御システムは、複数の前記タスク処理信号が、同時に検出された時は、前記タスク判定手段が、前記検出時に、前記イベント処理手段がイベント処理をしている処理に対応した前記タスク処理信号とは異なる信号を優先的にリードする。
前記のごとく構成された本発明のリアルタイム制御システムは、それぞれの入力信号に対応したイベント処理手段を実行し、複数の入力信号が入力されたときは、その処置順序に優先順位を付けたり、連続して同じ信号を処理しないような条件を設定してもよく、このように設定することで、割込みの要求に対応したイベント処理を的確に満すことができる。
【図面の簡単な説明】図１は、本発明の実施形態に係るコントローラのハードウェアの構成を示すブロック図である。
図２は、本発明に係るリアルタイム制御システムの第一の実施形態を示すブロック図である。
図３は、タスクＩＤと、割込み因子に基づくイベントと、の対応を示すイベントテーブルである。
図４は、イベント毎の周期時間を示したテーブルである。
図５は、第一の実施形態に係るスケジューラの処理内容を示す制御フロー図である。
図６は、タスクのタスク処理内容を示す制御フロー図である。
図７は、タイマポーリング部の処理の詳細を示す制御フロー図である。
図８は、従来のイベント周期型タスクの処理を示すタイミングチャートである。
図９は、本実施形態に係るイベント周期型タスクの処理を示すタイミングチャートである。
図１０は、本発明に係るリアルタイム制御システムの第二の実施形態を示すブロック図である。
図１１は、第二の実施形態に係るタスクのタスク処理内容を示す制御フロー図である。
図１２は、図１１のポーリング処理内容を示す制御フロー図である。
図１３は、入力Ａの処理中に入力Ｂが入力された時の従来のタイミングチャートである。
図１４は、入力Ａの処理中に入力Ｂが入力された時の第二の実施形態に係るタイミングチャートである。
図１５は、入力Ａ処理後に入力Ｂが入力された時の第二の実施形態に係るタイミングチャートである。
【発明を実施するための最良の形態】  以下、本発明に係るリアルタイム制御システムの実施形態を図面に基づき詳細に説明する。
図１は、本発明の一実施形態に係るリアルタイム制御システム（コントローラ）１０のハードウェアの構成を示す制御ブロック図である。図１に示すように、コントローラ１０は、ＣＰＵ１１（演算装置）、メモリ１２出力モジュール１３、及び入力モジュール１４、からなり、これらのハードウェアは、バスにより結合されている。
入力モジュール１４は、入力信号である入力Ａ及び入力Ｂを処理するハードウェアである。入力信号をレジスタに反映し、必要ならば、ＣＰＵ１１に割込みを入れる。そして、この入力モジュール１４は、１つ以上の入力信号を受けることが可能であり、信号が入力される毎に、ＣＰＵ１１に割込みを入れることができる。具体的には、入力モジュール１４は、入力信号を受けたポートを識別するためのフラグを持ち、フラグをＣＰＵ１１に割込み要因として与えることができる。
また、ＣＰＵ１１は、演算機をもち、入力モジュール１４からの信号を割込み要因として受取り、この割込み要因を受けて、メモリ１２から命令となる信号をリードし、実行する。この他にも、ＣＰＵ１１は、タイマ１５、及び内蔵メモリを有している。タイマ１５を内蔵しないＣＰＵを用いる場合は、外付けのタイマを用いてもよい。このタイマ１５は、経過時刻をＣＰＵ１１に示すカウンタである。本実施形態では、タイマ１５はアップカウンタとするが、タイマ１５がダウンカウンタの場合でも、実施可能である。
また、メモリ１２は、不揮発性メモリ、及び／又は、揮発性メモリを有し、ＣＰＵ１１からの入力信号を受けて、ＣＰＵ１１が行う演算の命令となる信号をＣＰＵ１１に送る。不揮発性メモリとしては、ＥＥＰＲＯＭ又はフラッシュメモリなどがあり、不揮発性メモリは、プログラムや、データの初期値が記録される。一方、揮発性メモリとしては、ＳＲＡＭＳ又はＳＤＲＡＭなどがあり、揮発性メモリは、データ、及び／又は、スタックが記録される。実施形態のリアルタイム制御装置を実施するオペレーティングシステム（以下ＯＳと云う）も、メモリ１２に記録される。
さらに、出力モジュール１３は、ＣＰＵ１１からの演算結果に基づいて、出力信号を処理するハードウェアである。出力モジュール１３は、１つ以上の出力ポートを持つことができる。ちなみに、本実施形態では、出力モジュール１３は、なくてもよい。
図２は、第一の実施形態のリアルタイム制御システムのソフトウェアを示すブ制御ロック図である。本実施形態のソフトウェアは、スケジューラ１、タイマポーリング部２、周期テーブル３、ドライバ部４、タスク処理部（以下タスクと云う）５及びＣＰＵ１１にあるタイマ１５により構成される。
スケジューラ１、タイマポーリング部２、ドライバ部４、及びタスク５は、ＯＳに含まれるが、ミドルウェアとしてＯＳの外に存在してもよい。また、タスク５は、アプリケーションの要求にあわせて、２つ以上存在してもよい。
まず、ドライバ部４は、ドライバ部４内にある割込みハンドラ、及び入力モジュール１４のレジスタを初期設定、及び／又は、リード及びライトするデバイスドライバからなる。すなわち、ドライバ部４は、リセット直後に、入力モジュール１４や出力モジュール１３のレジスタを初期化する。また、先に示した入力モジュール１４の割込み要因となる入力信号の受信割込みをする必要がある場合には、ドライバ部４は、入力モジュール１４から入力Ａ又は入力Ｂなどからなる入力信号の割込みを許可するように設定される。そして、ドライバ部４の割込みハンドラは、割込みが発生した直後に、入力モジュール１４から入力信号をリードし、スケジューラ１に、割込み信号を送信する。
また、スケジューラ１は、ドライバ部４の割込みハンドラが、入力モジュール１４からリードした入力Ａ又は入力Ｂの割込み信号を受信することにより、起動する。
図３は、後述するタスク５内に存在する複数のイベント処理手段５１を識別するタスクＩＤと、ドライバ部４で入力された入力Ａ又は入力Ｂの割込み要因に基づくイベント（事象）と、の対応関係を表したイベントテーブルであり、スケジューラ１は、このイベントテーブルを有している。そして、スケジューラ１は、入力Ａ又は入力Ｂのイベントに従って、イベントテーブルから、タスクＩＤを検索し、検索したタスクＩＤをタスク５に送信する。ちなみに、スケジューラ１は、入力Ａの割込みをタスクＩＤ＝０、入力Ｂの割込みをタスクＩＤ＝１と識別し、タスクＩＤをタスク５に送信し、タスク５を起動させる。また、スケジューラ１は、２タスク分のデータを保存しているが、３以上のタスクでも可能である。さらに、スケジューラ１は、タスクＩＤ送信後に、タスク５からの信号である後述する戻り値を受信し、周期テーブル３からタスク周期時間を読み取り、そしてタイマポーリング部２に引数を与え、その結果、タスク５の次回のタスク処理開始時刻であるタスク処理信号をタスク５に送る。
また、タスク５は、アプリケーション処理を実行するプログラムであり、タスクＩＤに対応した複数のイベント処理を行うイベント処理手段５１と、イベント処理の継続又は終了を判定するタスク判定手段５２と、を有する。そして、タスク５のイベント処理関数を有したイベント処理手段５１を実行するために、スケジューラ１のイベントテーブルから検索されたタスクＩＤは、エントリアドレスにジャンプすることで、タスク５を起動し、先に示したタスク判定手段の判定結果を、スケジューラ１にリターンする。
この他にも、実施形態に係るタスク５のイベント処理手段５１は、イベントタスクと、イベント起動型周期タスクと、を有してもよく、スケジューラ１は、この２種類のイベント処理手段５１をサポートする。他の実施形態では、周期タスクをサポートしてもよい。周期タスクをサポートする場合は、周期タスクのタイマの割込みが発生する。これが、イベント起動型周期タスク実行中に発生すると、タスクに待ち時間が発生し、周期時間をオーバすることがある。これを回避するために、スケジューラ１は、イベント起動型周期タスクを起動するときに、割込み禁止とし、このイベント起動型周期タスクを終了するときに、割込みを許可とするようになっている。
また、周期テーブル３は、図４に示す、イベント毎の周期時間を示したテーブルを有している。この周期テーブル３は、スケジューラ１からのタスクＩＤを受信して、タスクＩＤに対応した各イベントの周期時間を検索し、スケジューラに送信するプログラムである。ちなみに、この表では、タスクＩＤ＝０の時は、イベントは、イベント起動型周期タスクであり、タスク＝１の時は、周期性を持たないイベントタスクであることを示している。また、２タスク分のデータを保存しているが、３以上のタスクでも可能である。
タイマポーリング部２は、目標時間までタイマ１５をポーリングし、目標時刻になるとスケジューラ１に、タスク処理の起動時刻であるタスク処理信号を、リターンするプログラムである。スケジューラ１は、タスク５の次の起動時刻までに、タイマポーリング部２をコールする。スケジューラ１は、タスク５の起動型周期タスクであるイベント処理手段５１の周期を、引数としてタイマポーリング部２に与える。本実施形態では、入力Ａ又は入力Ｂの入力によりスケジューラ１を起動するため、入力Ａ及び入力Ｂの割込みを許可しておく。
図５は、第一の実施形態に係るリアルタイム制御システムのスケジューラ１の処理内容を示す制御フロー図である。スケジューラ１は、ドライバ部４から割込みを受けると実行開始する。まず、ステップ５０１では、先に示した割込み信号をドライバ部４からリードする。この割込み信号は、どのような割込みであるかを識別するためのフラグであり、ここでは、「入力Ａ」又は「入力Ｂ」に対応したフラグである。
ステップ５０２で、図３に示したイベントテーブルを用いて、割込み信号により起動させるタスク５を検索する。起動するタスク５がない場合は、スケジューラを終了し、起動するタスク５のタクスＩＤがある場合は、ステップ５０３に進み、タスク５を起動させる。すなわち、入力Ａが割込んだ場合は、タスクＩＤ＝０を与え、入力Ｂが割込んだ場合は、タスクＩＤ＝１を与え、タスク５を起動させる。このタスク５の起動は、タスク５のエントリアドレスにジャンプすることにより実現する。また、コンテキストスイッチが必要な場合は、ＣＰＵ１１のレジスタを全て保存し、レジスタをクリアする。ステップ５０３でタスク５が起動し、イベント処理手段５１の処理が終了すると、ステップ５０４に進む。ここに示すステップ５０３の詳細は、後述する図６で説明する。
ステップ５０４では、スケジューラ１は、タスク５のタスク判定手段５２から、戻り値として「継続」又は「終了」のどちらかの信号を格納する。戻り値が「終了」の場合は、スケジューラ１は、終了され、戻り値が、「継続」の場合は、ステップ５０５に進む。
ステップ５０５は、先に示したタスクＩＤを用いて、図４に示す周期テーブル３を検索し、タスク５の周期が０かどうか（周期をもつかどうか）を判定する。例えば、タスクＩＤ＝０（イベント：入力Ａ）の場合は、周期は１０ｕｓｅｃとなり、タスクＩＤ＝１（イベント：入力Ｂ）の場合は、周期は０ｕｓｅｃとなる。そして、周期が０（タスクＩＤ＝１）の場合は、スケジューラ１を終了させ、それ以外（タスクＩＤ＝２）の場合は、タスク５は、イベント起動型周期タスクであると判断し、ステップ５０６に進む。
ステップ５０６では、タイマポーリング部２を実行し、次のタスク起動時刻まで待つ。タイマポーリング部２には、スケジューラ１で検索した周期を、引数として与える。このタイマポーリング部２の実行の詳細は、後述する図７で説明する。その後、ステップ５０４にあるタスク５からの戻り値が「終了」となるまで、一連のステップ５０３〜ステップ５０６を繰り返し実行する。
図６は、図５に示すステップ５０３のタスクの処理を示す制御フロー図である。まず、ステップ６０１では、タスク５のタスク判定手段５２が「継続」するか「終了」するかどうかの判定処理を行う。判定処理は、例えば「入力Ａの割込みが発生しているかどうか」、「イベント発生後、タスク５が起動しイベント処理手段５１を実行した回数が、規定の回数に達したかどうか」などの判定基準を設け、その判定基準に従って、判定処理を行い、ステップ６０２に進む。ステップ６０２では、ステップ６０１のタスク判定手段５２の判定処理に基づいて、判定結果を判断する。判定結果が「終了」であれば、ステップ６０３に進み、「終了」を戻り値としてスケジューラ１に返し、タスク５を終了させる。判定結果が「継続」であれば、ステップ６０４に進み、イベント処理を行う。イベント処理では、ＣＰＵ１１が、入力Ａ又は入力Ｂに対応したイベント処理手段５１を用いて実行する。出力があれば、出力モジュール１３から、信号を出力する。その後、ステップ６０５に進み、「継続」を戻り値としてスケジューラ１に返し、終了する。
図７は、タイマポーリング部２の処理を示す制御フロー図である。まず、ステップ７０１で、現在時刻Ｔｃ（以下Ｔｃ）と前回ポーリングが終了したポーリング終了時刻Ｔｏ（以下Ｔｏ）とをリードする。Ｔｃは、現時点でのタイマ１５の値である。また、Ｔｏは、タイマポーリング部２が前回の実行時に保存した時の時刻である。イベント発生直後の場合は、タイマポーリング部２をはじめて実行するので、ステップ７０１の実行時には、Ｔｏは不定となる。そこで、この問題を回避するために、図５のステップ５０１とステップ５０２の間で、スケジューラ１がタイマ１５をリードし、タイマポーリング部２のＴｏとして記録しておくとよい。
次に、ステップ７０２で、次に処理される予定であるタスク５のイベント処理手段５１の起動時刻Ｔｎ（以下Ｔｎ）を求める。Ｔｎは、″Ｔｏ＋周期−Ｔｃ″により求まる。ＴｏからＴｃの間でタイマ１５がオーバフローした場合、すなわち、ＴｏよりもＴｃが小さい場合、その分を補正してＴｎを決定する。
その後、ステップ７０３で、タイマ１５からＴｃを再度リードする。ステップ７０４で、ＴｃがＴｎよりも大きいかどうか判定する。ＴｃとＴｎの間で、タイマ１５のオーバフローが発生する場合、すなわちＴｃよりもＴｎが小さい場合、タイマ１５がオーバフローになるまでは、ＴｎとＴｃの比較は行わない。ステップ７０４の比較の結果、真になるまで、ステップ７０３及びステップ７０４を繰り返す。ステップ７０４が真になると、ステップ７０５に進み、ＴｃをＴｏに保存する。
図８及び図９は、イベント処理手段５１であるイベント周期型タスクの処理を示すタイミングチャートであり、図８は、従来のタイミングチャートであり、図９は、本実施形態に係るタイミングチャートである。
図８に示すように、従来の方式では、周期タスクは、最初に、イベントが発生しているかどうかを、入力モジュールのポーリングで判定し、発生時に、イベント処理を続けて行う。入力Ａの割込み発生後、割込み処理にオーバヘッド時間Ｔｉ（以下Ｔｉ）かかる。その後、タスク処理中で、判定処理に処理判定時間Ｔｊ（以下Ｔｊ）、イベント処理にイベント処理時間Ｔｔ（以下Ｔｔ）かかる。これを繰り返すので、本方式の最小のタスク周期は、Ｔｉ＋Ｔｊ＋Ｔｔとなる。
一方、図９に示すように、本実施形態では、入力Ａが入力されるとドライブ部の割込みハンドラが起動される。そのとき、割込み処理時間は、Ｔｉかかる。その後、スケジューラ１がタスク５を起動し、判定処理を行う。図８に示すようにＴｊと同様に判定処理時間はＴｊかかる。判定処理が「継続」の場合、イベント処理を行い、イベント処理時間Ｔｔ（以下Ｔｔ）の間で実行される。イベント処理終了後、次の周期まで時間があれば、スケジューラ１が、タイマポーリング部２を起動し、ポーリング時間Ｔｐ（以下Ｔｐ）だけ待つ。以降は、判定処理が「終了」と判断するまで、Ｔｊ，Ｔｔ，Ｔｐを繰り返す。従って、タスク５の周期は、Ｔｊ＋Ｔｔ＋Ｔｐとなり、この周期最小値はＴｐ＝０ときなので、Ｔｊ＋Ｔｔとなる。ここで、Ｔｉは数１０ｕｓｅｃ程度であるのに対してＴｐは１ｕｓｅｃ以下であるので、タスクの周期は大幅に短縮することができる。
次に、図１０は、本発明のリアルタイム制御システムの第二の実施形態を示す制御ブロック図である。本実施形態のリアルタイム制御システムのソフトウェアは、ドライバ部４’、ポーリング部２’、及びタスク処理手段（以下タスクと云う）５’より構成される。タスク５’は、アプリケーションの要求にあわせて、２つ以上存在することができる。
ドライバ部４’は、割込みハンドラ、及び、入力モジュール１４のレジスタを、初期設定、若しくはリード、又はライトするデバイスドライバである。ドライバ部４’は、リセット直後に、入力モジュール１４や出力モジュール１３のレジスタを初期化する。受信割込みが必要な場合は、入力モジュール１４からの割込みを許可するように設定する。本実施形態では、入力信号である入力Ａと入力Ｂの割込みによりタスク５’を起動するため、ドライバ部４’は入力Ａ、入力Ｂの割込みを予め許可している。割込みハンドラは、割込みが発生した直後に実行される。ドライバ部４’は、入力モジュール１４から入力信号をリードし、割込み信号を出力し、タスク５’を呼び出す処理を行う。本実施形態では、入力が入力Ａと入力Ｂとの２つだが、３個以上の入力があってもよい。
また、タスク５’は、アプリケーション処理を実行するプログラムである。タスク５’のエントリアドレスは、ドライバ部４’が記憶しており、タスク５’は、一つ以上の関数から構成されるが、本実施形態では、少なくとも、タスク判定手段５２’と、入力Ａの処理を行う入力Ａ関数を有したイベント処理手段５１Ａと、入力Ｂの処理を行う入力処理関数Ｂを有したイベント処理手段５１Ｂと、を有する。
また、ポーリング部２’は、ドライバ部４’の入力Ａ又は入力Ｂに対応した割込み信号をポーリングし、タスク５’にタスク処理信号を出力するプログラムである。タスク５’のイベント処理手段５１Ａ、イベント処理手段５１Ｂの実行が終了したときに、すぐにタスク５’は終了されず、割込み因子の有無を確認するために、ポーリング部２’は、タスク判定手段５２’からコールされるタスク処理信号を出力する。
図１１は、第二の実施形態に係るリアルタイム制御システムのタスク５’の処理内容を示す制御フロー図である。まず、ステップ１１０１では、タスク５’は、ドライバ部４’より起動された直後、ドライバ部４’より引数として渡された割込み信号をリードする。そしてステップ１１０２に進み、ステップ１１０２では、割込み要因である割込み信号を”入力Ａ”又は”入力Ｂ”のいずれの割込みであるかタスク判定手段５２’で判定する。ここで、”入力Ａ”ならば、ステップ１１０３に進み、入力Ａに対応したイベント処理手段５１Ａの入力Ａ関数を実行する。入力Ａ関数は、入力Ａの割込みが発生した時に行う関数である。例えば、入力Ａが、エンジンコントローラユニットのクランク信号であれば、イベント処理手段５１Ａでは、点火タイミングの計算などを行う。ステップ１１０２において、割込み信号が、”入力Ｂ”であれば、ステップ１１０４に進み入力Ｂ関数を実行する。もし、ステップ１１０２において、割込み信号が”なし”であれば、タスク５’を終了する。次に、ステップ１１０５において、タスクのタスク判定手段５２’はポーリング部２’をコールし、タスク処理信号があれば受信する。その後、再び、タスク処理信号を用いてステップ１１０２の判定を行い、ステップ１１０２の判定が、”なし”になるまで、先に示した一連の作業を繰り返す。
ステップ１１０２の判定は、同時に複数の信号が存在する時の選択方式により、２種類に分類される。第一に、信号を交互に選択する方式である。これは、前回検出した信号を、メモリに記憶しておき、これ以外の信号を選択する方式である。第二に、割込み要因を定まった順序（優先順位を付けた順序）で選択する方式である。第一の方式の場合、入力Ａ又は入力Ｂを交互に選択するので、公平に処理することができる。例えば、入力Ａ、入力Ｂの処理に優先順位が存在しないようなシステムに適している。第二の方式の場合は、入力Ａを必ず選択し、入力Ａが無い場合のみ入力Ｂを選択する。あるいは、入力処理を優先的に実行してもよい。例えば、入力Ａの処理の優先順位が、入力Ｂの順位よりも高いようなシステムに適している。本実施例では、第一の方式、第二の方式を示したが、これら以外の順序で、入力Ａ、入力Ｂを選択してもよい。
さらにステップ１１０２の判定は、同一信号が、再度検出された時の判定方式によっても、二種類に分類される。第一に、再度検出された信号に対応するイベント処理手段５１Ａ、又はイベント処理手段５１Ｂを実行する方式である。第二に、再度検出された信号は無視し、未検出の信号を選択する方式である。第一の方式のメリットは、連続して入力がある場合、割込みハンドラのオーバヘッド時間なしに、複数回の入力関数を実行できることである。
そしてこのような第一の方式は、入力Ａが周期的な入力であり、かつ、その周期的が割込みハンドラのオーバヘッドに比べて、極めて短い場合に適している。第二の方式のメリットは、定期的に割込み許可状態にできることである。本実施形態では、タスク５’は、リアルタイム性を確保する（優先順位が高い）ために割込み禁止で動作しているが、タスク５’が動作し続けると、入力Ａ又は入力Ｂ以外の割込みが入った時に、処理できない。そこで、第二の方式を用いることで、入力Ａ、入力Ｂの処理を一回行ったあとに、タスク５’を一旦終了させることで、他の割込みが入れるようにする。
図１２は、図１１のステップ１１０５のポーリング処理内容を示す制御フロー図である。まず、ステップ１２０１で、ドライバ部４’から割込み信号をリードする。割込み信号は、入力モジュール１４、出力モジュール１３いずれかのレジスタに、一括、又は分散して記録される。これらのうち必要な割込み信号を、リードする。本実施形態では、タスク５’は入力Ａと入力Ｂの割込み処理を行うので、入力Ａ及び入力Ｂの割込み信号をリードする。そしてステップ１２０２において、割込み信号を、タスク５’に戻り値として返す。入力の数が、３２個以内であれば、入力ごとの割込み要因をビットマップに置き換えて４バイトコードにし、関数の戻り値として返すこともできる。もし、３２個以上の入力があれば、割込み要因を保存する構造体を生成し、そのポインタをリターンしてもよい。
図１３〜図１５は、イベント処理手段５１Ａ及びイベント処理手段５１Ｂの処理を示すタイミングチャートであり、図１３は、入力Ａの処理中に入力Ｂが入力された時の従来のタイミングチャートであり、図１４は、入力Ａの処理中に入力Ｂが入力された時の本実施形態に係るタイミングチャートであり、図１５は、入力Ａ処理後に入力Ｂが入力された時の本実施形態に係るタイミングチャートである。
図１３に示すように、従来では、入力Ａの割込みが発生してから、割込みハンドラの処理を行う時間であるオーバヘッド時間Ｔｉを要する。その後、入力Ａの処理を行うイベント処理手段５１Ａを処理時間Ｔｔの間、実行する。イベント処理手段５１Ａの処理中に、入力Ｂの割込みが発生しても、割込み禁止されているので、イベント処理手段５１Ａの処理を実行する。その後、イベント処理手段５１Ａの処理が終了すると、割込み禁止が解除されて、入力Ｂの割込みが演算機により検出される。そして、再び割込みハンドラがコールされ、オーバヘッド時間Ｔｉ後に、イベント処理手段５１Ｂを実行する。
図１４に示すように、本実施形態では、まず、入力Ａの信号が入力されると、従来と同様に、ドライバ部４’の割込みハンドラが、オーバヘッド時間Ｔｉの間、割込み処理を行う。しかし、イベント処理手段５１Ａの処理中に、入力Ｂの割込みが発生すると、この信号が、ポーリング部２’に格納され、関数終了後、ポーリング時間Ｔｐだけポーリングを行い、イベント処理手段５１Ｂを実行する。ここでも、第一の実施形態と同様に、Ｔｉは数１０ｕｓｅｃ程度であるのに対してＴｐは１ｕｓｅｃ以下であるので、タスクの周期は大幅に短縮することができる。
図１５に示すように、入力Ａと入力Ｂの入力間隔が大きい場合には、各々の入力には、オーバヘッド時間Ｔｉに加え、ポーリング時間Ｔｐが必要となるので、ポーリング時間Ｔｐだけ無駄な処理を行うことになるが、この時間も前述したように、極めて短い時間であるので、性能に悪影響を及ぼすことはない。
以上、本発明の一実施形態について詳述したが、本発明は、前記の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の精神を逸脱しない範囲で、種々の設計変更を行うことができるものである。
例えば、ドライバ部、タスク、スケジューラ、ポーリング部などは、その機能に合わせたプログラム内容であって、これらの構成が統合及びさらに分割されても、その機能に変わりはない。
また、第一の実施形態と第二の実施形態とを別個に説明したが、これらの実施形態を複合させるような実施形態であってもよい。特に、割込みされたタスク処理信号として、入力信号、タイマの信号などを用いたが、これらの信号に限られるものではない。
また、これらのリアルタイム制御システムは、例えば、自動車のコントローラ（エンジンプリクラシュ・シート、シートベルト・プリテンショナー、エアバッグ、クラッチ、アンチブロックシステム、電駆弁エンジン等のコントローラ）や、一般の産業機器のコントローラなどに適用可能であり、割込み信号が入力されるようなシステムであるならば、特に制限されるものではない。
【産業上の利用の可能性】
以上の説明から理解できるように、本発明のリアルタイム制御システムは、周期性のあるイベントが発生した場合又は複数のイベントが同時に発生した場合において、周期タスクを的確に実施し、複数のオーバヘッド時間の累積することによる処理開始時間の遅れを防止することで、より細かな応答が可能な制御及び複数の指令に対して迅速かつ確実に応答可能な制御を行うことができる。
【図１】
2005013130.tif 000003
【図２】
2005013130.tif 000004
【図３】
2005013130.tif 000005
【図４】
2005013130.tif 000006
【図５】
2005013130.tif 000007
【図６】
2005013130.tif 000008
【図７】
2005013130.tif 000009
【図８】
2005013130.tif 000010
【図９】
2005013130.tif 000011
【図１０】
2005013130.tif 000012
【図１１】
2005013130.tif 000013
【図１２】
2005013130.tif 000014
【図１３】
2005013130.tif 000015
【図１４】
2005013130.tif 000016
【図１５】
2005013130.tif 000017
【国際調査報告】
2005013130.tif 000018
2005013130.tif 000019
2005013130.tif 000020
2005013130.tif 000021