(57)【特許請求の範囲】
【請求項１】
実行単位となる複数のタスクに当該タスク毎に優先度が設定され、優先度の異なるタスクが同一のメモリ領域を操作対象とすることによって、一連の機能を実現する処理実行装置において、
前記同一のメモリ領域を操作対象とする各タスクの優先度よりも優先度が低く設定され、前記同一のメモリ領域を操作対象とする各タスクとは独立した、メモリ領域の操作を実現するためのタスクは、前記各タスクから前記メモリ領域の操作指示があると、当該操作指示元のタスクの優先度によらず同一の優先度で起動されて、前記メモリ領域を操作すること
を特徴とする処理実行装置。
【請求項２】
請求項１に記載の処理実行装置において、
前記同一のメモリ領域を操作対象とする各タスクとは独立した、メモリ領域の操作を実現するためのタスクは、前記各タスクの操作対象とするメモリ領域を、前記操作指示があった順序で操作すること
を特徴とする処理実行装置。
【請求項３】
請求項１又は２に記載の処理実行装置において、
前記一連の機能は、車両機器の故障診断に係る機能であり、
前記同一のメモリ領域を操作対象とする各タスクとは独立した、メモリ領域の操作を実現するためのタスクは、前記各タスクからの操作指示に基づき、前記故障診断に関連する故障情報を操作するものであること
を特徴とする処理実行装置。
【請求項４】
請求項３に記載の処理実行装置において、
前記故障情報はビット単位で定義されており、
前記同一のメモリ領域を操作対象とする各タスクとは独立した、メモリ領域の操作を実現するためのタスクは、前記故障情報の記憶されたメモリ領域をバイト単位で操作するものであること
を特徴とする処理実行装置。
【請求項５】
請求項１〜４のいずれかに記載の処理実行装置において、
前記タスクの操作指示には、操作指示元のプログラムを特定可能な識別情報が含まれていること
を特徴とする処理実行装置。
【請求項６】
請求項５に記載の処理実行装置において、
前記同一のメモリ領域を操作対象とする各タスクとは独立した、メモリ領域の操作を実現するためのタスクは、前記識別情報に基づき、前記操作指示元のプログラムを特定することによって、当該操作指示元のプログラムを有するタスクが、操作対象とするメモリ領域を特定すること
を特徴とする処理実行装置。
【請求項７】
実行単位となる複数のタスクに当該タスク毎に優先度が設定され、優先度の異なるタスクが同一のメモリ領域を操作対象とすることによって、一連の機能を実現するプログラムにおいて、
前記同一のメモリ領域を操作対象とする各タスクの優先度よりも優先度が低く設定され、前記同一のメモリ領域を操作対象とする各タスクとは独立した、メモリ領域の操作を実現するためのタスクは、前記各タスクによる前記メモリ領域の操作指示があると、当該操作指示元のタスクの優先度によらず同一の優先度で起動されて、前記メモリ領域を操作すること
を特徴とするプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、実行単位となる複数の処理プログラムを当該処理プログラム毎に設定される優先度に基づき実行する処理実行装置、および当該処理実行装置にて実行されるプログラムに関する。
【０００２】
【従来の技術及び発明が解決しようとする課題】
車両に搭載される電子制御装置（以下「ＥＣＵ」という。）に用いられる制御プログラムでは、制御応答性や安全性の確保等から所定の処理をリアルタイムに実行する必要がある。そのため、優先度の設定されたタスク毎に処理プログラムを記述している。具体的には言えば、実行単位となる複数の処理プログラムを、高優先度のタスクに属するもの、中優先度のタスクに属するもの、低優先度のタスクに属するものというように分けて記述するという具合である。これによって、実質的に処理プログラム毎に実行の優先度を設定しておき、タスクの単位で切り換えを行って該当する処理プログラムを実行することにより、相対的に優先度の高い処理プログラムが相対的に優先度の低い処理プログラムに優先して実行される（割り込む）ようにして、リアルタイム性を確保している。
【０００３】
ここで問題となるのが、優先度の異なる処理プログラムが同一のメモリ領域を操作する場合である。このとき、低優先度の処理プログラム（以下「下位プログラム」という。）に高優先度の処理プログラム（以下「上位プログラム」という。）が割り込むとメモリ領域の情報に不具合が生じることがある。この不具合を以下「干渉」という。
【０００４】
例えば、下位プログラムにてメモリ領域の値を書き換える場合を考える。ここでは、ステップＡにて１バイト（８ビット）のメモリ領域を読み出し、その後、読み出したデータの特定のビットを操作して、ステップＢにてその値を再びそのメモリ領域へ書き込むものとする。このとき、上位プログラムが割り込むと図５に示すような状況が生じる可能性がある。なお、上位プログラムによる処理も下位プログラムと同様に、ステップＣにて１バイトの同一のメモリ領域を読み出し、その後、読み出したデータの特定のビットを操作して、ステップＤにて再びそのメモリ領域へ書き込むものとする。
【０００５】
図５から分かるように、下位プログラムによるステップＡの終了後、上位プログラムが割り込んでステップＣ→Ｄと実行され、その後、下位プログラムによるステップＢが実行されると、上位プログラムによるビット操作は、無効になってしまう。つまり、下位プログラムでは、ステップＡで読み出した８ビットのデータの第２ビットを「１」にセットして、ステップＢで書き込みを行う。したがって、上位プログラムにてステップＤで書き込まれた、第１ビットがセットされた８ビットのデータは上書きされ、第１ビットが「０」にリセットされてしまうのである。
【０００６】
なお、同一メモリ領域を操作することによる干渉は、このようなものに限られず、様々な形で起こり得る。例えば、下位プログラムにてあるメモリ領域の値を連続して複数回読み出そうとする時、上位プログラムにてそのメモリ領域が書き換えられると、読み出される値が途中で変わってしまうという具合である。つまり、同一メモリ領域に対して上位又は下位のいずれか一方のプログラムにて書き込み操作を行う場合には、干渉が起きる可能性がある。
【０００７】
ところで、車両制御用のコンピュータシステムでは、自己診断機能を備えることにより、コンピュータ部やセンサ類の動作状態を適当な周期で自動的にチェックし、故障時には、その故障内容が修理担当者などに分かるよう故障情報を記憶するのが一般的である。
【０００８】
そしてこのときの故障検出の対象は、クランク角センサ、カム角センサ、水温センサなどの各種センサをはじめ、現在では約２００にも及ぶ。したがって、故障情報をビット単位で割り付けるのが好ましい。バイト単位で割り付けると単純計算して８倍の記憶領域が必要になるからである。一方、命令数を少なくして高速処理を行うという思想で設計されたビット操作命令を持たないＲＩＳＣマイコンでは、バイト単位でメモリを操作するのが一般的である。このようなことから、車両における故障検出では、ビット単位で故障情報を割り付けておきバイト単位で故障情報を操作する状況が生じ、複数の処理プログラムで同一のメモリ領域を操作する可能性が特に高くなり、処理プログラムの干渉が生じる可能性も高くなっている。
【０００９】
このようなタスク干渉を解決するための手法として、下位プログラムによるメモリ領域操作の前後で上位プログラムによる割り込みを禁止することが考えられるが、特に干渉を生じない上位プログラムの処理も一律に禁止されてしまう。したがって、このような割り込み禁止が頻発すると、リアルタイム性の高い処理である上位プログラムの実行が遅れてしまうことになり、制御応答性や安全性が確保されなくなるなど、制御性能を悪化させる可能性がある。
【００１０】
本発明は、優先度の異なる処理プログラムにおいて同一のメモリ領域を操作対象とする場合に、プログラムの干渉を防止し、しかも、リアルタイム性の高い処理を遅延させないことを目的とする。
【００１１】
【課題を解決するための手段及び発明の効果】
上述した目的を達成するためになされた請求項１に記載の処理実行装置は、実行単位となる複数のタスクを、当該タスク毎に設定される優先度に基づき実行して、一連の機能を実現する。上述したように処理プログラムは、タスクというまとまりで記述され、このタスクに対しては、タスクレベルと呼ばれる優先度が設定されている。
【００１２】
この処理実行装置では、優先度の異なるタスクが同一のメモリ領域を操作対象とすることによって、前記一連の機能が実現される。このため、本発明では、メモリ領域の操作を実現するためのタスクを、前記同一のメモリ領域を操作対象とすることがある各タスクとは独立して用意しておく。
前記同一のメモリ領域を操作対象とする各タスクとは独立した、メモリ領域の操作を実現するためのタスクは、同一のメモリ領域を操作対象とする前記各タスクからメモリ領域の操作指示があると、操作指示元のタスクの優先度によらず同一の優先度で起動されて、メモリ領域を操作する。この際、前記独立したタスクは、同一のメモリ領域を操作対象とする前記各タスクの優先度よりも低い優先度で起動される。
【００１３】
つまり、本発明では、優先度の異なるタスクとは別に、メモリ領域の操作を行う専用のタスクを用意した。そして、このメモリ領域の操作を行う専用のタスクを、同一のメモリ領域を操作対象とすることがある前記各タスクの優先度によらない同一の優先度であって、それら各タスクの優先度より低い優先度で、起動するようにした。同一の優先度でメモリ操作が行われるということは、メモリ操作の途中で別のメモリ操作が割り込むことがないことを意味する。これによって、プログラムの干渉を防止することができる。また、割り込み処理を禁止しないため、リアルタイム性の高い処理が遅延することもない。
【００１４】
なお、前記独立したタスクは、同一のメモリ領域を操作対象とすることがある前記各タスクが操作対象とするメモリ領域を、操作指示があった順序で操作することが考えられる（請求項２）。例えば、処理プログラムからの操作指示があると処理要求がキューに保存される仕組みとし、ＯＳがこのキューに基づくタスクの切り換えを行って、前記独立したタスクを起動することで実現される。なお、処理要求のキューへの記憶及びキューからの取得は、当然にＦＩＦＯと呼ばれる方式で行われる。ＦＩＦＯは、ある場所に格納したデータを、古く格納した順に取り出すようにする方式である。操作指示の順序で処理要求を取り出すためである。
【００１５】
ところで、上述した処理実行装置による一連の機能は、車両機器の故障診断に係る機能とすることが考えられる（請求項３）。この場合、前記独立したタスクは、同一のメモリ領域を操作対象とすることがある前記各タスクからの操作指示に基づき、故障診断に関連する故障情報を操作するものである。特に、故障情報がビット単位で定義されており、前記独立したタスクが故障情報の記憶されたメモリ領域をバイト単位で操作する構成（請求項４）を採用する場合、上述したように処理プログラムで同一のメモリ領域を操作対象とする可能性が高くなるため、本発明の効果が際だつ。
【００１６】
なお、前記独立したタスクは、処理プログラムに対応させて複数用意してもよいが、処理プログラムに共通な一つのプログラムとすることが好ましい。
このような場合には、前記タスクの操作指示に、操作指示元のプログラムを特定可能な識別情報を含めるようにするとよい（請求項５）。このようにすれば、前記独立したタスクでメモリ領域の操作を要求した処理プログラムを特定できるため、当該処理プログラムに応じた動作を、前記独立したタスクで行うことができる。例えば、前記独立したタスクが、識別情報に基づき、操作指示元のプログラムを特定することによって、当該操作指示元のプログラムを有するタスクが操作対象とするメモリ領域を特定するようにしてもよい（請求項６）。これによって、処理プログラムの設計において、操作対象とするメモリ領域を作業者が意識する必要がなくなる。
【００１７】
以上は処理実行装置の発明として説明してきたが、プログラムの発明として実現することもできる（請求項７）。このようなプログラムの場合、例えば、ＦＤ、ＭＯ、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ハードディスク等のコンピュータ読み取り可能な記録媒体に記録し、必要に応じて処理実行装置にロードして起動することにより用いることができる。この他、ＲＯＭやバックアップＲＡＭをコンピュータ読み取り可能な記録媒体としてプログラムを記録しておき、このＲＯＭあるいはバックアップＲＡＭを処理実行装置に組み込んで用いてもよい。
【００１８】
【発明の実施の形態】
以下、本発明を具体化した一実施例を図面を参照して説明する。
図１は、本発明の「処理実行装置」を具体化したエンジン制御装置（以下「ＥＣＵ」という。）１の構成を表すブロック図である。ＥＣＵ１は、車両に搭載された内燃機関型エンジンの制御を行う。
【００１９】
ＥＣＵ１は、エンジンのクランク軸が所定角度回転する毎にパルス状の信号を出力する回転角センサ、エンジンの特定の気筒のピストンが所定位置（例えば上死点：ＴＤＣ）にくる度にパルス状の信号を出力する基準位置センサ、エンジンの冷却水の温度を検出する水温センサ、及び酸素濃度を計測する酸素濃度センサ等、エンジンの運転状態を検出する様々なセンサ３０からの信号を入力して波形整形やＡ／Ｄ変換を行う入力回路２１と、入力回路２１からのセンサ信号に基づき、エンジンを制御するための様々な処理を実行するマイコン１０と、マイコン１０からの制御データに応じて、エンジンに取付けられたインジェクタ（燃料噴射装置）及びイグナイタ（点火装置）等のアクチュエータ４０を駆動する出力回路２２とを、備えている。
【００２０】
そして、マイコン１０には、プログラムを実行する周知のＣＰＵ１１と、ＣＰＵ１１によって実行されるプログラムを記憶するＲＯＭ１２と、ＣＰＵ１１による演算結果等を記憶するためのＲＡＭ１３と、入力回路２１及び出力回路２２との間で信号をやり取りするためのＩ／Ｏ１４と、各種レジスタやフリーランカウンタ等（図示省略）とが備えられている。
【００２１】
このように構成されたＥＣＵ１は、各種センサ３０から入力回路２１を介して入力される信号に基づき、出力回路２２に接続されたアクチュエータ４０を駆動する、エンジン制御処理を行う。
このようなＥＣＵ１のエンジン制御プログラムは、上述したようにＲＯＭ１２に記憶されており、図２に示すような、ＲＴＯＳ（リアルタイムオペレーティングシステム）５１を含むプラットフォーム（以下「ＰＦ」という。）５０と、ＲＴＯＳ５１によって切り換えて実行されるタスク６１，６２，６３とを備えている。なお、このエンジン制御プログラムが「プログラム」に相当する。
【００２２】
タスク６１，６２，６３にはそれぞれ、タスクレベルと呼ばれる優先度が設定されており、相対的に優先度の高いタスクが低いタスクに優先して実行される。以下、高優先度のタスク６１をＡタスク６１と記述し、中優先度のタスク６２をＢタスク６２と記述し、低優先度のタスク６３をＣタスク６３と記述して区別する。そして、各タスク６１，６２，６３は、実行単位となる複数の処理プログラムで構成されている。なお、本実施例では、エンジン制御プログラムの一部である故障検出の機能を具体例として述べる。したがって、図２中には、Ａタスク６１にａ故障検出処理が含まれており、Ｂタスク６２にｂ故障検出処理が含まれており、Ｃタスク６３に故障情報を記憶するためのメモリ操作処理が含まれている様子を示した。
【００２３】
次に、処理プログラムの実行に至る流れを、図３に基づき簡単に説明する。なお、ここでは適宜図２をも参照されたい。
まずＰＦ５０は、イベントの発生を検知すると、イベントテーブル７０を参照して、そのイベントに対応する処理の記述されたいずれかのタスク６１，６２，６３を特定する。そして、特定されたタスク６１，６２，６３の対応するキュー８１，８２，８３へ処理要求を保存する。例えばＡタスク６１のａ故障検出処理がイベントに対応する処理であれば、Ａタスク６１の優先度に応じたキュー８１へ処理要求を保存するという具合である。なお、イベントの発生は、上述したセンサ群３０からの信号に基づいて検知することが考えられる。また、マイコン１０内部のフリーランカウンタによって検知することが考えられる。さらに、後述するように、処理プログラムから発行されることもある。
【００２４】
一方、ＲＴＯＳ５１は、キュー８１，８２，８３を参照して、優先度に基づくタスク６１，６２，６３の起床を行い、キュー８１，８２，８３に保存された処理要求に含まれるパラメータを、起床したタスク６１，６２，６３へ渡す。
これによって、タスク６１，６２，６３の中の該当する処理プログラムが実行される。
【００２５】
ところで、従来技術の欄に詳しく記載したように、Ａタスク６１のａ故障検出処理とＢタスク６２のｂ故障検出処理とで同一のメモリ領域を操作する場合、ｂ故障検出処理の実行中にイベントの発生によってａ故障検出処理が割り込むと、メモリ領域のデータに不具合が発生することがある。すなわち、ａ故障検出処理とｂ故障検出処理とのメモリ領域操作において干渉が生じる場合がある。
【００２６】
そこで、本実施例では、従来と異なり、ａ故障検出処理に記述されていたメモリ操作に関する処理及びｂ故障検出処理に記述されていたメモリ操作に関する処理を、Ｃタスク６３に、メモリ操作処理として独立させた。このメモリ操作処理のプログラムが「同一のメモリ領域を操作対象とする各タスクとは独立した、メモリ領域の操作を実現するためのタスク」に相当する。
【００２７】
そして、ａ及びｂの故障検出処理ではそれぞれ、メモリ操作を必要とする場合、それに応じたイベントを発行するようにした。これが「操作指示」に相当する。そして、この操作指示には、「識別情報」として、イベント発行元を特定可能な識別ＩＤが含まれている。
【００２８】
ＰＦ５０は、ａ又はｂの故障検出処理からのイベント発行を検知すると、上述したように、イベントテーブル７０を参照して、該当するキュー８１，８２，８３へ処理要求を保存する。上述したようなメモリ操作の処理要求は、Ｃタスク６３のキュー８３に保存される。
【００２９】
例えば図４（ａ）に示すように、最初にｂ故障検出処理からのイベント発行があると、このイベントに対応する処理要求としてｂメモリ操作処理要求が保存される。そして次にａ故障検出処理からのイベント発行があると、このイベントに対応する処理要求としてａメモリ操作処理要求が保存される。これら処理要求にはそれぞれ、イベント発行元のａ故障検出処理あるいはｂ故障検出処理を特定可能な識別ＩＤが処理要求のパラメータとして含まれる。
【００３０】
ＲＴＯＳ５１は、Ｃタスク６３が起床されておらず、かつ、相対的に優先度の高いＡ，Ｂのタスク６１，６２が起床されていない場合には、Ｃタスク６３のキュー８３に記憶された処理要求を一つずつ読み出し、Ｃタスク６３を起床する。そして、処理要求のパラメータをＣタスク６３へ渡す。これによって、まずｂ故障検出処理からのイベントによるメモリ操作処理が実行され、次にａ故障検出処理からのイベントによるメモリ操作処理が実行される。
【００３１】
各メモリ操作処理では、パラメータとして渡された識別ＩＤによって、イベント発行元のａ又はｂの故障検出処理を特定し、操作対象のメモリ領域を特定してメモリ領域の操作を行う。このメモリ領域の操作は、ビット単位の故障情報をバイト単位で操作するものであり、メモリ領域から１バイトのデータの読み出して、その読み出したデータの特定のビットをセットして、再びそのデータを書き込むものである。なお、どのビットをセットするかの情報やビットをセットするのかそれともリセットするのかといった情報を、識別ＩＤと同様に、処理要求のパラメータとしてもよい。
【００３２】
以上説明したように本実施例では、優先度の異なるａ及びｂの故障検出処理におけるメモリ操作を、Ｃタスク６３のメモリ操作処理によって実現する。これによって、ａやｂの故障検出処理の優先度によらず同一の優先度でメモリ操作処理が実行される。すなわち、ａ及びｂの故障検出処理から短時間のうちにイベント発行がなされても、一方のイベントに対するメモリ操作処理の実行途中で、他方のイベントに対するメモリ操作処理が割り込むことはない。
【００３３】
例えば図４（ａ）に示したように、Ｃタスク６３のキュー８３に、最初にｂメモリ操作処理要求が保存され、次にａメモリ操作処理要求が保存された場合、図４（ｂ）に示すように、最初にｂ故障検出処理のイベントによるメモリ操作が実行され、その処理の終了後に、ａ故障検出処理のイベントによるメモリ操作が実行される。
【００３４】
しかも、このメモリ操作処理はＣタスク６３に記述されているため、ａタスク６１やｂタスク６２に記述された処理プログラムは、メモリ操作処理に割り込んで実行される。つまり、割り込みを一律に禁止する構成と異なり、リアルタイム性の高い処理の実行が遅延することもない。
【００３５】
さらに、本実施例では、ＥＣＵ１のエンジン制御プログラムにおける故障検出処理の故障情報操作を対象としている。具体的には、ビット単位で割り付けられた故障情報をバイト単位で操作する。したがって、必然的に、故障検出処理が同一のメモリ領域を操作する可能性が高く、上述した構成が極めて大きな効果を奏する。逆に言えば、上述した構成を採用することによって、バイト単位のメモリ操作命令しかもたないＲＩＳＣマイコンを用いて、故障情報をビット単位で定義することができる。すなわち、限られたリソースの有効的な活用を図ることができる。
【００３６】
また、処理要求のパラメータに識別ＩＤを含めるようにしたため、メモリ操作処理では、イベント発行元の故障検出処理を特定することができ、これによって操作対象とするメモリ領域を特定することができる。したがって、本実施例の構成によれば、複数の故障検出処理に対し、一つのメモリ操作処理を用意すれば事足りる。その結果、エンジン制御プログラムがコンパクトになるというメリットを享受できる。もちろん、あまり現実的ではないが、故障検出処理にそれぞれ対応させて、Ｃタスク６３に複数のメモリ操作処理を用意してもよい。この場合は、上述の識別ＩＤは特に必要なくなる。
【００３７】
以上、本発明はこのような実施例に何等限定されるものではなく、本発明の主旨を逸脱しない範囲において種々なる形態で実施し得る。
上記実施例では、Ｃタスク６３にメモリ操作処理のプログラムを記述したが、例えばＢタスク６２やＡタスク６１に記述してもよい。メモリ操作処理が同一の優先度で実行されればよいためである。ただし、一般的にメモリ操作処理のリアルタイム性が低いこと、また、メモリ操作処理に優先させて実行すべきリアルタイム性の高い処理が存在することを前提とすれば、上述したように、低優先度のＣタスク６３に記述することが好ましい。
【００３８】
また、上記実施例は、イベントの発行順に、メモリ操作処理を実行するものであった。ただし、メモリ操作処理の中にもリアルタイム性の相対的に高い処理と低い処理が存在する場合がないとは言えない。その場合には、ＰＦ５０が所定の条件を判断して、Ｃタスク６３のキュー８３に保存された処理要求の順序を必要に応じて前後させるようにしてもよい。
【図面の簡単な説明】
【図１】実施例のエンジン制御装置の構成を表すブロック図である。
【図２】制御プログラムの構造を模式的に示す説明図である。
【図３】イベントを検知して処理要求を保存する様子を示す説明図である。
【図４】（ａ）はメモリ操作処理の要求が保存された様子を示す説明図であり、（ｂ）は処理要求に基づくメモリ操作の順序を示す説明図である。
【図５】同一のメモリ領域操作における干渉を示す説明図である。
【符号の説明】
１…ＥＣＵ
１０…マイコン
１１…ＣＰＵ
１２…ＲＯＭ
１３…ＲＡＭ
１４…Ｉ／Ｏ
２１…入力回路
２２…出力回路
３０…センサ
４０…アクチュエータ
５０…ＰＦ
５１…ＲＴＯＳ
６１，６２，６３…タスク
７０…イベントテーブル
８１，８２，８３…キュー
【図１】
0003610915.tif 000002
【図２】
0003610915.tif 000003
【図３】
0003610915.tif 000004
【図４】
0003610915.tif 000005
【図５】
0003610915.tif 000006