JP2004157662A - 動的スタックオーバライトモニタ方法 - Google Patents

動的スタックオーバライトモニタ方法 Download PDF

Info

Publication number
JP2004157662A
JP2004157662A JP2002321334A JP2002321334A JP2004157662A JP 2004157662 A JP2004157662 A JP 2004157662A JP 2002321334 A JP2002321334 A JP 2002321334A JP 2002321334 A JP2002321334 A JP 2002321334A JP 2004157662 A JP2004157662 A JP 2004157662A
Authority
JP
Japan
Prior art keywords
task
overwrite
stack
microcomputer
check
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2002321334A
Other languages
English (en)
Inventor
Masato Hanashima
正人 花嶋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Panasonic Holdings Corp
Original Assignee
Matsushita Electric Industrial Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP2002321334A priority Critical patent/JP2004157662A/ja
Publication of JP2004157662A publication Critical patent/JP2004157662A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

【課題】リアルタイムOSを搭載した機器組み込みマイコンのソフトウェア開発において、動的に各タスクのスタック領域へのオーバライト発生を検知できるようにすることにより、メモリ破壊を未然に防止し、システム暴走の発生を防ぐ。
【解決手段】マイコンに内蔵されるタイマ機能による割り込みハンドラを用いて、各タスクのスタックポインタが自タスクのスタック領域を越えているか否かのオーバライトチェックを一定周期毎に行う。通常、各タスクのスタック領域は連続して設定されるため、各タスクのスタックポインタが前段のスタック領域の開始位置を越えているか否かのモニタを行うことにより、オーバライトチェックを行う。これにより、各タスクのディスパッチとは非同期に、かつ動的に各タスクのスタックオーバライトを検出する。
【選択図】 図2

Description

【0001】
【発明の属する技術分野】
本発明は、リアルタイムOSを搭載した機器組み込みマイクロコンピュータ(以下、マイコンと略記)のソフトウェア開発における動的スタックオーバライトモニタ方法に関する。
【0002】
【従来の技術】
リアルタイムOSを搭載した機器組み込みマイコンのソフトウェア開発において、一般にシステム設計初期段階で各タスクのスタックサイズを設定するが、システム開発途上では、関数モジュールライブラリの追加や修正などにより、各タスクが使用するスタック領域が増大し、他タスクのスタック領域の記録内容を破壊してしまうことがあった。
【0003】
これは他タスクのスタック領域へのオーバライトが発生したためであり、スタック領域を破壊されたタスクは正常なコントロールができなくなり、システム開発途上において度々発生するシステム暴走の原因となっていた。その対策として、システム設計時のさまざまな制約事項や注意事項が開発者に与えられている。
【0004】
なお、タスク切り換え技術は、例えば、特許文献1に記載されている。
【0005】
【特許文献1】
特開平11−312092号公報
【0006】
【発明が解決しようとする課題】
しかしながら、大規模かつ多機能なシステム開発が行われ、開発期間の短縮が求められる昨今の開発状況においては、システム設計時の制約事項や注意事項を人為的に確認しながらソフトウェア開発を行い、システム暴走の発生を防ぐことは困難である。
【0007】
また、スタック領域へのオーバライトによるシステム暴走といった不具合は、その因果関係からメモリ破壊が不具合の原因であることを発見するのは非常に困難であり、その発生を未然に防ぐ対策手段が望まれていた。
【0008】
本発明は上記事情に鑑みてなされたもので、リアルタイムOSを搭載した機器組み込みマイコンのソフトウェア開発において、動的に各タスクのスタック領域へのオーバライト発生の検知を可能にして、メモリ破壊を未然に防止し、システム暴走の発生を防ぐことができる動的スタックオーバライトモニタ方法を提供することを目的とする。
【0009】
【課題を解決するための手段】
請求項1に係る発明は、リアルタイムOSを搭載した機器組み込みマイコンのソフトウェア開発における動的スタックオーバライトモニタ方法であって、マイコンに内蔵されるタイマ機能による割り込みハンドラを用いて、各タスクのスタックポインタが自タスクのスタック領域を越えているか否かのオーバライトチェックを一定周期毎に行うものである。
【0010】
上記構成によれば、タイマ機能による割り込みハンドラを用いて一定周期毎にオーバライトチェックを行うことにより、各タスクのディスパッチとは非同期に、かつ動的に各タスクのスタックオーバライトを検出することができるため、メモリ破壊を未然に防止し、スタック領域へのオーバライトによるシステム暴走の発生を防ぐことができる。
【0011】
請求項2に係る発明は、請求項1記載の動的スタックオーバライトモニタ方法において、マイコンが組み込まれる機器のシステム構成および各タスクのCPU占有率に応じて前記オーバライトチェックを行う周期の変更が可能なものである。
【0012】
上記構成によれば、マイコンが組み込まれる機器のシステム構成および各タスクのCPU占有率に応じて前記オーバライトチェックを行う周期の変更が可能なことにより、システム構成が複雑になりタスク数が増加した状況ではオーバライトチェックをより頻繁に行う等、状況に応じた適切なチェック周期を設定することができる。
【0013】
請求項3に係る発明は、請求項1または2記載の動的スタックオーバライトモニタ方法において、マイコンが組み込まれる機器のソフトウェアの開発時は前記オーバライトチェックを有効化し、マイコンが組み込まれる機器のソフトウェア開発終了後は前記オーバライトチェックを無効化するものである。
【0014】
上記構成によれば、デバッグやシステム検証が必要なソフトウェアの開発時にはオーバライトチェックによりシステムの暴走を防ぎ、デバッグやシステム検証が完了した後のマイコン応用機器の量産時には不要となったオーバライトチェックを無効にすることにより、システム負荷を軽減することができる。
【0015】
【発明の実施の形態】
以下、本発明の実施の形態について図面を参照しながら説明する。
図1はリアルタイムOSを搭載した機器組み込みマイコンのソフトウェア開発における、各タスクのスタック領域の構成を示す図である。また、図2は本発明の一実施の形態に係る動的スタックオーバライトモニタ方法を示すフローチャートである。
【0016】
図1において、101はOSのシステムスタック、102、103、104はそれぞれタスクA、タスクB、タスクCのスタックポインタ、105、106、107はそれぞれタスクA、タスクB、タスクCのスタック領域の開始位置である。
【0017】
OSのシステムスタック101のサイズはシステムで使用するタスク数およびシステムコールにより変動する。ここでは、タスク数は便宜的にタスクA、タスクB、タスクCの3タスクとしている。システム設計初期段階にて各タスクのスタック領域の開始位置105、106、107を設定する。各タスクのスタックポインタ102、103、104は、タスクが実行状態になったときにそれぞれ各スタック領域における現在位置を指している。
【0018】
本発明では、各タスクのスタックポインタが自タスクのスタック領域を越えているか否かのオーバライトチェックを一定周期毎に行う。通常、各タスクのスタック領域は図1に示すように連続して設定されるため、このオーバライトチェックは、各タスクのスタックポインタが前段のスタック領域の開始位置を越えているか否かのモニタを行うことにより実施される。
【0019】
次に図2を参照して動的スタックオーバライトモニタ方法について説明する。タスク数分だけスタックポインタが存在するため、ループ回数のチェックを行い(S201)、ループ回数がタスク数を超えていたらモニタ処理を終了する(S205)。
【0020】
選択されたタスクのスタックポインタの現在位置と前段に配置されたタスクのスタック領域の開始位置とを比較し(S202)、その比較結果を判定する(S203)。スタックポインタの現在位置が前段に配置されたタスクのスタック領域の開始位置を越えていた場合は、スタックのオーバライトと判定し、ここでは、暴走対策としてプログラムカウンタを停止している(S204)。また、オーバライトしていない場合は先頭に戻り、モニタ処理を繰り返す。
【0021】
図3にはスタックオーバライトモニタ関数のサンプルプログラムを具体的に示す。ここでは便宜的に、301のTaskNum=タスク数、302のTaskSp=タスクのスタックポインタの現在位置、303のTaskSpInit=タスクのスタック領域の開始位置としているが、システム変数の名称はシステムで実際に使用するリアルタイムOSに応じて変更されるものとする。
【0022】
次に、スタックオーバライトのモニタタイミングについて説明する。マイコン内蔵のタイマ機能による割り込みハンドラを用いて、所定周期毎に前記スタックオーバライトモニタ関数を呼び出す。
【0023】
割り込みハンドラの割り込みレベルが多重割り込み有りの場合、前記モニタ関数の優先順位が高いと一定周期でモニタが可能であるが、他の割り込み処理が中断されるか、または遅延されることがある。前記モニタ関数の優先順位が低いと不定周期でモニタすることとなるが、他の割り込み処理のタイミングは前記モニタ関数を組み込む前と同じとなる。そして、多重割り込み無しの場合、前記モニタ関数および他の割り込み処理がお互いに割り込み終了するまで待たされることになる。
【0024】
また、モニタ周期を100m秒毎にした場合、例えば、終日(24時間)動作させた場合、モニタ回数は10×60×60×24=864,000回となる。これらのタイマ機能による割り込みハンドラの割り込みタイミングおよび所定周期はマイコン応用機器のシステム構成に依存するものであり、最終的にはシステム構成に応じてチューニングが必要となる。
【0025】
そのために、マイコンが組み込まれる機器のシステム構成および各タスクのCPU占有率に応じてモニタ周期の変更を可能にする方法が有益である。これは、システム構成および各タスクのCPU占有率に応じてタイマ割り込み間隔の設定変更を行う関数を用意することで実現できる。これにより、システム構成が複雑になりタスク数が増加した状況ではオーバライトチェックをより頻繁に行う等、状況に応じた適切なチェック周期を設定することができる。
【0026】
次に、本モニタ関数の有効化と無効化について説明する。具体的には、マイコン内蔵のタイマ機能による割り込みハンドラを制御する内部レジスタに割り込み許可および不許可を設定して本モニタ関数の有効化と無効化をコントロールする。
【0027】
これにより、デバッグや検証が必要なソフトウェアの開発時には本モニタ関数の実行を有効とし、マイコン応用機器の量産時には無効とすることができる。さらに量産時には、本モニタ関数の所定周期を決定するタイマ機能の動作も不要のため、タイマ機能を制御する内部レジスタの動作設定機能を停止し、マイコン応用機器のシステム動作に影響が及ぶ可能性をなくすことができる。
【0028】
このように、本実施の形態の動的スタックオーバライトモニタ方法によれば、マイコン内蔵のタイマ機能による割り込みハンドラを用いて、一定周期毎に各タスクのスタックポインタの現在位置が自タスク以外のタスクが使用するスタック領域をオーバライトしているか否かをモニタすることができるため、スタック領域へのオーバライトによるシステム暴走を未然に防止することができる。
【0029】
【発明の効果】
以上説明したように、本発明によれば、マイコン内蔵のタイマ機能による割り込みハンドラを用いて、各タスクのスタックポインタが自タスク以外のタスクが使用するスタック領域を指しているか否かを一定周期毎にモニタすることにより、スタック領域へのオーバライトによるシステム暴走といった不具合を未然に防止することができる。
【図面の簡単な説明】
【図1】リアルタイムOSを搭載した機器組み込みマイコンのソフトウェア開発における、各タスクのスタック領域の構成例を示す図。
【図2】本発明の一実施の形態に係る動的スタックオーバライトモニタ方法を示すフローチャート。
【図3】スタックオーバライトモニタ関数のサンプルプログラム。
【符号の説明】
101 OSのシステムスタック
102、103、104 スタックポインタ
105、106、107 スタック領域の開始位置
301 タスク数
302 スタックポインタの現在位置
303 スタック領域の開始位置

Claims (3)

  1. リアルタイムOSを搭載した機器組み込みマイクロコンピュータのソフトウェア開発における動的スタックオーバライトモニタ方法であって、前記マイクロコンピュータに内蔵されるタイマ機能による割り込みハンドラを用いて、各タスクのスタックポインタが自タスクのスタック領域を越えているか否かのオーバライトチェックを一定周期毎に行うことを特徴とする動的スタックオーバライトモニタ方法。
  2. 前記マイクロコンピュータが組み込まれる機器のシステム構成および各タスクのCPU占有率に応じて前記オーバライトチェックを行う周期の変更が可能なことを特徴とする請求項1記載の動的スタックオーバライトモニタ方法。
  3. 前記マイクロコンピュータが組み込まれる機器のソフトウェアの開発時は前記オーバライトチェックを有効化し、前記マイクロコンピュータが組み込まれる機器のソフトウェア開発終了後は前記オーバライトチェックを無効化することを特徴とする請求項1または2記載の動的スタックオーバライトモニタ方法。
JP2002321334A 2002-11-05 2002-11-05 動的スタックオーバライトモニタ方法 Pending JP2004157662A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2002321334A JP2004157662A (ja) 2002-11-05 2002-11-05 動的スタックオーバライトモニタ方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2002321334A JP2004157662A (ja) 2002-11-05 2002-11-05 動的スタックオーバライトモニタ方法

Publications (1)

Publication Number Publication Date
JP2004157662A true JP2004157662A (ja) 2004-06-03

Family

ID=32801923

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002321334A Pending JP2004157662A (ja) 2002-11-05 2002-11-05 動的スタックオーバライトモニタ方法

Country Status (1)

Country Link
JP (1) JP2004157662A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009301259A (ja) * 2008-06-12 2009-12-24 Fujitsu Microelectronics Ltd 情報処理システム、スタックオーバーフローの発生検出方法及びプログラム
JP2017016410A (ja) * 2015-07-01 2017-01-19 日立オートモティブシステムズ株式会社 電子制御装置及びスタック領域の使用監視方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009301259A (ja) * 2008-06-12 2009-12-24 Fujitsu Microelectronics Ltd 情報処理システム、スタックオーバーフローの発生検出方法及びプログラム
JP2017016410A (ja) * 2015-07-01 2017-01-19 日立オートモティブシステムズ株式会社 電子制御装置及びスタック領域の使用監視方法

Similar Documents

Publication Publication Date Title
US8060730B2 (en) Selective MISR data accumulation during exception processing
US7752427B2 (en) Stack underflow debug with sticky base
US20110185153A1 (en) Simultaneous execution resumption of multiple processor cores after core state information dump to facilitate debugging via multi-core processor simulator using the state information
US20100293314A1 (en) Computer system and method of controlling computer system
EP1967950A2 (en) Multiprocessor system for continuing program execution upon detection of abnormality
US8601488B2 (en) Controlling the task switch timing of a multitask system
KR100521110B1 (ko) 이벤트 처리 방법 및 장치
KR101838474B1 (ko) 다중프로세서 시스템에서의 예외 제어
JP2004157662A (ja) 動的スタックオーバライトモニタ方法
US8209565B2 (en) Data processing device and bus access control method therein
US20080059666A1 (en) Microcontroller and debugging method
CN108090001B (zh) 一种内核dma稳态调度方法及装置
JP2007047426A (ja) 映像表示装置及び表示用制御回路
JPS6118045A (ja) プログラムの暴走検出方式
JP2004171040A (ja) タイマ回路
JP3729250B2 (ja) 情報処理装置及び電子機器
JP2840539B2 (ja) デバック装置
CN115794693A (zh) 一种gpio接口控制方法、系统、存储介质以及设备
US20080052572A1 (en) Pipelined data processor with deterministic signature generation
CN118227278A (zh) 重复线程的调度
JPH0683652A (ja) マイクロコンピュ−タシステム
JP3001526B1 (ja) 割り込み処理回路及び割り込みデバッグ方法
JP2002251299A (ja) プログラムトレース装置
JPS62113238A (ja) 電子計算機システムにおけるプログラム修正装置
JP2004118412A (ja) 割込み管理装置、割込み管理方法、プログラム開発支援装置及びプログラム開発支援方法