(57)【要約】      （修正有）【課題】スタックオーバーフローを検出すると共に、オーバーフロー検出時にリセットを伴わず、かつ、異常処理の実行に必要なスタック領域を確保する方法を提供する。【解決手段】車両機器制御部において、ＲＡＭ１０５は、データを一次退避するスタック１０７と、スタック１０７内のデータの格納先が示されたスタックポインタを管理するスタックポインタ監視部と、を有する。スタック１０７は、予め定めたフェールセーフ領域２０２を備える。スタックポインタ監視部は、スタックポインタがフェールセーフ領域２０２に入ることが予測された場合又はフェールセーフ領域２０２を指している場合は、車両機器制御部へオーバーフローの予兆を示す信号を出力する。【選択図】図２
2019036261.tif 000002
【特許請求の範囲】
【請求項１】
データを一次退避するスタックと、
前記スタック内の前記データの格納先が示されたスタックポインタを管理する制御部と、を有し、
前記スタックは、予め定めたフェールセーフ領域を備え、
前記制御部は、前記スタックポインタが前記フェールセーフ領域に入ることが予測された場合、又は前記フェールセーフ領域を指している場合は、車両機器制御部へオーバーフローの予兆を示す信号を出力する、スタックオーバーフロー検知装置。
【請求項２】
請求項１記載のスタックオーバーフロー検知装置であって、
前記制御部は、前記スタックポインタが前記フェールセーフ領域外を指している場合、車両機器制御部へオーバーフロー解除を示す信号を出力する、スタックオーバーフロー検知装置。
【請求項３】
データを一次退避するスタックと、
前記スタック内のデータの格納先が示されたスタックポインタを管理する制御部と、
車両機器を制御する車両機器制御部と、
走行制御を行う走行制御部と、を有し、
前記スタックは、予め定めたフェールセーフ領域を備え、
前記制御部は、前記スタックポインタが前記フェールセーフ領域に入ることが予測された場合、又は前記フェールセーフ領域を指している場合は、車両機器制御部へオーバーフローの予兆を示す信号を出力し、
前記車両機器制御部は、オーバーフローの予兆を示す信号が入力された場合、フェールセーフ通知信号を前記走行制御部へ送信し、
前記走行制御部は、前記フェールセーフ通知信号が入力された場合、フェールセーフモードに基づく処理要求信号を前記車両機器制御部へ送信する、車両制御システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スタックオーバーフロー検知装置及び車両制御システムに関する。
【背景技術】
【０００２】
マイクロコンピュータ上で動作するソフトウェア、特にリアルタイム性が必要となるソフトウェアの制御においては、頻繁に割り込み処理や関数呼び出しが行われる。割り込み処理の実行においては、その時点で実行されていた処理を一時中断して、処理データを一時退避し、割り込み処理の終了後には退避データを利用して割り込み前の処理を再開する。この処理データを一時退避する領域として、マイクロコンピュータに内蔵されるＲＡＭに、スタック領域が設けられる。
【０００３】
スタック領域はＲＡＭ内に確保されるため、ソフトウェア実行用のメモリ領域と隣接することとなる。そのため、ソフトウェアの不具合等によりスタック領域に空きがなくなり、退避情報がスタック領域外にあふれるスタックオーバーフローが発生すると、隣接するメモリ領域に格納されているデータが破壊され、ソフトウェアが予期せぬ動作をする可能性がある。
【０００４】
このため、従来スタックオーバーフローを検出する方法が提案されている。例えば、スタック領域の両端部に使用禁止領域を設け、使用禁止領域へのアクセスをトリガにスタックオーバーフローを検出する方法（特許文献１参照）や、スタック領域の端部に定期処理で使用する特定データを格納し、データが使用できなくなることにより、スタックオーバーフローを検出する方法（特許文献２参照）がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−２３３７６号公報
【特許文献２】特開２０１２−１２８７４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上述した例では、オーバーフロー検出後の処理は、データ破壊を行わせないためにリセット、または特定の異常処理となっている。リセットを行う場合は、その時点で一度ソフトウェアの動作を止めることとなる。また、オーバーフロー検出後の異常処理では、既にスタック領域に空きがないため、あまり多くの処理は行えない。
【０００７】
ここで、自動車制御において、走行用の車両機器のソフトウェア制御をリセットする場合、リセットによって車両機器が急停止することを防ぐため、例えば車両機器全体を管理する上位の制御（ここでは「走行制御」と呼ぶ）から、リセット処理を管理する必要がある。しかし、自動運転制御の要求が高まり、走行制御が持つ機能が増加する中で、リセット処理の管理により車両制御の処理的負担が増すことは望ましくない。
【０００８】
また、自動車の走行用装置として異常処理を行う場合は、機能安全の面から乗員や周囲の安全を考慮した処理を行うことが望ましい。しかしスタック領域に空きがない状態、つまり割り込みや関数呼び出しができない状態では、取り得る対処が限られてしまう。
【０００９】
そこで、本発明は、スタックオーバーフローを検出すると共に、オーバーフロー検出時にリセットを伴わず、かつ異常処理の実行に必要なスタック領域を確保することを目的とする。
【課題を解決するための手段】
【００１０】
上記課題を解決するために、本発明は、一例として、データを一次退避するスタックと、前記スタック内の前記データの格納先が示されたスタックポインタを管理する制御部と、を有し、前記スタックは、予め定めたフェールセーフ領域を備え、前記制御部は、前記スタックポインタが前記フェールセーフ領域に入ることが予測された場合、又は前記フェールセーフ領域を指している場合は、車両機器制御部へオーバーフローの予兆を示す信号を出力する。
【発明の効果】
【００１１】
本発明によれば、スタックオーバーフローを発生ではなく予兆として検出することで、スタックオーバーフローの発生前に異常処理を実施することができる。この時点ではスタックオーバーフローは発生していないため、データ破壊を防ぐために即時リセットを行う必要が無く、また、スタック領域に空きがある状態のため、異常処理の実行に際してスタック領域を使用して、より高度なフェールセーフ処理が実現できる。
【図面の簡単な説明】
【００１２】
【図１】走行制御システム構成の一例を示すブロック図である。
【図２】スタック領域内にフェールセーフ領域を持つRAM領域の定義例である。
【図３】スタックポインタ監視を行う処理の一例である。
【図４】本発明によるフェールセーフ処理を開始するまでの動作例である。
【図５】本発明の実施例を示すブロック図である。
【発明を実施するための形態】
【００１３】
本発明の一実施形態について説明する。
図１は、実施形態における走行制御システム構成の説明図である。図１において、自動車の走行時に使用される車両機器１０１は、マイクロコンピュータとマイクロコンピュータ内部で動作するソフトウェアにより構成される車両機器制御部１０２によって制御されるものであり、車両機器 制御部１０２は、車両全体の走行処理を管理する走行制御部１０３からの処理要求に従って動作するものである。車両機器制御部１０２において動作するソフトウェアは、マイクロコンピュータに内蔵されるＲＯＭ１０４、ＲＡＭ１０５とレジスタ１０６を参照する。
【００１４】
ＲＡＭ１０５は、ソフトウェア実行中に発生する割り込みや関数呼び出しにおいて、処理実行後の戻り先や実行中のレジスタ情報等の処理データを格納するスタック１０７を持つ。スタック１０７について、車両機器制御部１０２はレジスタ１０６にスタックの参照アドレス情報を保持するスタックポインタを持ち、このスタックポインタは、スタックポインタ監視（制御部）１０８によって監視される。
【００１５】
図２は、本実施形態におけるＲＡＭ１０５の説明図である。ＲＡＭ１０５は、スタック領域１０７を持ち、スタック領域１０７は、通常動作中のスタック領域として使用される通常使用領域２０１と、フェールセーフ処理のために使用されるフェールセーフ領域２０２を含む。フェールセーフ領域２０２は、通常使用領域２０１と、ソフトウェア実行時の変数値等が格納されるデータ領域２０３との間に位置する。
【００１６】
図２の通常使用領域２０１とフェールセーフ領域２０２は、領域の定義領域が異なるのみで、それぞれが持つ機能自体に差異は無い。それぞれの定義領域については、車両機器制御の設計時に事前に必要量を見積もればよい。そのうち通常使用領域２０１については、車両機器制御の機能実現に必要なスタックサイズに基づき、フェールセーフ領域２０２については、車両機器制御のフェールセーフ機能実現に必要なスタックサイズに基づけばよい。
【００１７】
図１のスタックポインタ監視１０８は、ソフトウェア実行中のスタックへのデータ退避、またはスタックからデータ復帰の際に参照される、スタックポインタを監視する。スタックポインタ監視１０８は、スタックポインタが示すアドレス値が、スタックの通常使用領域２０１からフェールセーフ領域２０２に移行する場合、車両機器制御部１０２に対してスタックオーバーフローの予兆を示す信号を出力する。逆にスタックポインタがフェールセーフ領域２０２から通常使用領域２０１に移行した場合、車両機器制御部１０２に対してスタックオーバーフローが解除されたことを示す信号を出力する。
【００１８】
図３は、本実施形態におけるスタックポインタ監視を実現する処理フロー例の説明図である。この例によると、スタックポインタ監視１０８の起動後、処理Ｓ３０１にてレジスタから現在のスタックポインタ値を取得し、処理Ｓ３０２にてスタックポインタに加減算されるアドレス値を取得し、処理Ｓ３０３にて、Ｓ３０１とＳ３０２で取得した二値の加減算を行い、更新後のスタックポインタアドレス値を算出する。処理Ｓ３０４にて、更新後のスタックポインタアドレスが指す領域が、前述の通常使用領域２０１からフェールセーフ領域２０２に移行すると判定された場合、Ｓ３０５の処理にてオーバーフローの予兆検出信号を車両機器制御部１０２に対して出力する。それ以外の場合、処理Ｓ３０６にて更新後のスタックポインタアドレスが指す領域が、フェールセーフ領域２０２から通常使用領域２０１に移行すると判定されたならば、処理Ｓ３０７にてオーバーフロー解除信号を車両機器制御部１０２に対して出力する。
【００１９】
次に、上記実施形態におけるオーバーフロー予兆検出の動作について説明する。
車両機器制御部１０２の起動時、ソフトウェアはＲＯＭ１０４に格納されている、設計時に定義された、通常使用領域２０１とフェールセーフ領域２０２の境界値アドレスを、スタックポインタ監視１０８の使用データとして取得した後、走行制御部１０３からの処理要求に基づき車両機器１０１の制御を行う。
【００２０】
車両機器制御部１０２のソフトウェアは、内部で通常動作モードとフェールセーフモードの２つの動作モードを持ち、フェールセーフモードでは、通常動作モードで動作する処理のうち、設計時にフェールセーフ処理で不要と定義された処理は動作しない。車両機器１０１の制御の過程でスタックを使用する際、スタックポインタ監視１０８からスタックオーバーフロー予兆検出信号を受信した場合、ソフトウェアの動作モードをフェールセーフモードへと移行し、同時に走行制御部１０３にフェールセーフ通知信号を送信する。逆に、スタックポインタ監視１０８からスタックオーバーフロー解除信号を受信した際には、ソフトウェアの動作モードを通常動作モードへと移行し、同時に走行制御部１０３にフェールセーフ解除通知信号を送信する。
【００２１】
図４はソフトウェアが通常動作モードからフェールセーフモードに移行する際の動作説明図である。例として、通常動作モードのソフトウェアでは周期的な処理Ａ，Ｂ，Ｃが実行されており、処理Ｃはフェールセーフモードでは動作対象外と定義されているものとする。
ここで、図４（ａ）においては、通常動作モードで処理Ｂが動作しており、スタックの通常使用領域には既に空きが無い状態となっている。図４（ｂ）にて処理Ａの割込み要求が発生し、処理Ｂの処理データがスタックに一時退避されると、通常使用領域に空きが無いため、スタックポインタはフェールセーフ領域に移行し、前記スタックポインタ監視１０８によってスタックオーバーフロー予兆検出信号が車両機器 制御部１０２に送信される。オーバーフロー予兆検出信号を受けた車両機器 制御部１０２のソフトウェアは、ソフトウェアの動作モードを通常動作モードからフェールセーフモードに移行し、走行制御部１０３にフェールセーフ通知を行うフェールセーフ通知処理を行う。図４（ｃ）では、ソフトウェアの動作モードがフェールセーフモードとなっているため、事前に定義したとおりに処理Ｃは動作せず、以降は周期処理Ａ，Ｂのみを動作させながら、走行制御部１０３からのフェールセーフ処理要求を実施する。
【００２２】
上記とは逆に、図４（ｄ）のようにスタックポインタが通常使用領域に移行し、車両機器 制御部１０２がスタックポインタ監視１０８からスタックオーバーフロー解除信号を受信した場合、車両機器制御部１０２のソフトウェアは動作モードを通常動作モードに移行し、走行制御部１０３にフェールセーフ解除通知信号を送信する。ただし、単純にスタックポインタ監視１０８からの信号受信時に動作モードを切り替えた場合、通常使用領域とフェールセーフ領域の境界付近で頻繁に動作モードの切り替えが発生する可能性がある。そのため、通常モードへの移行に際しては、スタックポインタが通常使用領域に移行し、かつ通常使用領域に一定以上の空き領域が生じた場合にのみ行うという方法を取っても良い。
【００２３】
上記したように、本実施の形態をとることにより、スタックオーバーフローの発生前に、スタックを使用した異常処理を実施することができる。このため、故障検出時のフェールセーフ処理よりも時間的な猶予が生まれ、通常処理と異常処理を並行に行う等、多くの処理が実施できることになる。
【００２４】
図５は、モーター駆動の車両において自動運転制御を行う走行制御５０１と、モーター制御を行うインバータ５０３と、その制御を行うインバータ制御５０２の構成を含む実施例である。インバータ制御５０２は、走行制御５０１からの処理要求に応じて、周期処理によりインバータ５０３を制御してモーター操作を行うものであり、同時にインバータ５０３の故障検出や現在のモーター回転数の取得等を行う。走行制御５０１は、自動運転走行中のフェールセーフの処理として、路肩に寄りつつ減速し、車両停止を行い、ソフト的に問題のあった制御のリセットを行うものである。
【００２５】
インバータ制御５０２において、スタックオーバーフローの予兆を検出した際、インバータ制御５０２は走行制御５０１にフェールセーフ通知を行う。この際、インバータ制御５０２はスタックのフェールセーフ領域が使用できるため、車両が停止しないようにモーター回転制御や故障検出といった、走行に必須な処理を継続する。通知を受けた走行制御５０１は、車両を減速するために、インバータ制御５０２へ減速処理要求を出すが、この時点で処理要求を受ける側のインバータ制御５０２は、通常動作時とほぼ同様に動作しているため、減速処理を通常通り行うことが出来る。減速処理を継続し、車両が停止したことが確認できた時点で、走行制御５０１はインバータ制御のリセットにより、オーバーフローの解消を行う。
【００２６】
上記のように、スタックのフェールセーフ領域の使用により、オーバーフロー検出時よりも高度なフェールセーフ処理が実現できる。また、フェールセーフ処理における走行制御５０１は、インバータ制御５０２に対しては単純に減速処理要求をするのみでよく、走行制御の処理簡略化も可能である。
【００２７】
上記実施形態において、スタックポインタ監視をスタックポインタ更新の契機で行う方式を述べたが、これに限るものではなく、例えば周期処理による定期監視で行うことも可能であり、その場合は、周期処理の間隔で枯渇しないフェールセーフ領域と周期間隔の定義を行えばよい。実現方法についてもソフトウェアに限るものではなく、処理性能を考慮してハードウェアによる監視を行ってもよい。
【００２８】
上記実施形態は、次のように表現することができる。
【００２９】
すなわち、データを一次退避するスタックと、前記スタック内の前記データの格納先が示されたスタックポインタを管理する制御部と、を有し、前記スタックは、予め定めたフェールセーフ領域を備え、前記制御部は、前記スタックポインタが前記フェールセーフ領域に入ることが予測された場合、又は前記フェールセーフ領域を指している場合は、車両機器制御部へオーバーフローの予兆を示す信号を出力する、スタックオーバーフロー検知装置。
【００３０】
また、前記制御部は、前記スタックポインタが前記フェールセーフ領域外を指している場合、車両機器制御部へオーバーフロー解除を示す信号を出力する、スタックオーバーフロー検知装置。
【００３１】
また、データを一次退避するスタックと、前記スタック内のデータの格納先が示されたスタックポインタを管理する制御部と、車両機器を制御する車両機器制御部と、走行制御を行う走行制御部と、を有し、前記スタックは、予め定めたフェールセーフ領域を備え、前記制御部は、前記スタックポインタが前記フェールセーフ領域に入ることが予測された場合、又は前記フェールセーフ領域を指している場合は、車両機器制御部へオーバーフローの予兆を示す信号を出力し、前記車両機器制御部は、オーバーフローの予兆を示す信号が入力された場合、フェールセーフ通知信号を前記走行制御部へ送信し、前記走行制御部は、前記フェールセーフ通知信号が入力された場合、フェールセーフモードに基づく処理要求信号を前記車両機器制御部へ送信する、車両制御システム。
【符号の説明】
【００３２】
１０１：車両機器
１０２：車両機器制御部
１０３：走行制御部
１０４：ＲＯＭ
１０５：ＲＡＭ
１０６：レジスタ
１０７：スタック
１０８：スタックポインタ監視（制御部）
２０１：スタックの通常使用領域
２０２：スタックのフェールセーフ領域
２０３：ＲＡＭのデータ領域
５０１：走行制御
５０２：インバータ制御
５０３：インバータ
【図１】
2019036261.tif 000003
【図２】
2019036261.tif 000004
【図３】
2019036261.tif 000005
【図４】
2019036261.tif 000006
【図５】
2019036261.tif 000007