(57)【特許請求の範囲】
【請求項１】
メモリ及びプロセッサを備えた電子制御装置において、
前記プロセッサが定時的な割り込みによって第１のタスクを実行するときに、当該第１のタスクについて、前記メモリに確保された複数のスタック領域のうち、前記第１のタスクに予め割り当てられた少なくとも１つの前記スタック領域を使用させ、
前記第１のタスクが当該第１のタスクに予め割り当てられた少なくとも１つのスタック領域を使用しているか否かを、前記定時的な割り込みの発生タイミングとは相関しないランダムなタイミングで発生する第２のタスクによって監視させる、
ことを特徴とする電子制御装置。
【請求項２】
前記第２のタスクは、前記予め割り当てられた少なくとも１つのスタック領域をスタックポインタが指しているか否かを介して、前記第１のタスクが前記予め割り当てられた少なくとも１つのスタック領域を使用しているか否かを監視する、
ことを特徴とする請求項１に記載の電子制御装置。
【請求項３】
前記第１のタスクが使用する少なくとも１つのスタック領域は、前記第１のタスクを所定規則により分類したグループに基づいて設定された、
ことを特徴とする請求項１又は２に記載の電子制御装置。
【請求項４】
前記ランダムなタイミングは、エンジン回転センサの出力に基づくタイミングである、
ことを特徴とする請求項１〜３のいずれか１つに記載の電子制御装置。
【請求項５】
前記エンジン回転センサの出力に基づくタイミングは、当該エンジン回転センサにおけるエッジの検出タイミングである、
ことを特徴とする請求項４に記載の電子制御装置。
【請求項６】
電子制御装置が、定時的な割り込みによって第１のタスクを実行するときに、当該第１のタスクについて、メモリに確保された複数のスタック領域のうち、前記第１のタスクに予め割り当てられた少なくとも１つの前記スタック領域を使用させ、
前記第１のタスクが当該第１のタスクに予め割り当てられた少なくとも１つのスタック領域を使用しているか否かを、前記定時的な割り込みの発生タイミングとは相関しないランダムなタイミングで発生する第２のタスクによって監視させる、
ことを特徴とするスタック領域の使用監視方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スタック領域を使用する電子制御装置及びスタック領域の使用監視方法に関する。
【背景技術】
【０００２】
電子制御装置において、ＲＡＭ（Random Access Memory）の一部がスタック領域として使用される。このスタック領域は、電子制御装置における処理中のデータなどを一時的に退避させる場合に使用される（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００８−１８４９１２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ＩＳＯ２６２６２において、車両の機能安全についての基準が定められている。この基準において、ＡＳＩＬ（Automotive Safety Integrity Level）という安全性のレベルが定められている。安全性のレベルは、５段階あり、安全性の基準が高い順にＡＳＩＬ−Ｄ，ＡＳＩＬ−Ｃ，ＡＳＩＬ−Ｂ，ＡＳＩＬ−Ａ，ＱＭとなっている。そして、前記機能安全を実現する上では、例えば、タスクごとにこの安全性のレベルが割り当てられ、割り当てられたレベルが低いものの障害がよりレベルが高いものに影響を与えないことが求められる。このため、電子制御装置において、高い安全性のレベル（例えば、ＡＳＩＬ−Ｄ）が割り当てられたタスクによりスタック領域に一時的に退避されたデータが、より低い安全性のレベル（例えば、ＱＭ）が割り当てられたタスクによってアクセスされないようにする。例えば、スタック領域が複数確保され、タスクのＡＳＩＬレベルに応じて、そのタスクが使用するスタック領域が少なくとも一つ割り当てられるようにする。
【０００５】
このようにした場合に、割り当てられたスタック領域が適切に使用されているかを監視する必要がある。このような監視において、実行されるタスクの中で決まったタイミングで監視をしても、そのタイミングにおける異常以外を発見することができないため、信頼性が低下し機能安全が実現できない恐れがある。また、実行されるタスクの中で異なるタイミングで監視をしようとすると、タスクが複雑化し、処理に時間がかかり、車両の他の制御に影響を及ぼし機能安全が実現できない恐れがある。
【０００６】
そこで、機能安全を実現するべく、タスクが当該タスクに割り当てられたスタック領域を適切に使用しているかを監視することができる電子制御装置及びスタック領域の使用監視方法を提供する。
【課題を解決するための手段】
【０００７】
前記課題を解決するために、電子制御装置が、メモリ及びプロセッサを備え、プロセッサが定時的な割り込みによって第１のタスクを実行するときに、当該第１のタスクについて、メモリに確保された複数のスタック領域のうち、第１のタスクに予め割り当てられた少なくとも１つのスタック領域を使用させ、第１のタスクが当該第１のタスクに予め割り当てられた少なくとも１つのスタック領域を使用しているか否かを、定時的な割り込みの発生タイミングとは相関しないランダムなタイミングで発生する第２のタスクによって監視させる。
【発明の効果】
【０００８】
前記電子制御装置によれば、タスクが当該タスクに割り当てられたスタック領域を適切に使用しているかを監視することができ、機能安全を実現できる。
【図面の簡単な説明】
【０００９】
【図１】電子制御装置の実施形態を示すブロック図である。
【図２】前記電子制御装置のスタック領域の構成を示す図である。
【図３】前記電子制御装置がタスクを実行する際のフローを示す図である。
【図４】前記電子制御装置がスタック領域の使用を監視するタスクを実行する際のフローを示す図である。
【図５】前記電子制御装置がスタック領域の使用を監視するタイミングを示した図である。
【発明を実施するための形態】
【００１０】
以下、本発明の実施の形態を添付図面に基づいて説明する。
図１は、自動車に搭載された電子制御装置１００の実施形態を示す図である。この電子制御装置１００は、車両の様々な制御を行うもので、例えば、内燃機関の制御を行う。電子制御装置１００は、複数のＣＰＵ（Central Processing Unit）１１０と、複数のローカルメモリ１２０と、グローバルメモリ１３０と、を備えている。
【００１１】
ＣＰＵ１１０は、電子制御装置１００に接続された各種センサの検出値等を読み出して車両制御用の目標値を算出することができる。具体的には、ＣＰＵ１１０には、図示していないクランク角センサ、カム角センサ、水温センサ、スロットルセンサ、エアフローセンサ、空燃比センサを含む各種センサ等の信号が入力され、また、電子スロットル弁、燃料噴射弁、点火コイル等の各種制御に必要なデータを演算することができる。
【００１２】
前記ＣＰＵ１１０には、ＣＰＵ１１０にそれぞれ設けられたローカルメモリ１２０と、全てのＣＰＵ１１０がアクセス可能なグローバルメモリ１３０とが接続されている。このローカルメモリ１２０は、ＣＰＵ１１０に１対１で対応し、対応するＣＰＵ１１０の実行にのみ用いられる。このローカルメモリ１２０には、ＬＩＦＯ（Last In First Out）方式でデータを保持するスタック領域１２２や他の各種メモリ領域が設けられている。
【００１３】
電子制御装置１００は、タスクを実行する上で、スタック領域へのアクセス制限の異なる複数のモードを有している。このアクセス制限は、安全性の基準に基づいたレベルに応じて定められている。本実施形態では、複数のモードとして、スーパーバイザーモード（ＳＶＭ：supervisor mode）と、ユーザーモード（ＵＭ：user mode）とがあり、それぞれにアクセス権限が割り当てられてアクセス制限を実現している。そして、ＳＶＭのときには、安全性レベルがＡＳＩＬ−Ｄ，Ｃ，Ｂ，Ａのいずれかであるタスクが実行され、ＵＭのときには、安全性レベルがＱＭであるタスクが実行される。換言すると、電子制御装置１００において、タスクは、安全性レベルなどの所定規則に基づいてグループに分類され、グループに応じたモードで実行されるようになっている。
【００１４】
ローカルメモリ１２０に設けられたスタック領域１２２は、ＱＭ用スタック領域１２４と、ＡＳＩＬ用スタック領域１２６との、２つの領域に分けられている。すなわち、ローカルメモリ１２０には２つのスタック領域が確保されている。そして、ＵＭが割り当てられたタスクは、ＱＭ用スタック領域１２４にのみアクセスが可能であり、ＡＳＩＬ用スタック領域１２６へのアクセスが禁止されている。ＳＶＭが割り当てられたタスクは、ＡＳＩＬ用スタック領域１２６及びＱＭ用スタック領域１２４にアクセスが可能である。このようなタスクごとのアクセスの制限は、メモリ管理ユニット等のハードウェアで実現することができる。なお、本実施形態では、アクセスの種別として読み込み、書き込み、実行の３種類があり、これら全てのアクセスがまとめて禁止されるか又は許可されている。しかし、例えば、書き込み及び実行は禁止するが読み込みだけを許可するといったように、一部のアクセスを許可するような設定をすることができる。また、各モードにおいて、スタック領域ごとに、かつ、アクセス種別ごとに許可又は禁止の設定をすることができる。
なお、本実施形態においてはローカルメモリ１２０に２つのスタック領域が確保されているが、電子制御装置はローカルメモリに複数のスタック領域を確保することができる。
【００１５】
次に、図２を参照してスタック領域１２２について詳細に説明する。
スタック領域１２２において、例えば、アドレスが大きくなる方向にデータが蓄積される。図２においては上方向がアドレスの値が大きくなる方向である。そして、スタック領域１２２においては、図２（ａ）（ｂ）に示すように、アドレスが小さい方からＡＳＩＬ用スタック領域１２６、ＱＭ用スタック領域１２４の順で、メモリ領域が割り付けられている。すなわち、スタック領域１２２は、データが蓄積される方向側に、より重要度が低いスタック領域が設けられている。換言すると、各スタック領域１２２は、分割されたスタック領域のうち重要度が高いスタック領域からスタックデータが蓄積される方向に割り付けられている。
【００１６】
また、図２に記載のように、このスタック領域１２２において、ＡＳＩＬ用スタック領域１２６の最も新しく格納されたデータＡＳＩＬ−２を示す第１のスタックポインタと、ＱＭ用スタック領域１２４の最も新しく格納されたデータＱＭ−３を示す第２のスタックポインタと、をモードに応じて切り換えることができる。図２（ａ）は、ＳＶＭのタスクが実行されている場合を表している。この場合には、電子制御装置１００は、第１のスタックポインタ及び第２のスタックポインタを切り換えて使用することができる。そして、ＳＶＭのタスクが実行されるときには、ＱＭ用スタック領域１２４及びＡＳＩＬ用スタック領域１２６にアクセスすることが可能である。また、図２（ｂ）は、ＵＭのタスクが実行されている場合を表している。この場合には、電子制御装置１００は、第２のスタックポインタを使用する。そして、ＱＭのタスクが実行されるときには、ＡＳＩＬ用スタック領域１２６へのアクセスが禁止されている。
【００１７】
このようにして、電子制御装置１００において、ＣＰＵ１１０がタスクを実行するときに当該タスクに使用させるスタック領域として、ローカルメモリ１２０に確保された複数のスタック領域のうち少なくとも１つのスタック領域が予め割り当てられる。そして、タスクが使用する少なくとも１つのスタック領域は、安全性レベルなどの所定規則によりタスクを分類したグループごとに設定されている。これにより、電子制御装置１００における機能安全が実現される。
【００１８】
また、このように構成された電子制御装置１００で実行されるタスクにおいては、割り当てられたモードよりも権限が高くなる方向にモード変更ができないようになっている。例えば、ＵＭのタスクは、ＵＭからＳＶＭへのモード変更は行えない。
【００１９】
ここで、前記電子制御装置１００がタスクを実行する際のフローについて図３を参照して説明する。
まず、このフローはモードがＳＶＭで起動される。このとき、電子制御装置１００は、フローがＳＶＭで始まるので、ＡＳＩＬ用スタック領域１２６の最も新しく格納されたデータを示す第１のスタックポインタを使用している。そして、イニシャルプログラムを実行する（Ｓ１０１）。
【００２０】
次に、プログラムの実行上、ＵＭのタスクを実行することがあり、それに伴いモードをＳＶＭからＵＭに切り換えることがある。このとき、まず、電子制御装置１００は、スタックポインタをＱＭ用スタック領域１２４の最も新しく格納されたデータを示す第２のスタックポインタに切り換える（Ｓ１０２）。そして、電子制御装置１００はモードをＳＶＭからＵＭに切り換える（Ｓ１０３）。
そして、モードがＵＭに遷移した後に電子制御装置１００はＱＭのタスクを実行して、その際にスタック領域としてＱＭ用スタック領域１２４を使用する（Ｓ１０４）。
【００２１】
例えば、ＱＭのタスクとしては、アクセル開度から目標トルクを演算し、その目標トルクに基づいて電子スロットルの目標スロットル開度を演算する目標トルク演算タスクがある。以下、目標トルク演算タスクが実施される例について説明する。
【００２２】
この目標トルク演算タスクにおいて、電子制御装置１００は、まず、アクセルペダルセンサからアクセル開度の出力を読み込む。そして、電子制御装置１００は、アクセル開度から目標トルクを演算する。そして、電子制御装置１００は、演算した目標トルクとなるように目標スロットル開度を演算し、その目標スロットル開度に基づいて電子制御スロットルを制御する。
【００２３】
次に、このような電子制御スロットルの制御において、異常が発生しているかを検知する必要がある。そこで、目標トルクとは別に、現在のトルクを算出して、目標トルクと現在のトルクとを対比させて、異常が発生しているかの判定を行う。ここで、このような判定を行うタスクは、安全性のレベルがＱＭよりも高いものである（例えば、ＡＳＩＬ−Ｃ）。それゆえ、このタスクは、ＵＭでは行われることができずＳＶＭで行われる必要がある。そこで、電子制御装置１００は、割り込み指令を出してＳＶＭの異常検知タスク（割り込み処理１）を割り込みさせることによって処理を行う。
【００２４】
割り込み処理１では、まず、電子制御装置１００は、この異常検知タスクはＳＶＭで行われるものであるので、ＡＳＩＬ用スタック領域１２６のデータを示す第１のスタックポインタを使用する必要がある。本事例では割り込み前にはＱＭのタスクが実施されており第２のスタックポインタが使用されているので、電子制御装置１００は、スタックポインタを切り換えて第１のスタックポインタを使用して、スタック領域としてＡＳＩＬ用スタック領域１２６を使用して処理を行うようにする（Ｓ２０１）。次に、電子制御装置１００は、各種センサからの出力に基づいて現在のトルクを算出する。そして、電子制御装置１００は、目標トルクと現在のトルクとを対比し、異常が発生しているか否かの判定を行う（Ｓ２０２）。
【００２５】
更に、前記異常の判定とは別に、タスクの実行順や実行タイミングに異常があるか否かを判定し、処置を行うタスクが実行される。このタスクは、安全性レベルがＱＭよりも高いものである（例えば、ＡＳＩＬ−Ｃ）。それゆえ、このタスクはＳＶＭで行われる必要がある。そこで、割り込み処理１のステップ２０２での処理中にこのような機能動作の異常判定を行う必要がある場合には、更に機能動作の異常判定タスクである割り込み処理２を実行する。この機能動作の異常判定タスクは、ＳＶＭで行われるものであるので、まず、第１のスタックポインタが使用されているかを判定する。本事例では、割り込み処理１中に行われているので、既に第１のスタックポインタが使用されると共にスタック領域としてＡＳＩＬ用スタック領域１２６が使用されている。したがって、スタックポインタの切り換えは行われない（Ｓ３０１）。そして、前記機能動作の異常判定タスクが行われる（Ｓ３０２）。このタスクの終了後に戻る処理がＳＶＭでの処理であるので、電子制御装置１００は、スタックポインタを第１のスタックポインタから切り換えずに割り込み処理１に戻る（Ｓ３０３）。
【００２６】
電子制御装置１００は、処理を割り込み処理１に戻らせ、処理を再開する。そして、電子制御装置１００は、割り込み処理１が終了したら、戻るタスクがＵＭのタスクであるので、スタックポインタを第２のスタックポインタに切り換え、スタック領域としてＱＭ用スタック領域１２４を使用して処理を行うようにする（Ｓ２０３）。その後、電子制御装置１００は、目標トルク演算タスクを再開して実行する。
【００２７】
ここで、電子制御装置１００における制御において、プログラムの書き換え等の特殊モードへのモード遷移が必要となる場合があり、ＵＭからより高い重要度が割り当てられたＳＶＭへ遷移することがある。しかし、電子制御装置１００において、ＱＭのタスクはＱＭからＳＶＭにモード遷移することができない。ここで、本実施例においては、低い重要度のモードから高い重要度のモードへの遷移は、ＳＶＭのタスクを割り込ませて割り込み処理にて実施する。具体的には、電子制御装置１００は、割り込み命令を出し（Ｓ１０５）、これによりＳＶＭのタスクを割り込ませて、ＱＭからＳＶＭにモード遷移をする（Ｓ４０１）。そして、モード遷移後にＳＶＭのタスクがスタックポインタを第１のスタックポインタに切り換えてスタック領域としてＡＳＩＬ用スタック領域１２６を使用して処理を行うようにし（Ｓ１０６）、電子制御装置１００は特殊モードでの処理等を実行する。
【００２８】
以上のようにして、電子制御装置１００は、複数のスタック領域が確保された上で、実行されるタスクに応じて割り込み処理を行い、適宜スタックポインタ及びスタック領域を切り換えてプログラムを実行する。
【００２９】
ここで、電子制御装置１００は、複数のスタック領域が確保された場合において、スタック領域が、タスクが実行される際にそのタスクが属するグループに応じて適切に使用されているかを監視することができる。
このような監視をするタスクは、割り込み処理にて実行される。この割り込み処理について図４及び５を参照しつつ説明する。
図４は、割り込み処理１及び割り込み処理２が実行されるフローにおいて、更に割り込み処理として、スタック領域の使用が適切に行われているかを監視するタスク（割り込み処理４）が行われる場合を表す概念図である。なお、上記説明した割り込み処理１及び２は定時的な割り込みとして実行される処理である。
【００３０】
図４において示されたフローは、定時的な割り込みである前記割り込み処理１が割り込んだ状態から始まっている。そして、電子制御装置１００は、割り込み処理１が実行されるので、スタックポインタを第１のスタックポインタに切り換えて、スタック領域としてＡＳＩＬ用スタック領域１２６を使用して処理を行うようにする（Ｓ５０１）。そして、電子制御装置１００は、タスクを実行する前に実行するタスクを示す実行タスク情報を適切なメモリに記録する（Ｓ５０２）。その後、割り込み処理１が実行される（Ｓ５０３）。
【００３１】
ここで割り込み処理１の実行中に、定時的な割り込みが実行されるタイミングとは相関しないタイミングで、実行されているタスクが、当該タスクが属するグループに応じて予め割り当てられたスタック領域を使用しているかを監視する割り込み処理４が行われる。本実施例においては、電子制御装置１００は、クランク角センサ等のエンジン回転センサにおける立ち上がりエッジ及び立ち下りエッジの検出がなされるタイミングで割り込み処理４を実行する。
【００３２】
この割り込み処理４では、電子制御装置１００は、グループに属するタスクとそのグループのタスクに使用させる予め割り当てられたスタック領域とが示されたテーブルを参照して、割り込み処理３で実施されたタスクがそのタスクが属するグループに応じて予め割り当てられたスタック領域を使用しているか否かを監視する。
【００３３】
例えば、まず、実行タスク情報を読み出す（Ｓ６０１）。そして、電子制御装置１００は、グループに属するタスクと当該グループに応じて予め割り当てられたスタック領域のアドレスの範囲とがグループごとに示されたテーブルを参照して、実行タスク情報が属するグループに基づいて、そのグループに応じて予め割り当てられたスタック領域のアドレスの範囲を読み出す。そして、電子制御装置１００は、スタックポインタが、前記読み出した予め割り当てられたアドレスの範囲内を示していれば、実行タスクがその属するグループに応じて予め割り当てられたスタック領域を使用していると判定する。一方、電子制御装置１００は、スタックポインタが、前記読み出した予め割り当てられたアドレスの範囲外を示していれば、実行タスクがその属するグループに応じて予め割り当てられたスタック領域を使用していないと判定する。そして、電子制御装置１００は、実行タスクがその属するグループに応じて予め割り当てられたスタック領域を使用していると判定した場合には、割り込みを終了して元の処理に戻る。一方、電子制御装置１００は、実行タスクがその属するグループに応じて予め割り当てられたスタック領域を使用していないと判定した場合には、例えば、外部装置にエラーを通知するか、又は、図示しない不揮発性のメモリ（フラッシュメモリ等）へエラーを記録する（Ｓ６０２）。
【００３４】
次に、スタック監視をする割り込み処理４が終了して割り込み処理１に処理が戻る。そして、割り込み処理１の実行中に前述したように機能動作の異常判定タスクである割り込み処理２が定時的な割り込みとして実行される。割り込み処理２は、ＳＶＭのタスクであり、スタック領域は、ＡＳＩＬ用スタック領域１２６を使用する。既に、割り込み処理１において、第１のスタックポインタが使用されているので、電子制御装置１００は、スタックポインタの切り換えを実行しない（Ｓ５０４）。そして、電子制御装置１００は、Ｓ５０２と同様に割り込み処理２の実行タスク情報を記録する（Ｓ５０５）。その後、電子制御装置１００は、割り込み処理２を実行する。
【００３５】
ここで、割り込み処理２の実行中に、電子制御装置１００は、例えば、エンジン回転センサにおけるエッジを検出して、スタック監視をする割り込み処理４を行う。電子制御装置１００は、この割り込み処理で、実行タスク情報を読み出す（Ｓ６０３）。電子制御装置１００は、読み出した実行タスク情報に基づいて、実行タスクがその属するグループに応じて予め割り当てられたスタック領域を使用しているかを判定し、Ｓ６０２と同様の処理を行う（Ｓ６０４）。その後、電子制御装置１００は、割り込み処理４を終了させて、割り込み処理２の実行に戻る。
【００３６】
このようなタスク監視を行う一例における、時間、実行タスク、使用スタック領域、スタック監視タスクの実行タイミングの関係を、図５を参照して説明する。
まず、実行タスクと使用されるスタック領域との関係について説明する。時間ｔ１で定時的な割り込みである割り込み処理１が実行される。この場合の使用されるスタック領域はＡＳＩＬ用スタック領域である。次に時間ｔ２で割り込み処理２が実行される。この場合の使用されるスタック領域は割り込み処理１と同様にＡＳＩＬ用スタック領域である。そして、時間ｔ３で割り込み処理２が終了し、割り込み処理１に戻る。更に、時間ｔ４で割り込み処理１が終了し、通常タスクに戻る。このときに、スタックポインタが切り換わり、ＱＭ用スタック領域を示すようになる。そして次に、時間ｔ５で通常タスク実行時に定時割り込みで割り込み処理１が実行される。これに対しスタック監視タスクは、エンジン回転センサにおけるエッジの検出時（ｔ１１〜ｔ１６）に割り込みを発生して、スタック監視タスクを実行する。ここで、エンジン回転センサにおけるエッジの検出タイミングは、定時的な割り込みである割り込み処理１及び定時的な割り込みである割り込み処理２の割り込みのタイミングとは相関していない。このように、定時的な割り込みタイミングとは相関しない、エンジン回転センサにおけるエッジの検出タイミングで、スタック監視タスクを実行することにより、定時的ではないランダムなタイミングでスタック領域の使用を監視することができる。
【００３７】
なお、本明細書においては２つのＣＰＵで構成されたデュアルプロセッサについて説明したが、ローカルメモリをそれぞれ有する３以上のＣＰＵで構成されたマルチプロセッサにおいても、本実施形態に記載したスタック領域を適用することができる。また、マルチコアプロセッサにおいてコアごとにローカルメモリが接続されている場合に、その各ローカルメモリに本実施形態に記載したスタック領域を設けることができる。
【００３８】
本実施形態においては、２つの重要度に分けて２つのモードで実行される場合について説明したが、電子制御装置は、３つ以上の重要度の分類が設けられて、その重要度の分類の数に応じてモードが分けられると共にスタック領域が複数確保されてもよい。
【００３９】
本明細書における、定時的とは、決められた時間間隔にという意味を指すだけではなく、決められた手順の中で決められたタイミングでという意味をも含む。
【符号の説明】
【００４０】
１００…電子制御装置、１２２…スタック領域
【図１】
0006466269.tif 000002
【図２】
0006466269.tif 000003
【図３】
0006466269.tif 000004
【図４】
0006466269.tif 000005
【図５】
0006466269.tif 000006