(58)【調査した分野】(Int.Cl.,DB名)
【背景技術】
【0002】
自動車の車両制御は、車両に複数搭載されている車載用ECU(Electronic Control Unit)にて行われる。車載用ECUは演算制御を行う為、内部にマイクロコンピュータ(以後、マイコンと略称する)を備える。
【0003】
従来、車両制御に用いられるECUでは、シングルコアのマイコンを複数個搭載する事で、制御機能を実現していたが、近年では複数のコアを持つマルチコアのマイコンが普及しつつある。ここで、コアとは、中央処理装置(CPU)を意味している。
【0004】
マイコンは、演算制御にて、主プログラムからサブプログラムを呼び出した時などに、主プログラムへの戻り位置を示すアドレスをスタック領域に記憶する。マイコンのスタック領域は、一般的に、マイコンに内蔵された揮発性メモリ装置、例えば、スタチック型ランダムアクセスメモリ(SRAM)の一部が用いられる。しかし、スタック領域の記憶容量は有限の為、関数コールの増加などにより、記憶すべきアドレスのデータ量が増加し、スタック領域からあふれる場合がある。この場合、プログラムを実行する際に、一時的に、データを記憶するデータ領域などに、スタック領域に記憶されるべきアドレスのデータを記憶することが行われる。その結果、このデータ領域の記憶容量の一部がスタック領域に記憶されるべきアドレスのデータの記憶領域として割り当てられることになり、プログラムの実行に必要なデータ領域の記憶容量が侵食または減少する。この場合において、プログラムの実行に必要なデータが、スタック領域に記憶されるべきアドレスのデータによって書き換えられてしまうと、プログラムが正常に動作しなくなる虞もある。
【0005】
特許文献1は、マスタ側コア、スレーブ側コアを有し、前記スレーブ側コアに異常を検出した場合には、前記マスタ側コアは、前記スレーブ側コアにより実行されるべき処理を代行するフェイルセーフ処理を行う技術が開示されている。
【発明の概要】
【発明が解決しようとする課題】
【0007】
特許文献1では、前記スレーブ側コアに異常を検出した場合には、前記マスタ側コアによりスレーブ側コアの処理を代行する前記フェイルセーフ処理を、固定の制御値を用いて実行する等して簡易的な演算方法としている。
【0008】
この場合、フェイルセーフ処理への移行時に、センサ値やレンジ情報などの基本制御に必要なデータを前記スレーブ側コアより引き継がずに、前記マスタ側コアが前記フェイルセーフ処理を行う為、前記基本制御に必要なデータを最初から新たに演算処理を行い生成する必要がある。このことは、車両制御を行えない時間が発生してしまうことを意味する。
【0009】
本発明は、上記課題に鑑みてなされたものであり、基本制御処理動作時において、マスタ側コアに異常を検出した場合に、スレーブ側コアによるフェイルセーフ処理を行う際に、前記基本制御に必要なデータを、マスタ側コアより引き継ぎ、円滑に制御の切り替えを行う技術を提供する。
【0010】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【0011】
本発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【0012】
すなわち、車載用制御装置は、基本制御処理部と、異常検知処理部と、フェイルセーフ処理制御部と、を備える。
前記異常検知処理部は、マスタ側コアのスタック領域のスタック量が閾値を超えた時、スタック領域の異常を検知し、スタック警告データを、マスタ側コアとスレーブ側コアの両方よりアクセスできる共有記憶領域に格納する。前記基本制御処理部は、基本制御を実行している際に基本制御に使用しているデータと
前記スタック警告データを
前記共有記憶領域の
リングバッファのバッファ領域に格納する。
前記フェイルセーフ処理制御部は、前記異常検知処理部にて
前記スタック警告データが前記共有記憶領域に格納されていると検出した時に、前記基本制御処理部にて前記共有記憶領域の
前記リングバッファに格納されたデータの内、正常に動作していた時のデータを使用してスレーブ側コアにてフェイルセーフ処理を行う。
【発明の効果】
【0013】
本発明によれば、車両異常時の前記フェイルセーフ処理への移行処理を従来に比べて円滑に行うことを可能とする。
【0014】
本発明に関連する更なる特徴は、本明細書の記述、添付図面から明らかになるものである。また、上記した以外の、課題、構成及び効果は、以下の実施例の説明により明らかにされる。
【発明を実施するための形態】
【0016】
以下、添付図面を参照して本発明の実施例について説明する。添付図面は本発明の原理に則った具体的な実施例を示しているが、これらは本発明の理解のためのものであり、決して本発明を限定的に解釈するために用いられるものではない。また、以下の説明において、同一構成要素には同一符号を付し繰り返しの説明を省略することがある。
【0017】
以下の実施例は、車両の動作を制御する際に利用される、車載用ECU(Electronic Control Unit)の中のマイコン動作時のスタック領域の異常時の動作モードの切り替えを行う技術に関する。
【0018】
以下の実施例は、マスタ側コアにて主プログラムからサブプログラムを呼び出した時などに主プログラムへの戻り位置などを記憶するスタック領域に異常があるかをトリガとして、異常を検知したマスタ側コアに変わり、異常を検知したマスタ側コアの正常動作時の基本制御データをスレーブ側に引き継ぐ事で、円滑にフェイルセーフ制御への切り替えを行う事が可能となる。
【0019】
図1は、本発明に係る車載用制御装置の構成の一例を示すブロック図である。車載用ECU100は、制御対象機器130を制御する装置であり、マイコン110を備える。マイコン110は、2つのCPUコアとして、マスタ側コア111とスレーブ側コア112とを有する。以降において、マスタ側コア111とスレーブ側コア112とを総称して、CPUコアと称する。CPUコアは、共通バス113_1により、第1記憶領域123、ROM(Read Only Memory)121に相互に接続される。マスタ側コア111はローカルバス113_2により第2記憶領域122と接続される。また、スレーブ側コア112はローカルバス113_
3により第3記憶領域124と接続される。
【0020】
第1記憶領域123、第2記憶領域122及び第3記憶領域12
4のおのおのは、マイコン110に内蔵された揮発性メモリ装置、例えば、スタチック型ランダムアクセスメモリ(SRAM)により構成することが出来る。第1記憶領域123は、グローバルRAMとも呼ばれる記憶領域であり、マスタ側コア111とスレーブ側コア112との両方が共通に利用ないしアクセス可能な共有記憶領域とされる。第2記憶領域122は、ローカルRAMとも呼ばれる記憶領域であり、マスタ側コア111が利用ないしアクセス可能な専用の記憶領域とされる。第3記憶領域12
4は、
ローカルRAMとも呼ばれる記憶領域であり、スレーブ側コア112が利用ないしアクセス可能な専用の記憶領域とされる。ROM121は、マイコン110に内蔵された不揮発性メモリ装置、例えば、フラッシュメモリにより構成することが出来る。
【0021】
CPUコア111、112は、ROM121に格納されている制御プログラムの指示にしたがって、制御対象機器130に対する制御演算を実行する演算装置である。ROM121は、CPUコア111、112が実行する制御プログラムを格納する記憶装置である。第1記憶領域123は、例えば、CPUコア111、112が制御プログラムを実行している間に用いる変数などのデータを格納する記憶装置である。また、第2記憶領域122と第3記憶領域124のおのおのにはマスタ側コア111とスレーブ側コア112のおのおののスタック領域などが記憶される。すなわち、第2記憶領域122と第3記憶領域124には、マスタ側コア111とスレーブ側コア112とで共有する必要のない変数などのデータを格納する記憶領域である。各記憶領域123、122、124の詳細な使用方法は
図2にて説明する。
【0022】
制御対象機器130は、任意の機器でよい。以下では、車両変速機用の制御装置の一例を説明するが、これに限定されない。制御対象機器130としては、
図1に示されるように、アクチュエータ、他のコントロールユニット、センサ及びスイッチなどでもよい。
【0023】
図2はCPUコアと各記憶領域へのアクセス方法を示すブロック図である。
図2に示されるように、第1記憶領域123には、プログラム制御用データ格納領域(第1データ格納領域)231と基本制御データ格納領域(第2データ格納領域)232とが割り当てられる。第2記憶領域122には、動作監視制御データ格納領域(第3データ格納領域)221とスタック領域1(第1スタック領域)222とが割り当てられる。また、第3記憶領域124には、動作監視制御データ格納領域(第4データ格納領域)241とスタック領域2(第2スタック領域)242とが割り当てられる。
【0024】
マスタ側コア111は演算制御にて、主プログラムからサブプログラムを呼び出した時などに、主プログラムへの戻り位置を示すアドレスのデータなどをスタック領域1 222に記憶する。また、スレーブ側コア112も、同様に、スタック領域をスタック領域2 242に設定し演算処理を行う。
【0025】
マスタ側コア111はROM121に格納されている制御プログラムの指示にしたがって、車両走行制御及び、スレーブ側コア112の動作監視制御を行う。マスタ側コア111は車両走行制御を実行している間に用いる変数などのデータを第1記憶領域123のプログラム制御用データ格納領域231と基本制御データ格納領域232とに記憶する。また、マスタ側コア111はスレーブ側コア112の動作監視制御を行う為の変数などのデータを第2記憶領域122の動作監視制御データ格納領域221に記憶する。
【0026】
スレーブ側コア112はROM121に格納されている制御プログラムの指示にしたがって、マスタ側コア111によるスレーブ側コア112の動作監視制御と同様に、スレーブ側コア112によるマスタ側コア111の動作監視制御を行う。スレーブ側コア112は動作監視制御を行う為の変数などのデータを第3記憶領域124の動作監視制御データ格納領域241に記憶する。また、スレーブ側コア112は後述するスタックの異常時に動作するフェイルセーフ処理制御に用いる変数などのデータを第1記憶領域123のプログラムデータ格納領域231と基本制御データ格納領域232とに記憶する。
【0027】
動作監視制御データ格納領域(221、241)を第1記憶領域123に設けない理由は、例えば、スレーブ側コア112の処理が暴走した際でも、機能安全を確保・維持させる為である。第1記憶領域123に動作監視制御データ格納領域(221、241)を設けた場合、暴走したスレーブ側コア112が動作監視制御データ格納領域に記憶しているデータを破壊する虞がある。この場合、マスタ側コア111によるスレーブ側コア112の動作監視制御が正常に動作しなくなる。第1記憶領域123に動作監視制御データ格納領域(221、241)を設けない事により、スレーブ側コア112の処理が暴走した場合でも、マスタ側コア111によるスレーブ側コア112の動作監視制御を正常に動作させることが可能である。同様に、マスタ側コア111の処理が暴走した場合でも、スレーブ側コア112によるマスタ側コア111の動作監視制御を正常に動作させることが可能である。
【0028】
各CPUコア111、112にて行われる、車両走行制御やフェイルセーフ処理制御、各CPUコア111、112の動作監視処理制御を実行する際に、主プログラムからサブプログラムを呼び出した時などに主プログラムへの戻り位置を示すアドレスを記憶するスタック領域は、CPUコア111、112ごとに、スタック領域1 222、スタック領域2 242にそれぞれ記憶する。
【0029】
マスタ側コア111による車両走行制御において、通常動作を行っている場合、主プログラムからサブプログラムを呼び出した時などに、主プログラムへの戻り位置を示すアドレスのデータなどはスタック領域1 222からあふれることは無い。
【0030】
ただし、制御プログラムの予期せぬソフト不具合や制御プログラムに対する悪意のあるデータ改ざん等により、主プログラムへの戻り位置を示すアドレスのデータがスタック領域1 222から動作監視制御データ格納領域221にあふれることも考えられる。この状態は、スタックオーバーフローと呼ばれる。スタックオーバーフローの状態が発生すると、マスタ側コア111によりスレーブ側コア112の動作監視制御が実行された際に、主プログラムへの戻り位置を示すアドレスのデータが動作監視制御データにより上書きされ、プログラムが正常に動作しなくなる。
【0031】
図3Aは、マスタ側コアにより実行される基本制御処理部の処理フローを説明するための図である。
図3Bは、マスタ側コアにより実行される異常検知処理部の処理フローを説明するための図である。
図3Cは、スレーブ側コアにより実行されるフェイルセーフ処理制御部の処理フローを説明するための図である。
【0032】
マスタ側コア111及びスレーブ側コア112により実行される制御プログラムは、
図3Aで示される基本制御処理部と、
図3Bで示される異常検知処理部と、
図3Cで示されるフェイルセーフ処理制御部とを有している。以下、
図3A、
図3B、
図3Cを用いて、前述のスタック領域1 222から動作監視制御データ格納領域221にあふれた際に、スレーブ側コア112によるフェイルセーフ処理制御S351に移行する方法を説明する。
【0033】
図3A及び
図3Bに示されるように、マスタ側コア111は、演算の際に、車両走行制御を行う為の基本制御タスクS301とスタック領域1 222のスタック検知タスクS321とを処理する。また、
図3Cに示されるように、スレーブ側コア112はフェイルセーフ処理制御を実行する。
【0034】
マスタ側コア111及びスレーブ側コア112の動作説明を車両変速機用の制御装置ECUを例にして行う。
【0035】
マスタ側コア111による基本制御タスクS301とスタック検知タスクS321はマイコン110に搭載されている機能であるフリーランカウンタによる割り込み処理にて定時処理で動作する。この際、スタック検知タスクS321は基本制御タスクS301より速い周期で動作し、基本制御タスクS301などの動作にてスタック領域1 222へ記憶されるデータの量を監視する。これにより、スタック領域1 222に異常が発生した場合、基本制御タスクS301などのタスク動作中に割り込んで、異常を検知する事が可能となる。なお、フリーランカウンタを用いて、スタック検知タスクS321を基本制御タスクS301より速い周期で動作させることは、当業者にとって容易に実施可能である。たとえば、同一ビット長の2つのフリーランカウンタを利用する場合、一方のフリーランカウンタのカウントクロックの周波数を、他方のフリーランカウンタのカウントクロックの周波数より低く設定する。これにより、他方のフリーランカウンタのオバーフロー割り込みの周期を、一方のフリーランカウンタのオバーフロー割り込みの周期より、速い周期とすることが可能である。
<基本制御処理部>
図3Aを用いて、基本制御処理部を説明する。
【0036】
(S301):基本制御タスクS301では、車両の走行制御や異常検知処理などが実行される。
【0037】
(S302):S301の初めにおいて、
図3Bに示されるスタック検知タスクS321によりプログラム制御用データ格納領域231に格納されるスタック警告フラグ(スタック警告データ)の有無を確認し、スタック警告フラグがセットされている(有)か、セットされていない(無)かの判断を行う。
【0038】
(S303):(S302)にてスタック警告フラグが無し(NO)と判断された場合、車両走行制御などS303の処理を実行する。
【0039】
(S304):車両走行制御などS303にて使用した基本走行制御に必要な油圧制御をする為の各種アクチュエータ130及びレンジ情報などのセンサ及びスイッチ130などの入出力データや、他コントロールユニット130より送信されてくるエンジン回転数やブレーキ動作といった情報を
図4に示すリングバッファ400の基本制御データ格納領域401に順次格納していく。同時に、(S302)で得られたスタック警告フラグの情報も、リングバッファ400のスタック異常検知フラグ格納領域402に順次格納する。リングバッファ400は
図2に示す基本制御データ格納領域232に設けられる記憶領域である。リングバッファ400へのデータの格納は”n“個までデータを格納した次の周期では、最初の格納領域である”0“番に戻りデータを格納していく。
【0040】
リングバッファ400の構成は以下とされている。
図4において、番号No.はリングバッファ400に設けられたバッファ領域の番号を示しており、この番号はデータの格納の順番を示す番号の意味合いも含む。すなわち、最初のデータ(基本制御データ0及びスタック異常検知フラグ0)は”0“番のバッファ領域に格納される。次のデータ(基本制御データ1およびスタック異常検知フラグ1)は”1“番のバッファ領域に格納される。その次のデータ(基本制御データ2及びスタック異常検知フラグ2)は”2“番のバッファ領域に格納される。その次のデータ(基本制御データn及びスタック異常検知フラグn)は”n“番のバッファ領域に格納される。
図4には記載されていないが、その次のデータ(基本制御データn+1およびスタック異常検知フラグn+1)は再度”0“番のバッファ領域に格納され、その次のデータ(基本制御データn+2及びスタック異常検知フラグn+2)は再度”1”番のバッファ領域に格納される。このように、データの格納は、バッファ領域をリング状に順次変更しながら実施される。なお、
図4に示されるように、基本制御データは、例示として、基本制御データn[データAn、データBn・・・](n=0、1、2、n)としている。
【0041】
(S304)の後、再度、(S301)として割り込み処理による定時処理を待つ状態となる。
【0042】
(S305):(S302)により、スタック警告フラグが有り(YES)と判断された場合、スタック領域1 222に異常が発生していると判断し、基本制御タスクを終了する。
<異常検知処理部>
図3Bを用いて、異常検知処理部を説明する。
【0043】
(S321):スタック検知タスクS321ではスタック領域1 222へ記憶されるデータの量を監視し、異常が発生した場合にスタック警告フラグをセットする処理が実行される。
【0044】
(S322):スタック量計測S322では、例えば、マイコン110の機能によりセットされる次にプログラムが動作するべき主プログラムへの戻り位置を示すアドレスのデータがどれかを示すスタックポインタの値を監視し、現在スタック領域1 222がどの程度使用されているかを計測する。
【0045】
これは、制御の初期化時に改めスタック領域を任意の値(例えば、16進で、FFの値)などで埋め尽くし、主プログラムへの戻り位置を示すアドレスのデータなどにより、スタック領域1 222の内容がFFで無くなった箇所までを測定する方法としても良い。
【0046】
(S323):スタック量計測S322で測定したスタック量が改め任意の値で設定する閾値を越えるかどうかを判定する。閾値はスタック領域1 222よりも小さい値で設定し、スタック領域1 222に異常が発生した場合でも、動作監視制御データ格納領域241への侵食が発生しないようにする。スタック量が閾値を超えていない場合、何もせず次の周期動作を待つ。
【0047】
(S324):(S323)によりスタック量が任意の閾値を超えたと判断された場合、スタック警告フラグをセットする。スタック警告フラグはプログラム制御用データ格納領域231に格納する。
【0048】
(S324)の後、再度、(S321)として割り込み処理による定時処理を待つ状態となる。
<フェイルセーフ処理制御部>
スレーブ側コア112によるフェイルセーフ処理制御S351も、マスタ側コア111による基本制御タスクS301とスタック検知タスクS321と同様に、マイコン110に搭載されている機能であるフリーランカウンタによる割り込み処理にて定時処理で動作する。
【0049】
図3Cを用いて、フェイルセーフ処理制御部を説明する。
【0050】
(S351):フェイルセーフ処理制御S351はスタック検知タスクS321にてスタック警告フラグがセットされた場合、リングバッファ400に格納された異常が発生していない時の基本制御データを読み出し、異常時の走行制御を行う。これにより、基本制御タスクS301より各種制御データを引き継ぎ円滑に制御の切り替えを行う
(S352):フェイルセーフ処理制御S351の初めにスタック検知タスクS321により格納されるスタック警告フラグの有無を確認し、スタック警告フラグがセットされているかいないかの判断を行う。スタック警告フラグが無し(NO)の場合、何もせず次の周期動作を待つ。
【0051】
(S353):(S302)にてスタック警告フラグが有り(YES)と判断された場合、スタック警告フラグがはじめてセットされたかどうか(初回動作かどうか)の判断を行う。
【0052】
(S355):(S353)にて初回動作と判断された場合、基本制御データ格納領域232に格納されたリングバッファ400のデータを取得する。その際、リングバッファ400には基本制御データと共にスタック異常検知フラグが格納されている為、最新の情報から過去のデータに向けて順次参照を開始し、スタック異常検知フラグがセットされていない箇所のデータ(基本制御データ)を異常時走行制御の初回値としてセットする。また、マスタ側コア111により動作を制御されていた各種アクチュエータ130及びセンサ及びスイッチ130、他コントロールユニット130との通信制御をスレーブ側コア112で動作可能なように設定を変更する。
【0053】
(S354):異常時走行制御S354では、燃費向上のために作動するロックアップ機構の制御処理や坂道などでの速度低下(上昇)を予測してギア比を変更する処理などを省き、スタックの消費量がある一定の値までしか使わない用に設計した制御にて車両制御を行う。すなわち、初回動作にて正常時のデータを使用して、事前に処理負荷が低く、異常が発生しないように設計された異常時走行制御処理へ移行する。ここで、初回制御で使用するデータは(S355)により正常に走行した時の最新のデータとなっている為、円滑に制御の切り替えが可能となる。
【0054】
(S352及びS354)の後、再度、(S351)として割り込み処理による定時処理を待つ状態となる。
【0055】
なお、上記の実施例ではリングバッファ400の最新データ判断をスタック異常検知フラグの有無としたが、スタック領域の使用量が異常に大きくなっている場合、各タスクの実行時間も増加しているため、リングバッファに各タスクの実行時間を記憶し、そのデータを持って正常データかどうか判断しても良い。
【0056】
上述の実施例において、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。全ての構成が相互に接続されていてもよい。