(57)【要約】【課題】主たる処理の実行速度が低下しないようにして、スタック使用量を検出し、記録することが可能な技術を提供すること。【解決手段】本発明が適用された電子制御装置では、検査対象のスタック領域に蓄積されたデータの最大量を検出し、この検出量を、ピークテーブルに記録するスタック領域検査タスクを、アイドルタスクとして生成し、検査対象のスタック領域を使用する他のタスク（主タスク）が実行状態及び実行可能状態にない期間に実行する。また、このスタック領域検査タスクでは、スタック領域の上端から下端に向けて、ブロック単位で領域内部を参照し、参照ブロックがオールゼロのブロック（領域内のビットが全てリセット状態のブロック）であるか否かを検査する。そして、この検査結果に基づき、スタック領域の最大使用量を検出する。【選択図】図６
2008003915.tif 000002
【特許請求の範囲】
【請求項１】
マイクロプロセッサ及びランダムアクセスメモリを備え、複数のタスクを実行可能なマルチタスクＯＳに基いて、前記マイクロプロセッサが、タスクを実行し、必要に応じて、タスクのコンテキストデータを、前記ランダムアクセスメモリに設けられたスタック領域に退避させる電子機器であって、
検査対象の前記スタック領域に蓄積されたデータの最大量を検出する検出手段と、
前記検出手段により検出された前記最大量を記録する検出結果記録手段と、
前記検出手段を、前記検査対象のスタック領域を使用するタスクが実行状態及び実行可能状態にない期間に、作動させる作動制御手段と、
を備えることを特徴とする電子機器。
【請求項２】
マイクロプロセッサ及びランダムアクセスメモリを備え、各タスクに設定された優先度に応じてタスクに実行権を付与する構成のマルチタスクＯＳに基いて、前記マイクロプロセッサが、タスクを実行し、必要に応じて、タスクのコンテキストデータを、前記ランダムアクセスメモリに設けられたスタック領域に退避させる電子機器であって、
検査対象の前記スタック領域に蓄積されたデータの最大量を検出する検出手段と、
前記検出手段により検出された前記最大量を記録する検出結果記録手段と、
を備え、
前記検出手段及び検出結果記録手段としての機能は、前記検査対象のスタック領域を使用するタスクよりも低い優先度に設定されたタスクによって実現されることを特徴とする電子機器。
【請求項３】
前記検出手段は、前記スタック領域におけるデータ蓄積方向とは逆方向となる前記スタック領域の上端から下端に向けて順に、前記スタック領域内部を参照し、前記スタック領域に蓄積されたデータの最大量を検出する構成にされていることを特徴とする請求項１又は請求項２記載の電子機器。
【請求項４】
前記検出手段は、前記スタック領域の上端から、下端より上端側の規定点までの領域に限定して、前記上端から前記規定点に向けて順に、前記スタック領域内部を参照し、前記スタック領域に蓄積されたデータの最大量を検出する構成にされていることを特徴とする請求項３記載の電子機器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチタスクＯＳを備えた電子機器に関する。
【背景技術】
【０００２】
従来、車両に搭載される電子制御装置等の電子機器としては、組込みＯＳ（オペレーティングシステム）にてタスクを管理し、複数のタスクを並行に処理するものが知られている。また、組込みＯＳとしては、各タスクに設定された優先度に応じて、優先度の高いタスクが第一に実行されるように、タスク制御を行うリアルタイムＯＳが知られている。そして、車両制御に特化したリアルタイムＯＳとしては、ＯＳＥＫ／ＶＤＸ仕様のリアルタイムＯＳが知られている。
【０００３】
ところで、複数のタスクがマイクロプロセッサにて実行される場合には、割込みに伴うタスクの切替時に、マイクロプロセッサのレジスタ内容等を表すタスクのコンテキストデータが、ＲＡＭ（ランダムアクセスメモリ）に用意されたスタック領域に退避される。また、関数コールの際にも、レジスタ内容がコンテキストデータとして、ＲＡＭのスタック領域に退避される。
【０００４】
このようにスタック領域は、マイクロプロセッサによる処理の経過を記録するメモリ領域として重要な役割を果たし、スタック領域を必要量確保すること、及び、スタック領域においてオーバーフローが発生しないようにソフトウェア設計することは、システム開発に際して、特に重要である。
【０００５】
従って、従来のシステム開発では、ソフトウェアモジュール毎のスタック使用量を見積もり、結合した際のスタック使用量を机上計算することで、これらのソフトウェアモジュールに対応する処理をマイクロプロセッサに実行させた場合に必要とされるスタックサイズ（スタック領域の大きさ）を見積もっていた。
【０００６】
しかしながら、スタック使用量は、関数ネストの程度や各関数の引数によって動的に変化し、更には、割込みの発生具合によっても変化する。このため、マルチタスクＯＳを備えた電子機器においては、実際に必要とされるスタックサイズについて、机上計算により、これを正確に見積もることが難しいといった問題があった。
【０００７】
そして、上記理由から従来では、例えば、スタック使用量をタスクの切替が発生する度に計測し、スタック使用量の最大値を記録する機能を、電子機器に組み込み、ソフトウェアの不具合解消に役立てるようにしていた（例えば、特許文献１参照）。また、他の手法として、スタックポインタを監視し、この監視結果に基づいて、必要なスタックサイズを見積もり、見積もったスタックサイズに、スタック領域を設定する機能を、電子機器に組み込んで、スタック領域の不足が発生しないようにしていた（例えば、特許文献２参照）。
【特許文献１】特開平３−２７８１３５号公報
【特許文献２】特開２０００−１８７６０１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、従来装置では、タスク切替やロードモジュールの実行に伴って、スタックポインタが移動する度に、スタック使用量を導出するため、処理のオーバーヘッドが高く、本来必要とされている処理の実行速度が低下するといった問題があった。また、この問題に派生して、車両制御など、時間的な制約の厳しいリアルタイム制御を行う必要がある場合では、従来のようにタスクの切替毎にスタック使用量を導出し導出結果を記録することができないといった問題があった。
【０００９】
本発明は、こうした問題に鑑みなされたものであり、本来実行されるべき処理の実行速度が低下しないようにして、スタック使用量を検出し、記録することが可能な技術を提供することを目的とする。
【課題を解決するための手段】
【００１０】
かかる目的を達成するためになされた本発明（請求項１記載）の電子機器では、複数のタスクを実行可能なマルチタスクＯＳに基いて、マイクロプロセッサが、タスクを実行し、必要に応じて、タスクのコンテキストデータを、ランダムアクセスメモリに設けられたスタック領域に退避させる。
【００１１】
また、この電子機器においては、検出手段が、検査対象のスタック領域に蓄積されたデータの最大量を検出し、検出結果記録手段が、検出手段により検出された最大量を、ランダムアクセスメモリの所定領域等に記録する。その他、検査対象のスタック領域を使用するタスクが実行（Ｒｕｎ）状態及び実行可能（Ｒｅａｄｙ）状態にない期間に、作動制御手段が、上記検出手段を作動させる。
【００１２】
このように本発明の電子機器では、スタック領域に蓄積されたデータの最大量、即ち、スタック領域の最大使用量を、そのスタック領域にコンテキストデータが退避されるタスクの非実行時及び非実行可能時に導出することで、スタック領域を使用するタスクを優先的に実行し、スタック使用量の検出に係る従属的な処理を後回しにするようにした。従って、本発明によれば、タスク実行（切替）時に、スタック使用量を検出する従来装置よりも、本来のタスクの実行速度を高めることができ、本来実行されるべき処理（主たる処理）の実行速度が低下しないようにして、スタック使用量を検出し記録することができる。
【００１３】
尚、本発明の電子機器では、スタック領域にコンテキストデータが退避されるタスクの非実行時及び非実行可能時に、スタック使用量を導出することになるため、従来装置のようにスタックポインタを監視する手法では、スタック使用量の最大値を正確に導出することができない。しかしながら、退避データの復帰が行われても、そのデータの履歴がクリアされず、スタック領域に残る現象を利用すれば、上記期間においても、スタック使用量の最大値を正確に導出することができる。例えば、スタック領域における各ビットのセット／リセット状態を検査することにより、スタック使用量の最大値を正確に検出することができる。
【００１４】
また、各タスクに設定された優先度に応じてタスクに実行権を付与する構成のリアルタイムＯＳを備えた電子機器においては、上記検出手段及び検出結果記録手段としての機能を実現するタスクの優先度を低く設定しておくことで、ＯＳが内包するタスクスケジューラ（タスク管理手段）に、上記作動制御手段としての機能を実現させることができる。
【００１５】
即ち、上記リアルタイムＯＳを備えた電子機器においては、検出手段及び検出結果記録手段としての機能を実現するタスクを、上記検査対象のスタック領域を使用するタスクよりも低い優先度に設定することで、上述の発明と同様の作用・効果を得ることができる（請求項２）。
【００１６】
特に、検出手段及び検出結果記録手段としての機能を実現するタスクを、アイドルタスク、即ち、優先度が最低のタスクに設定しておけば、スタック使用量の導出により、他のタスクの実行が遅れることがなく、大変便利である。
【００１７】
また、上記電子機器において、検出手段は、データ蓄積方向とは逆方向となるスタック領域の上端から下端に向けて順に、スタック領域内部を参照し、スタック領域に蓄積されたデータの最大量を検出する構成にされると一層好ましい。
【００１８】
このように構成された電子機器（請求項３）においては、スタック領域の上端から下端に向けてスタック領域の内部状態（例えば、各ビットのセット／リセット状態）を検査するので、スタック使用量を迅速且つ正確に検出することができる。例えば、スタック領域の下端から上端に向けてスタック領域内部の状態を検査する場合には、途中で、ビットがリセットされた領域が連続する可能性もあるので、スタック領域の上端までスタック領域内部を検査しないと、正確にスタック使用量を検出することができないが、本発明のように、スタック領域の上端からスタック領域内部の状態を検査すれば、スタック領域の使用領域と未使用領域との境界が明確で、迅速且つ正確にスタック使用量を検出することができる。
【００１９】
また、ソフトウェアの不具合を分析可能とするために、スタック使用量の履歴を記録するのであれば、スタック領域に十分な空きがある状態で、スタック領域の最大使用量を正確に記録する必要はない。仮に記録しても、それらの情報は、ユーザにとって役に立たない可能性が高いからである。
【００２０】
従って、このような目的でスタック使用量の最大値を記録する場合には、検出手段を次のように構成するとよい。即ち、検出手段は、スタック領域の上端から、下端より上端側の規定点までの領域に限定して、上端から規定点に向けて順に、スタック領域内部を参照し、スタック領域に蓄積されたデータの最大量を検出する構成にされるとよい。
【００２１】
このように構成された電子機器（請求項４）によれば、スタック領域の全体を参照することなく、ソフトウェア不具合の分析に必要な情報を、効率的にメモリに記録することができる。
【発明を実施するための最良の形態】
【００２２】
以下、本発明の実施例について、図面と共に説明する。図１は、本発明が適用された電子制御装置１０の構成を表すブロック図である。また、図２は、電子制御装置１０におけるＣＰＵ１１の基本動作を示した説明図である。
【００２３】
本実施例の電子制御装置１０は、車両に搭載される車両制御用の電子制御装置であり、マイクロプロセッサとしてのＣＰＵ１１と、ＣＰＵ１１による処理実行時に作業領域として使用されるＲＡＭ１３と、各種プログラムを記憶するＲＯＭ１５と、車内ＬＡＮに接続された他の車載装置と通信するための通信部１７と、制御対象や各種センサに接続され、センサからの入力信号を受け付けると共にＣＰＵ１１からの指令に従って制御信号を制御対象に出力する入出力装置（Ｉ／Ｏ）１９と、を備える。この電子制御装置１０としては、例えば、エンジン制御用の電子制御装置を挙げることができ、制御対象としては、インジェクタやイグナイタ等を挙げることができる。
【００２４】
また、この電子制御装置１０におけるＲＯＭ１５には、オペレーティングシステム（ＯＳ）として、複数のタスクを時分割で並列処理可能なマルチタスク機能を有するリアルタイムＯＳが組み込まれている。即ち、電子制御装置１０は、ＲＯＭ１５に記憶されたリアルタイムＯＳに基いて、タスク管理やスタックメモリ領域の管理を行う。尚、上記のリアルタイムＯＳとしては、ＯＳＥＫ／ＶＤＸ仕様のリアルタイムＯＳを挙げることができる。
【００２５】
具体的に、電子制御装置１０では、ＣＰＵ１１がリアルタイムＯＳに基いて、タスク管理手段として機能し、実行可能状態にあるタスクに対して、優先度の高い順に実行権を付与する。即ち、タスク管理手段は、実行可能状態にあるタスクの内、最も優先度の高いタスクを実行状態に遷移させ、このタスクをＣＰＵ１１に実行させる。尚、本実施例では、ＯＳの仕様により、例外なく、優先度の高いタスクが優先度の低いタスクに優先されて実行される。
【００２６】
また、本実施例の電子制御装置１０では、ＯＳの仕様により、基本タスク及び拡張タスクのいずれかに分類されるタスクが生成される。具体的に、基本タスクは、実行状態、実行可能状態、休止状態の三状態を採り、イベント待ち等で自ら待ち状態に遷移することのできないタスクとして構成される。一方、拡張タスクは、実行状態、実行可能状態、待ち状態、休止状態の四状態を採り、イベント待ち等で自ら待ち状態に遷移することのできるタスクとして構成される。
【００２７】
この電子制御装置１０では、ＯＳの仕様により、優先度が同一の基本タスクに対して共通するスタック領域が割り当てられ、拡張タスクに対して、タスク毎に専用のスタック領域が割り当てられる。尚、基本タスクに対しては、共通するスタック領域として、４ＫＢのスタック領域が割り当てられ、拡張タスクに対しては、タスク毎に、専用のスタック領域として、１ＫＢのスタック領域が割り当てられる。
【００２８】
また、スタック領域の管理は、上記リアルタイムＯＳが備えるスタックメモリ管理機能によって実現される。即ち、本実施例では、ＣＰＵ１１が、リアルタイムＯＳが有するスタック管理手段によって、処理の切替が必要となったときに、ＣＰＵ１１のレジスタ内容を表すタスクのコンテキストデータを、ＲＡＭ１３の対応するスタック領域に退避させる。
【００２９】
尚、ＲＡＭ１３における各スタック領域の割当情報は、ＲＡＭ１３のスタックテーブルにより記憶保持されている。スタックテーブルは、ＲＡＭ１３のスタックメモリ領域を構成する各スタック領域について、スタックメモリ領域におけるスタック領域の配列順に、スタック領域の上端メモリアドレスを表すものであり、スタックテーブルの末端には、スタックメモリ領域の終端メモリアドレスが記述されてなる。
【００３０】
例えば、図３（ａ）に示すように、スタックメモリ領域において、メモリアドレス０ｘ００００から順に、基本タスク用スタック領域Ｒ０、第一の拡張タスク用スタック領域Ｒ１、第二の拡張タスク用スタック領域Ｒ２が割り当てられている場合、スタックテーブルには、図３（ｂ）に示すように、領域Ｒ０の上端メモリアドレスである０ｘ００００、領域Ｒ１の上端メモリアドレスである０ｘ１０００、領域Ｒ２の上端メモリアドレスである０ｘ１４００、が順に記述される。
【００３１】
その他、本実施例の電子制御装置１０は、スタックメモリ領域を構成する各スタック領域の最大使用量、即ち、各スタック領域に蓄積されたデータの最大量を検出して記録する機能を有する。この機能は、ＲＯＭ１５に記憶されたスタック領域検査プログラムに従って、ＣＰＵ１１が実行するスタック領域検査タスクにより実現される。
【００３２】
このスタック領域検査タスクは、優先度が最低のアイドルタスクとして、電子制御装置１０の起動時に生成される。そして、スタック領域検査タスクでは、検査対象のスタック領域における各ビットの値を参照して、そのスタック領域に蓄積されたデータの最大量を検出し、これをＲＡＭ１３に設けられたピークテーブルに記録する。尚、本実施例では、アイドルタスクに対応するスタック領域以外の各スタック領域が検査対象に設定される。
【００３３】
図４は、ＲＡＭ１３に設けられたピークテーブルの構成を表す説明図である。ＲＡＭ１３が記憶するピークテーブルは、図４に示すように、スタック領域毎に、そのスタック領域において蓄積されたデータの最大量（スタック領域の最大使用量）を表す値Ｐが記述されてなる。このピークテーブルに記述される各スタック領域の最大使用量を表す値Ｐは、後述するブロックの単位で記述され、最大使用量が少ないほど大きい値を採る。このため、ピークテーブルには、初期値として、値Ｐが採りえる範囲の最大値が設定され、スタック領域検査タスクにより更新される。
【００３４】
ここで、スタック領域検査タスクによる各スタック領域の最大使用量の検出方法について簡単に説明する。本実施例の電子制御装置１０では、起動時に、スタックメモリ領域が、ゼロクリアされて初期化されるが、その後、スタックメモリ領域が初期化されることはない。このため、スタック領域においては、スタック領域に退避されたデータが、スタック領域から削除されても、その履歴が各ビットのセット（１）／リセット（０）状態として残留する。本実施例では、このスタック領域に残されたデータの書込履歴に基づいて、スタック領域に書き込まれたデータの最大量を検出する。
【００３５】
次には、スタック領域検査タスクが生成される手順及び当該タスクの内容について、図５〜図８を用いて詳細に説明する。
図５は、電子制御装置１０の起動時に、ＣＰＵ１１が実行する起動処理を表すフローチャートである。起動処理を開始すると、ＣＰＵ１１は、初期化処理を実行してＲＡＭ１３のメモリ領域（スタックメモリ領域を含む）を、ゼロクリアする（Ｓ１１０）。
【００３６】
また、ＲＯＭ１５に記憶されたスタック領域検査プログラムに対応するタスクとして、スタック領域検査タスクを、優先度（プライオリティ）を最低に設定して生成する。即ち、スタック領域検査タスクを、アイドルタスクとして生成する（Ｓ１２０）。また、起動処理においては、車両制御を実現するタスクの生成等、電子制御装置１０の起動に必要なその他の処理を実行する（Ｓ１３０）。尚、本実施例において、車両制御を実現するタスク等、スタック領域検査タスク以外のタスクは、アイドルタスクよりも高い優先度のタスクである通常タスクとして生成される。
【００３７】
このようにして、本実施例の電子制御装置１０では、スタック領域検査タスク以外の各タスクが、スタック領域検査タスクに優先して実行されるようにし、スタック領域検査タスク以外のタスクが実行状態及び実行可能状態にない期間に、スタック領域検査タスクが実行されるようにする。尚、図６は、アイドルタスクとしてのスタック領域検査タスクの実行期間を表すタイムチャートである。
【００３８】
また、図７は、ＣＰＵ１１が実行するスタック領域検査タスクの内容を表すフローチャートである。ＣＰＵ１１は、スタック領域検査タスクを開始すると、ＲＡＭ１３に記憶されたスタックテーブルに基づき、スタックメモリ領域を構成するスタック領域（但し、アイドルタスクに対応するスタック領域を除く）の一つを、検査対象に設定する（Ｓ２１０）。
【００３９】
次に、ＣＰＵ１１は、カウンタ値をゼロに初期化し（Ｃｏｕｎｔ＝０：Ｓ２２０）、ＲＡＭ１３に記憶されたスタックテーブルに基づいて、検査アドレスＡｄｒを、検査対象のスタック領域の上端メモリアドレスに設定する（Ｓ２３０）。
【００４０】
また、この処理を終えると、ＣＰＵ１１は、スタック領域の上記検査アドレスに対応する位置から、１ブロック分の領域を参照し（Ｓ２４０）、このブロックにおける各ビットの値が全てゼロであるか否かを判断する（Ｓ２５０）。この動作により、ＣＰＵ１１は、このブロックにデータが書き込まれていないかどうかを判断する。尚、本実施例では、予め定められたＭバイト（例えば、４バイト）の領域を、１ブロックとして、参照ブロックがオールゼロのブロック（各ビットの値が全てゼロのブロック）であるか否かを判断する。
【００４１】
そして、参照ブロックがオールゼロのブロックであると判断すると（Ｓ２５０でＹｅｓ）、検査アドレスＡｄｒを次ブロックのアドレスに更新する。即ち、これまでの検査アドレスＡｄｒに、ブロック長に対応する値Ｂｌｋを加算して、検査アドレスＡｄｒを、これまでの参照ブロックより一段下のブロックの上端メモリアドレスに更新する（Ｓ２６０）。
【００４２】
また、この処理を終えると、ＣＰＵ１１は、Ｓ２７０に移行し、カウンタ値Ｃｏｕｎｔを１増加させる（Ｃｏｕｎｔ←Ｃｏｕｎｔ＋１）。この動作により、カウンタ値Ｃｏｕｎｔは、データの書込みがなされていない空きブロックの数を表すものとなる。
【００４３】
その他、Ｓ２７０での処理を終えると、ＣＰＵ１１は、カウンタ値Ｃｏｕｎｔが、予め定められた上限値より大きいか否かを判断し（Ｓ２８０）、カウンタ値Ｃｏｕｎｔが上限値より大きいと判断した場合には（Ｓ２８０でＹｅｓ）、Ｓ３２０に移行する。一方、カウンタ値が上限値以下であると判断した場合には（Ｓ２８０でＮｏ）、Ｓ２４０に移行し、更新された検査アドレスＡｄｒに対応する位置から、一ブロック分の領域を参照して、参照ブロックがオールゼロのブロックであるか否かを判断する（Ｓ２５０）。
【００４４】
このようにして、ＣＰＵ１１は、カウンタ値が上限値を超えるまで、スタック領域の上端から、ブロック単位で、参照ブロックがオールゼロのブロックであるか否かを検査する（図８参照）。尚、上限値は、スタック領域の大きさに合わせて、設定されてもよいし、スタック領域の大きさに拘わらず、一律に設定されてもよい。また、上限値は、スタック領域検査プログラムの作成段階で、ソフトウェア開発者により定めることができる。
【００４５】
但し、上限値は、検査対象のスタック領域のブロック数から１引いた値以下に、定められるものとする。理由として、上限値を、スタック領域のブロック数から１引いた値に設定すると、スタック領域の全ブロックを検査することになるが、これより大きい値を上限値に設定すると、検査対象のスタック領域を超えて、ブロックの検査が行われ、不都合が発生するためである。
【００４６】
また、上限値は、検査対象のスタック領域のブロック数から１引いた値未満に、定められると一層好ましい。スタック領域の下層部は、正常時においても当然のことながらデータが書き込まれる領域であり、この下層部に対応するカウンタ値Ｃｏｕｎｔを、ピークテーブルに記録しても、その情報が、ソフトウェアの不具合解消に役立たず、又、全ブロックを検査すると、各スタック領域の検査に時間を要するためである。
【００４７】
その他、Ｓ２５０において、参照ブロックがオールゼロのブロックではないと判断すると（Ｓ２５０でＮｏ）、ＣＰＵ１１は、Ｓ２９０に移行して、ピークテーブルから、検査対象のスタック領域に対応する最大使用量を表す値Ｐを読み出し、現在のカウンタ値Ｃｏｕｎｔが、値Ｐ未満であるか否かを判断する（Ｓ３００）。
【００４８】
そして、カウンタ値Ｃｏｕｎｔが値Ｐ未満であると判断すると（Ｓ３００でＹｅｓ）、ＣＰＵ１１は、Ｓ３１０に移行し、ピークテーブルにおける検査対象のスタック領域に対応する最大使用量を表す値Ｐを、現在のカウンタ値Ｃｏｕｎｔに更新する（Ｐ←Ｃｏｕｎｔ）。その後、Ｓ３２０に移行する。一方、カウンタ値Ｃｏｕｎｔが値Ｐ以上であると判断すると（Ｓ３００でＮｏ）、ＣＰＵ１１は、Ｓ３１０の処理を実行せずに、Ｓ３２０に移行する。
【００４９】
また、Ｓ３２０に移行すると、ＣＰＵ１１は、スタックメモリ領域を構成するスタック領域の内、検査対象に設定されるべきスタック領域の全てを、検査対象に設定して、Ｓ２２０からＳ３１０までの一連の処理を実行したか否かを判断し、スタック領域の全てを検査対象に設定していないと判断すると（Ｓ３２０でＮｏ）、Ｓ３３０に移行し、スタックメモリ領域を構成するスタック領域（アイドルタスクに対応するスタック領域を除く）の内、検査対象として未設定のスタック領域を一つ、検査対象に設定する。その後、Ｓ２２０に移行する。
【００５０】
一方、スタック領域の全てを検査対象に設定したと判断すると（Ｓ３２０でＹｅｓ）、ＣＰＵ１１は、検査対象の設定履歴をクリアして、再びＳ２１０に移行し、Ｓ２１０〜Ｓ３４０までの一連の処理を行う。このようにして、ＣＰＵ１１は、アイドル時（他のタスクが実行状態及び実行可能状態にないとき）、繰返し、スタック領域検査タスクを実行する。尚、このスタック領域検査タスクは、上述したようにアイドルタスクであるため、ＯＳにより制御されて、通常タスクが実行可能状態になった時点で中断され、通常タスクが優先的に処理される。
【００５１】
以上、本実施例の電子制御装置１０について説明したが、この電子制御装置１０によれば、検査対象のスタック領域に蓄積されたデータの最大量を検出し、この検出量を、ピークテーブルに記録するスタック領域検査タスクが、アイドルタスクとして生成され、検査対象のスタック領域を使用する他のタスクが実行状態及び実行可能状態にない期間に、上記タスク管理手段によって、起床される。
【００５２】
即ち、本実施例では、スタック領域検査タスクを付属的なタスクとして位置付け、車両制御に係るタスク等の主たるタスクを優先して実行するようにし、スタック領域検査タスクの実行を後回しにするようにした。従って、本実施例によれば、従来装置よりも、主タスクの実行速度を高めることができ、主タスクの処理速度が低下しないようにして、主タスクにて使用されるスタック領域のスタック使用量を検出し、これを記録することができる。
【００５３】
尚、従来装置では、スタックポインタに基づきスタック使用量を検出していたが、本実施例では、スタック領域に残留するデータの書込履歴に基づきスタック使用量を検出するので、検査対象のスタック領域を使用する他のタスクが実行状態及び実行可能状態にない期間においても、正確に、そのスタック領域の最大使用量を検出することができる。
【００５４】
また、本実施例では、データ蓄積方向とは逆方向となるスタック領域の上端から下端に向けて順に、スタック領域内部を、ブロック単位で参照し、参照ブロックがオールゼロのブロックであるか否かを検査するようにした。従って、本実施例によれば、スタック領域の下端から上端に向けて参照ブロックがオールゼロのブロックであるか否かを検査するよりも、高精度且つ迅速に、最大使用量を検出することができる。
【００５５】
例えば、スタック領域の下端から上端に向けて検査する場合には、リセット（０）状態のビットが連続するケースもあるので、参照ブロックがオールゼロになっても、その地点が、スタック領域の最大使用量に対応する地点とは限らず、その地点でブロックの検査を終了して、最大使用量を確定してしまうと、誤動作となる可能性がある。また、このような誤動作を回避するためには、全ブロックの検査や、ブロックサイズを十分に大きくする等の処置を採る必要がある。
【００５６】
これに対し、スタック領域の上端から下端に向けて検査し、参照ブロックがオールゼロではなくなった地点を検索する本実施例の手法によれば、上記のような誤動作を確実に回避することができ、正確且つ迅速に最大使用量を検出することができる。
【００５７】
その他、本実施例では、スタック領域の上端から、上限値に対応する規定点までの各ブロックを検査して、それ以上のブロックについては、検査しないようにした。従って、本実施例によれば、スタック領域の最大使用量として、ソフトウェア不具合の分析のために必要な情報を、効率的にピークテーブルに記録することができる。
【００５８】
尚、本発明の検出手段は、Ｓ２２０〜Ｓ２５０の処理により実現され、検出結果記録手段は、Ｓ２９０〜Ｓ３１０の処理により実現されている。また、作動制御手段は、タスク管理手段により実現されている。
【００５９】
また、本発明の電子機器は、上記実施例に限定されるものではなく、種々の態様を採ることができる。例えば、上記実施例では、本発明を、車両制御用の電子制御装置１０に適用した例を示したが、本発明は、その他の種類の電子機器にも適用することができる。
【図面の簡単な説明】
【００６０】
【図１】電子制御装置１０の構成を表すブロック図である。
【図２】電子制御装置１０におけるＣＰＵ１１の基本動作を示した説明図である。
【図３】スタックメモリ領域の構成（ａ）及びスタックテーブル（ｂ）の構成を表す説明図である。
【図４】ピークテーブルの構成を表す説明図である。
【図５】ＣＰＵ１１が実行する起動処理を表すフローチャートである。
【図６】スタック領域検査タスクの実行期間を表すタイムチャートである。
【図７】ＣＰＵ１１が行うスタック領域検査タスクを表すフローチャートである。
【図８】スタック使用量の検出方法に関する説明図である。
【符号の説明】
【００６１】
１０…電子制御装置、１１…ＣＰＵ、１３…ＲＡＭ、１５…ＲＯＭ、１７…通信部、１９…入出力装置
【図１】
2008003915.tif 000003
【図２】
2008003915.tif 000004
【図３】
2008003915.tif 000005
【図４】
2008003915.tif 000006
【図５】
2008003915.tif 000007
【図６】
2008003915.tif 000008
【図７】
2008003915.tif 000009
【図８】
2008003915.tif 000010