(57)【要約】【課題】リアルタイムＯＳを搭載した機器組み込みマイコンのソフトウェア開発において、動的に各タスクのスタック領域へのオーバライト発生を検知できるようにすることにより、メモリ破壊を未然に防止し、システム暴走の発生を防ぐ。【解決手段】マイコンに内蔵されるタイマ機能による割り込みハンドラを用いて、各タスクのスタックポインタが自タスクのスタック領域を越えているか否かのオーバライトチェックを一定周期毎に行う。通常、各タスクのスタック領域は連続して設定されるため、各タスクのスタックポインタが前段のスタック領域の開始位置を越えているか否かのモニタを行うことにより、オーバライトチェックを行う。これにより、各タスクのディスパッチとは非同期に、かつ動的に各タスクのスタックオーバライトを検出する。【選択図】  図２
2004157662.tif 000002
【特許請求の範囲】
【請求項１】
リアルタイムＯＳを搭載した機器組み込みマイクロコンピュータのソフトウェア開発における動的スタックオーバライトモニタ方法であって、前記マイクロコンピュータに内蔵されるタイマ機能による割り込みハンドラを用いて、各タスクのスタックポインタが自タスクのスタック領域を越えているか否かのオーバライトチェックを一定周期毎に行うことを特徴とする動的スタックオーバライトモニタ方法。
【請求項２】
前記マイクロコンピュータが組み込まれる機器のシステム構成および各タスクのＣＰＵ占有率に応じて前記オーバライトチェックを行う周期の変更が可能なことを特徴とする請求項１記載の動的スタックオーバライトモニタ方法。
【請求項３】
前記マイクロコンピュータが組み込まれる機器のソフトウェアの開発時は前記オーバライトチェックを有効化し、前記マイクロコンピュータが組み込まれる機器のソフトウェア開発終了後は前記オーバライトチェックを無効化することを特徴とする請求項１または２記載の動的スタックオーバライトモニタ方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、リアルタイムＯＳを搭載した機器組み込みマイクロコンピュータ（以下、マイコンと略記）のソフトウェア開発における動的スタックオーバライトモニタ方法に関する。
【０００２】
【従来の技術】
リアルタイムＯＳを搭載した機器組み込みマイコンのソフトウェア開発において、一般にシステム設計初期段階で各タスクのスタックサイズを設定するが、システム開発途上では、関数モジュールライブラリの追加や修正などにより、各タスクが使用するスタック領域が増大し、他タスクのスタック領域の記録内容を破壊してしまうことがあった。
【０００３】
これは他タスクのスタック領域へのオーバライトが発生したためであり、スタック領域を破壊されたタスクは正常なコントロールができなくなり、システム開発途上において度々発生するシステム暴走の原因となっていた。その対策として、システム設計時のさまざまな制約事項や注意事項が開発者に与えられている。
【０００４】
なお、タスク切り換え技術は、例えば、特許文献１に記載されている。
【０００５】
【特許文献１】
特開平１１−３１２０９２号公報
【０００６】
【発明が解決しようとする課題】
しかしながら、大規模かつ多機能なシステム開発が行われ、開発期間の短縮が求められる昨今の開発状況においては、システム設計時の制約事項や注意事項を人為的に確認しながらソフトウェア開発を行い、システム暴走の発生を防ぐことは困難である。
【０００７】
また、スタック領域へのオーバライトによるシステム暴走といった不具合は、その因果関係からメモリ破壊が不具合の原因であることを発見するのは非常に困難であり、その発生を未然に防ぐ対策手段が望まれていた。
【０００８】
本発明は上記事情に鑑みてなされたもので、リアルタイムＯＳを搭載した機器組み込みマイコンのソフトウェア開発において、動的に各タスクのスタック領域へのオーバライト発生の検知を可能にして、メモリ破壊を未然に防止し、システム暴走の発生を防ぐことができる動的スタックオーバライトモニタ方法を提供することを目的とする。
【０００９】
【課題を解決するための手段】
請求項１に係る発明は、リアルタイムＯＳを搭載した機器組み込みマイコンのソフトウェア開発における動的スタックオーバライトモニタ方法であって、マイコンに内蔵されるタイマ機能による割り込みハンドラを用いて、各タスクのスタックポインタが自タスクのスタック領域を越えているか否かのオーバライトチェックを一定周期毎に行うものである。
【００１０】
上記構成によれば、タイマ機能による割り込みハンドラを用いて一定周期毎にオーバライトチェックを行うことにより、各タスクのディスパッチとは非同期に、かつ動的に各タスクのスタックオーバライトを検出することができるため、メモリ破壊を未然に防止し、スタック領域へのオーバライトによるシステム暴走の発生を防ぐことができる。
【００１１】
請求項２に係る発明は、請求項１記載の動的スタックオーバライトモニタ方法において、マイコンが組み込まれる機器のシステム構成および各タスクのＣＰＵ占有率に応じて前記オーバライトチェックを行う周期の変更が可能なものである。
【００１２】
上記構成によれば、マイコンが組み込まれる機器のシステム構成および各タスクのＣＰＵ占有率に応じて前記オーバライトチェックを行う周期の変更が可能なことにより、システム構成が複雑になりタスク数が増加した状況ではオーバライトチェックをより頻繁に行う等、状況に応じた適切なチェック周期を設定することができる。
【００１３】
請求項３に係る発明は、請求項１または２記載の動的スタックオーバライトモニタ方法において、マイコンが組み込まれる機器のソフトウェアの開発時は前記オーバライトチェックを有効化し、マイコンが組み込まれる機器のソフトウェア開発終了後は前記オーバライトチェックを無効化するものである。
【００１４】
上記構成によれば、デバッグやシステム検証が必要なソフトウェアの開発時にはオーバライトチェックによりシステムの暴走を防ぎ、デバッグやシステム検証が完了した後のマイコン応用機器の量産時には不要となったオーバライトチェックを無効にすることにより、システム負荷を軽減することができる。
【００１５】
【発明の実施の形態】
以下、本発明の実施の形態について図面を参照しながら説明する。
図１はリアルタイムＯＳを搭載した機器組み込みマイコンのソフトウェア開発における、各タスクのスタック領域の構成を示す図である。また、図２は本発明の一実施の形態に係る動的スタックオーバライトモニタ方法を示すフローチャートである。
【００１６】
図１において、１０１はＯＳのシステムスタック、１０２、１０３、１０４はそれぞれタスクＡ、タスクＢ、タスクＣのスタックポインタ、１０５、１０６、１０７はそれぞれタスクＡ、タスクＢ、タスクＣのスタック領域の開始位置である。
【００１７】
ＯＳのシステムスタック１０１のサイズはシステムで使用するタスク数およびシステムコールにより変動する。ここでは、タスク数は便宜的にタスクＡ、タスクＢ、タスクＣの３タスクとしている。システム設計初期段階にて各タスクのスタック領域の開始位置１０５、１０６、１０７を設定する。各タスクのスタックポインタ１０２、１０３、１０４は、タスクが実行状態になったときにそれぞれ各スタック領域における現在位置を指している。
【００１８】
本発明では、各タスクのスタックポインタが自タスクのスタック領域を越えているか否かのオーバライトチェックを一定周期毎に行う。通常、各タスクのスタック領域は図１に示すように連続して設定されるため、このオーバライトチェックは、各タスクのスタックポインタが前段のスタック領域の開始位置を越えているか否かのモニタを行うことにより実施される。
【００１９】
次に図２を参照して動的スタックオーバライトモニタ方法について説明する。タスク数分だけスタックポインタが存在するため、ループ回数のチェックを行い（Ｓ２０１）、ループ回数がタスク数を超えていたらモニタ処理を終了する（Ｓ２０５）。
【００２０】
選択されたタスクのスタックポインタの現在位置と前段に配置されたタスクのスタック領域の開始位置とを比較し（Ｓ２０２）、その比較結果を判定する（Ｓ２０３）。スタックポインタの現在位置が前段に配置されたタスクのスタック領域の開始位置を越えていた場合は、スタックのオーバライトと判定し、ここでは、暴走対策としてプログラムカウンタを停止している（Ｓ２０４）。また、オーバライトしていない場合は先頭に戻り、モニタ処理を繰り返す。
【００２１】
図３にはスタックオーバライトモニタ関数のサンプルプログラムを具体的に示す。ここでは便宜的に、３０１のＴａｓｋＮｕｍ＝タスク数、３０２のＴａｓｋＳｐ＝タスクのスタックポインタの現在位置、３０３のＴａｓｋＳｐＩｎｉｔ＝タスクのスタック領域の開始位置としているが、システム変数の名称はシステムで実際に使用するリアルタイムＯＳに応じて変更されるものとする。
【００２２】
次に、スタックオーバライトのモニタタイミングについて説明する。マイコン内蔵のタイマ機能による割り込みハンドラを用いて、所定周期毎に前記スタックオーバライトモニタ関数を呼び出す。
【００２３】
割り込みハンドラの割り込みレベルが多重割り込み有りの場合、前記モニタ関数の優先順位が高いと一定周期でモニタが可能であるが、他の割り込み処理が中断されるか、または遅延されることがある。前記モニタ関数の優先順位が低いと不定周期でモニタすることとなるが、他の割り込み処理のタイミングは前記モニタ関数を組み込む前と同じとなる。そして、多重割り込み無しの場合、前記モニタ関数および他の割り込み処理がお互いに割り込み終了するまで待たされることになる。
【００２４】
また、モニタ周期を１００ｍ秒毎にした場合、例えば、終日（２４時間）動作させた場合、モニタ回数は１０×６０×６０×２４＝８６４，０００回となる。これらのタイマ機能による割り込みハンドラの割り込みタイミングおよび所定周期はマイコン応用機器のシステム構成に依存するものであり、最終的にはシステム構成に応じてチューニングが必要となる。
【００２５】
そのために、マイコンが組み込まれる機器のシステム構成および各タスクのＣＰＵ占有率に応じてモニタ周期の変更を可能にする方法が有益である。これは、システム構成および各タスクのＣＰＵ占有率に応じてタイマ割り込み間隔の設定変更を行う関数を用意することで実現できる。これにより、システム構成が複雑になりタスク数が増加した状況ではオーバライトチェックをより頻繁に行う等、状況に応じた適切なチェック周期を設定することができる。
【００２６】
次に、本モニタ関数の有効化と無効化について説明する。具体的には、マイコン内蔵のタイマ機能による割り込みハンドラを制御する内部レジスタに割り込み許可および不許可を設定して本モニタ関数の有効化と無効化をコントロールする。
【００２７】
これにより、デバッグや検証が必要なソフトウェアの開発時には本モニタ関数の実行を有効とし、マイコン応用機器の量産時には無効とすることができる。さらに量産時には、本モニタ関数の所定周期を決定するタイマ機能の動作も不要のため、タイマ機能を制御する内部レジスタの動作設定機能を停止し、マイコン応用機器のシステム動作に影響が及ぶ可能性をなくすことができる。
【００２８】
このように、本実施の形態の動的スタックオーバライトモニタ方法によれば、マイコン内蔵のタイマ機能による割り込みハンドラを用いて、一定周期毎に各タスクのスタックポインタの現在位置が自タスク以外のタスクが使用するスタック領域をオーバライトしているか否かをモニタすることができるため、スタック領域へのオーバライトによるシステム暴走を未然に防止することができる。
【００２９】
【発明の効果】
以上説明したように、本発明によれば、マイコン内蔵のタイマ機能による割り込みハンドラを用いて、各タスクのスタックポインタが自タスク以外のタスクが使用するスタック領域を指しているか否かを一定周期毎にモニタすることにより、スタック領域へのオーバライトによるシステム暴走といった不具合を未然に防止することができる。
【図面の簡単な説明】
【図１】リアルタイムＯＳを搭載した機器組み込みマイコンのソフトウェア開発における、各タスクのスタック領域の構成例を示す図。
【図２】本発明の一実施の形態に係る動的スタックオーバライトモニタ方法を示すフローチャート。
【図３】スタックオーバライトモニタ関数のサンプルプログラム。
【符号の説明】
１０１  ＯＳのシステムスタック
１０２、１０３、１０４  スタックポインタ
１０５、１０６、１０７  スタック領域の開始位置
３０１  タスク数
３０２  スタックポインタの現在位置
３０３  スタック領域の開始位置
【図１】
2004157662.tif 000003
【図２】
2004157662.tif 000004
【図３】
2004157662.tif 000005