(57)【要約】【課題】  複数のスタック領域が設定されても、スタックアクセス異常を検知できるインサーキットエミュレータ装置を提供する。【解決手段】  インサーキットエミュレータ装置１の制御用ＭＣＵ３は、エミュレーションメモリ４上に設定されたスタック領域へのアクセス位置を示すスタックポインタ値を評価用ＭＣＵ２から取得し、スタックマップ記憶部５に記憶されたスタックマップデータに記された複数のスタックのアドレス範囲のいずれかの範囲内にあるかどうかを判定し、いずれの範囲内にもない場合はスタックアクセス異常とのステータス情報を出力する。【選択図】  図１
2005327175.tif 000002
【特許請求の範囲】
【請求項１】
デバッグ対象のプログラムを実行し、前記プログラムが使用するスタックへのアクセスを評価する評価用ＭＣＵと、
前記評価用ＭＣＵの動作を制御する制御用ＭＣＵと、
前記プログラムが使用する複数のスタック領域が設定されるエミュレーションメモリと、
前記複数のスタック領域のそれぞれのアドレス範囲を記載したスタックマップデータを記憶するスタックマップ記憶手段と
を具備し、
デバッグ実行途中でプログラムが停止したときに、前記制御用ＭＣＵが、前記評価ＭＣＵから読み取ったスタックポインタ値と、前記スタックマップ記憶手段から読み出した前記スタックマップデータとを比較し、前記スタックポインタ値が前記スタックマップ記憶手段に記憶されている前記複数のスタック領域のアドレス範囲のいずれかに含まれているときはスタックアクセス正常と判定し、前記スタックポインタ値が前記スタックマップ記憶手段に記憶されている前記複数のスタック領域のアドレス範囲のいずれにも含まれていないときはスタックアクセス異常と判定して前記判定の結果をステータス情報として出力することを特徴とするインサーキットエミュレータ装置。
【請求項２】
前記スタックマップが、ユーザの入力データに基づいて前記スタックマップ記憶手段に書き込まれることを特徴とする請求項１に記載のインサーキットエミュレータ装置。
【請求項３】
デバッグ対象のプログラムが使用するスタックへのアクセスを評価する評価用ＭＣＵからスタックポインタ値を取得するステップと、
前記プログラムが使用する複数のスタック領域のそれぞれのアドレス範囲を記載したスタックマップデータを記憶したスタックマップ記憶手段から前記スタックマップデータを取得するステップと、
前記スタックポインタ値と前記スタックマップデータとを比較するステップと、
前記比較結果に基づき、前記スタックポインタ値が前記スタックマップ記憶手段に記憶されている前記複数のスタック領域のアドレス範囲のいずれにも含まれていないときはスタックアクセス異常と判定するステップと
を具備し、
プログラムのデバッグ時にスタックへのアクセスの異常を検知することを特徴とするスタックアクセス異常検知方法。
【請求項４】
前記スタックマップが、ユーザの入力データに基づいて前記スタックマップ記憶手段に書き込まれることを特徴とする請求項３に記載のスタックアクセス異常検知方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロコンピュータシステムの開発におけるデバッグに使用されるインサーキットエミュレータ装置およびスタックアクセス異常検知方法に関する。
【背景技術】
【０００２】
マイクロコンピュータシステムの開発に際しては、ハードウェアあるいはソフトウェアのデバッグのためにインサーキットエミュレータ装置が使用される。
【０００３】
インサーキットエミュレータ装置にはエミュレーションメモリが搭載されており、開発対象のシステムを動かすためのプログラムの保存、プログラムの処理に必要な固定的データの保存、プログラム実行途中の処理結果の一時的保存などに用いられる。また、エミュレーションメモリの領域の一部が、プログラムの実行中に使用されるスタックとして用いられる。
【０００４】
このようなインサーキットエミュレータ装置を使用したデバッグの項目の一つに、上述のスタックに対する不正なアクセスの検出がある。これは、予め設定された領域以外にスタックアクセスが発生しないかどうかを検証するものである。
【０００５】
従来、このような不正なスタックアクセスを検出する方法として、スタックの上限アドレスと下限アドレスをそれぞれレジスタに設定しておき、これらのレジスタの値とアドレスバスのアドレス値を比較し、レジスタに設定された範囲外へのアクセスがあった場合には不正アクセスと判定する方法が提案されていた（例えば、特許文献１参照。）。
【０００６】
しかし、この従来の方法では検証可能なアドレス範囲が一つしか設定できない。したがって、リアルタイムＯＳなど複数のタスクを処理するＯＳでＭＣＵを制御する場合、それぞれのタスクがそれぞれスタックを有するため、すなわち複数のスタック領域がエミュレーションメモリ上に設定されるため、スタック領域以外へのスタックアクセスを検知するためのレジスタの設定ができないという問題があった。
【特許文献１】特開２００２−２６８９１６号公報  （第５ページ、図１）
【発明の開示】
【発明が解決しようとする課題】
【０００７】
そこで、本発明の目的は、エミュレーションメモリ上に複数のスタック領域が設定されても、スタック領域以外へスタックアクセスを行ったことを検知できるインサーキットエミュレータ装置およびスタックアクセス異常検知方法を提供することにある。
【課題を解決するための手段】
【０００８】
本発明の一態様によれば、デバッグ対象のプログラムを実行し、前記プログラムが使用するスタックへのアクセスを評価する評価用ＭＣＵと、前記評価用ＭＣＵの動作を制御する制御用ＭＣＵと、前記プログラムが使用する複数のスタック領域が設定されるエミュレーションメモリと、前記複数のスタック領域のそれぞれのアドレス範囲を記載したスタックマップデータを記憶するスタックマップ記憶手段とを具備し、デバッグ実行途中でプログラムが停止したときに、前記制御用ＭＣＵが、前記評価ＭＣＵから読み取ったスタックポインタ値と、前記スタックマップ記憶手段から読み出した前記スタックマップデータとを比較し、前記スタックポインタ値が前記スタックマップ記憶手段に記憶されている前記複数のスタック領域のアドレス範囲のいずれかに含まれているときはスタックアクセス正常と判定し、前記スタックポインタ値が前記スタックマップ記憶手段に記憶されている前記複数のスタック領域のアドレス範囲のいずれにも含まれていないときはスタックアクセス異常と判定して前記判定の結果をステータス情報として出力することを特徴とするインサーキットエミュレータ装置が提供される。
【０００９】
また、本発明の一態様によれば、デバッグ対象のプログラムが使用するスタックへのアクセスを評価する評価用ＭＣＵからスタックポインタ値を取得するステップと、前記プログラムが使用する複数のスタック領域のそれぞれのアドレス範囲を記載したスタックマップデータを記憶したスタックマップ記憶手段から前記スタックマップデータを取得するステップと、前記スタックポインタ値と前記スタックマップデータとを比較するステップと、前記比較結果に基づき、前記スタックポインタ値が前記スタックマップ記憶手段に記憶されている前記複数のスタック領域のアドレス範囲のいずれにも含まれていないときはスタックアクセス異常と判定するステップとを具備し、プログラムのデバッグ時にスタックへのアクセスの異常を検知することを特徴とするスタックアクセス異常検知方法が提供される。
【発明の効果】
【００１０】
本発明によれば、エミュレーションメモリ上に複数のスタック領域が分散して存在していても、スタック領域以外へのスタックアクセスを検知できるので、ユーザはスタックへのアクセスが異常であることをデバッグ中に知ることができる。
【発明を実施するための最良の形態】
【００１１】
以下、本発明の実施例を図面を参照して説明する。
【実施例】
【００１２】
図１は、本発明の実施例に係るインサーキットエミュレータ装置の基本構成を示すブロック図である。
【００１３】
インサーキットエミュレータ装置１は、システムの開発対象のマイクロコンピュータ同一の機能を有してデバッグ対象のプログラムを実行する評価用ＭＣＵ２と、この評価用ＭＣＵ２の動作を制御する制御用ＭＣＵ３と、デバッグ対象のプログラムが使用する複数のスタック領域が設定されるエミュレーションメモリ４と、上述の複数のスタック領域のそれぞれのアドレス範囲を記載したスタックマップデータを記憶するスタックマップ記憶部５とを有する。
【００１４】
このインサーキットエミュレータ装置１は、外部のホストコンピュータ１０からのデバッグ用コマンドの入力を受けてデバッグを実行し、デバッグの状況をステータス情報としてホストコンピュータ１０へ出力する。
【００１５】
次に、このインサーキットエミュレータ装置１に含まれるブロックの機能について説明する。
【００１６】
評価用ＭＣＵ２は、エミュレーションメモリ４へメモリのリード・ライトを制御するコントロール信号とアドレス信号を送ってデバッグ対象のプログラムが使用するスタックへのアクセスを管理し、エミュレーションメモリ４との間でデータ信号の送受を行う。また、評価用ＭＣＵ２は、スタックの最上段のアドレスを保持するスタックポインタレジスタを有し、スタック位置を管理する。
【００１７】
制御用ＭＣＵ３は、評価用ＭＣＵ２への制御データの入出力を制御するとともに、スタックマップ記憶部５へのスタックマップデータの書き込み、およびスタックマップ記憶部５からのスタックマップデータの読み出しを制御する。
【００１８】
なお、制御用ＭＣＵ３がスタックマップ記憶部５へ書き込むスタックマップデータは、ユーザがホストコンピュータ１０へ入力し、ホストコンピュータ１０から制御用ＭＣＵ３へ送出されたものである。
【００１９】
また、制御用ＭＣＵ３は、評価用ＭＣＵ２のスタックポインタレジスタを呼び出して、その時点のスタックポインタ値を取得する。
【００２０】
さらに、制御用ＭＣＵ３は、評価用ＭＣＵ２から取得したスタックポインタ値とスタックマップ記憶部５から読み出したスタックマップデータの値を比較して、スタックポインタ値がスタックマップデータに記載されたスタック領域内に含まれるかどうかの判定を行う。そして、この判定結果をステータス情報としてホストコンピュータ１０へ出力する。
【００２１】
図２は、本実施例で用いるスタックマップのデータ構成の例を示す図である。
【００２２】
図２（ａ）は、スタックマップのフォーマットの例を示す図である。図２（ａ）において、マップ番号は、それぞれのタスクが動作するときに使用するスタック領域に１つずつ付けた番号であり、このマップ番号により使用するスタック領域が区分される。
【００２３】
このマップ番号ごとにスタックの先頭アドレスのアドレス値とスタックサイズの大きさのデータが記載され、これにより、エミュレーションメモリ４上に設定されたそれぞれのスタックの領域を知ることができるようになっている。
【００２４】
図２（ｂ）は、このフォーマットによるスタックマップの記述例である。この例は、３つのタスクを持つプログラムが使用するスタック領域を示したものであり、マップ番号１〜３の３つのスタック領域が用いられる例である。
【００２５】
これより、マップ番号１のスタックの領域は、アドレス０ｘ０１００〜０ｘ０１３ｆの範囲であり、マップ番号２のスタックの領域は、アドレス０ｘ０４００〜０ｘ０４３ｆの範囲であり、マップ番号３のスタックの領域は、アドレス０ｘ４１００〜０ｘ４１７ｆの範囲であることがわかる。
【００２６】
次に、本実施例のインサーキットエミュレータ装置１を用いて、スタックアクセスの異常を検知する方法を図３のフロー図を用いて説明する。
【００２７】
なお、ここでは、スタックマップ記憶部５へ、図２（ｂ）に示したスタックマップデータが予め書き込まれているものとして説明を行う。
【００２８】
まず、デバッグ途中でプログラムが停止状態にあるときに、制御用ＭＣＵ３は評価用ＭＣＵ２からスタックポインタ（ＳＰ）値を取得する（ステップＳ１）。
【００２９】
次いで、制御用ＭＣＵ３はスタックマップ記憶部５からスタックマップデータを取得する（ステップＳ２）。
【００３０】
次に、制御用ＭＣＵ３は、評価用ＭＣＵ２から取得したＳＰ値とスタックマップ記憶部５から取得したスタックマップデータとを比較し、上記ＳＰ値が図２（ｂ）に示した３つのマップ番号のアドレス範囲のいずれかの範囲内にあるかどうかを判定する（ステップＳ３）。
【００３１】
このとき、例えば、評価用ＭＣＵ２から取得したＳＰ値が０ｘ０４１ｆであった場合、このＳＰ値はマップ番号２で指定されたアドレス範囲０ｘ０４００〜０ｘ０４３ｆの中にあると判定される（ＹＥＳ）。そこで、制御用ＭＣＵ３は、「スタックアクセス正常」とのステータス情報をホストコンピュータ１０へ出力する（ステップＳ４）。
【００３２】
一方、評価用ＭＣＵ２から取得したＳＰ値が０ｘ４０００であった場合、このＳＰ値はマップ番号１〜３で指定されたアドレス範囲のいずれの中にも存在しないと判定される（ＮＯ）。そこで、制御用ＭＣＵ３は、「スタックアクセス異常」とのステータス情報をホストコンピュータ１０へ出力し（ステップＳ５）、一連の動作を終了する。
【００３３】
このような本実施例のインサーキットエミュレータ装置によれば、スタックアクセスが正常か異常かを示すステータス情報がホストコンピュータに送出されるので、これを用いて、ホストコンピュータはスタックアクセスの異常を、例えばモニタ装置に表示することができる。これにより、ユーザは、デバッグ中にスタックアクセス異常が発生したことを知ることができる。
【図面の簡単な説明】
【００３４】
【図１】本発明の実施例に係るインサーキットエミュレータ装置の基本構成を示すブロック図。
【図２】本発明の実施例に係るインサーキットエミュレータ装置のスタックマップの例を示す図。
【図３】本発明の実施例に係るスタックアクセス異常検知方法の処理の流れを示すフロー図。
【符号の説明】
【００３５】
１  インサーキットエミュレータ装置
２  評価用ＭＰＵ
３  制御用ＭＰＵ
４  エミュレーションメモリ
５  スタックマップ記憶部
１０  ホストコンピュータ
【図１】
2005327175.tif 000003
【図２】
2005327175.tif 000004
【図３】
2005327175.tif 000005