(57)【要約】      （修正有）【課題】動作クロックが高速であっても、リアルタイムトレースを行えるようにする。【解決手段】ターゲット３のＲＯＭ３３にＲＯＭモニタ（プログラム）３３１を格納する。ＲＯＭモニタ３３１はコマンド実行処理３３１１とデバッグ割り込みハンドラ処理３３１２を備える。ＲＯＭモニタ３３１は、トレース種別が命令実行タイプであった場合、トレース対象命令アドレスを命令比較レジスタ３１２に設定し、トレース対象プログラムの実行中に、その実行アドレスが命令比較レジスタ３１２内のアドレスと一致した場合に、割り込み処理を発生させる。トレース種別がデータアクセスタイプであった場合、トレース対象データアドレスをデータ比較レジスタ３１３に設定し、トレース対象アクセス属性をデータ属性設定レジスタ３１４に設定し、トレース対象プログラムの実行中に、一致した場合に、割り込み処理を発生させる。【選択図】  図２
2006323726.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
トレース種別およびトレース対象アドレスを少なくとも含むパラメータをトレース対象プログラムの実行中にトレースするデータの条件としてメモリに記憶させる処理と、
前記トレース対象プログラムの実行中、前記メモリに記憶されているパラメータに従って、割り込み処理によりトレースされたデータをリアルタイムトレースデータとして前記メモリに記憶させる処理と
を実現させるためのモニタプログラム。
【請求項２】
請求項１に記載されたモニタプログラムにおいて、
前記コンピュータに、
前記メモリに記憶されているパラメータに含まれるトレース種別をチェックさせ、そのトレース種別が命令実行タイプであった場合、そのパラメータに含まれるトレース対象命令アドレスを命令比較レジスタに設定させる処理と、
前記トレース対象プログラムの実行中に、その実行アドレスが前記命令比較レジスタに設定されているトレース対象命令アドレスと一致した場合、前記リアルタイムトレースデータを取得するための割り込み処理を発生させる処理と
を実現させるためのモニタプログラム。
【請求項３】
請求項１に記載されたモニタプログラムにおいて、
前記コンピュータに、
前記メモリに記憶されているパラメータに含まれるトレース種別をチェックさせ、そのトレース種別がデータアクセスタイプであった場合、そのパラメータに含まれるトレース対象データアドレスをデータ比較レジスタに設定させる処理と、
前記トレース対象プログラムの実行中に、そのアクセスアドレスが前記データ比較レジスタに設定されているトレース対象データアドレスと一致した場合、前記リアルタイムトレースデータを取得するための割り込み処理を発生させる処理と
を実現させるためのモニタプログラム。
【請求項４】
請求項１に記載されたモニタプログラムにおいて、
前記コンピュータに、
前記メモリに記憶されているパラメータに含まれるトレース種別をチェックさせ、そのトレース種別がデータアクセスタイプであった場合、そのパラメータに含まれるトレース対象データアドレスをデータ比較レジスタに設定させ、そのトレース対象データアドレスへのデータアクセスの属性をトレース対象アクセス属性としてデータ属性設定レジスタに設定させる処理と、
前記トレース対象プログラムの実行中に、そのアクセスアドレスが前記データ比較レジスタに設定されているトレース対象データアドレスと一致し、かつそのアクセスアドレスへのデータアクセスの属性が前記データ属性設定レジスタに設定されているトレース対象アクセス属性と一致した場合、前記リアルタイムトレースデータを取得するための割り込み処理を発生させる処理と
を実現させるためのモニタプログラム。
【請求項５】
請求項１〜４の何れか１項に記載されたモニタプログラムにおいて、
前記コンピュータに、
前記トレース対象プログラムの実行に先立ってタイマをスタートさせる処理と、
前記割り込み処理の発生時に前記リアルタイムトレースデータの１つとしてその時の前記タイマの値をタイムスタンプ値として取得させる処理と
を実現させるためのモニタプログラム。
【請求項６】
請求項５に記載されたモニタプログラムにおいて、
前記コンピュータに、
前記メモリに記憶されているリアルタイムトレースデータに含まれるタイムスタンプ値から割り込み処理間の実行時間を計算させる処理と、
前記割り込み処理間の実行時間の計算結果を表示するための文字列を送信させる処理と  を実現させるためのモニタプログラム。
【請求項７】
請求項５に記載されたモニタプログラムにおいて、
前記コンピュータに、
前記メモリに記憶されているリアルタイムトレースデータに含まれるトレース結果アドレスを表示するための文字列を送信させる処理
を実現させるためのモニタプログラム。
【請求項８】
請求項５に記載されたモニタプログラムにおいて、
前記コンピュータに、
前記メモリに記憶されているリアルタイムトレースデータに含まれるトレース結果データを表示するための文字列を送信させる処理
を実現させるためのモニタプログラム。
【請求項９】
請求項５に記載されたモニタプログラムにおいて、
前記コンピュータに、
前記メモリに記憶されているリアルタイムトレースデータに含まれるトレース結果属性を表示するための文字列を送信させる処理
を実現させるためのモニタプログラム。
【請求項１０】
請求項１〜９の何れか１項に記載されたモニタプログラムを搭載したターゲット装置と、
このターゲット装置にトレース種別およびトレース対象アドレスを少なくとも含むパラメータを送る手段を有するホスト装置と
を備えたことを特徴とするリアルタイムトレースシステム。
【請求項１１】
請求項１〜９の何れか１項に記載されたモニタプログラムを搭載したターゲット装置と、
このターゲット装置から送られてくるトレース結果を表示する手段を有するホスト装置と
を備えたことを特徴とするリアルタイムトレースシステム。
【請求項１２】
請求項１０又は１１に記載されたリアルタイムトレースシステムにおいて、
前記ホスト装置は、
前記ターゲット装置にトレース開始指示を与える手段
を有することを特徴とするリアルタイムトレースシステム。
【請求項１３】
請求項１０〜１２の何れか１項に記載されたリアルタイムトレースシステムにおいて、
前記ホスト装置は、
前記ターゲット装置にトレース停止指示を与える手段
を有することを特徴とするリアルタイムトレースシステム。
【請求項１４】
請求項１に記載されたモニタプログラムにおいて、
前記コンピュータに、
前記メモリに記憶されているパラメータに含まれるトレース種別をチェックさせ、そのトレース種別が命令実行タイプであった場合、そのパラメータに含まれる第１のトレース対象命令アドレスを命令比較レジスタに設定させる処理と、
前記トレース対象プログラムの実行中に、その実行アドレスが前記命令比較レジスタに設定されている第１のトレース対象命令アドレスと一致した場合、前記リアルタイムトレースデータを取得するための第１の割り込み処理を発生させる処理と、
前記第１の割り込み処理の実行後、前記パラメータに含まれる第２のトレース対象命令アドレスを前記命令比較レジスタに設定させる処理と、
前記トレース対象プログラムの実行中に、その実行アドレスが前記命令比較レジスタに設定されている第２のトレース対象命令アドレスと一致した場合、前記リアルタイムトレースデータを取得するための第２の割り込み処理を発生させる処理と、
前記トレース対象プログラムの実行に先立ってタイマをスタートさせる処理と、
前記第１の割り込み処理の発生時に前記リアルタイムトレースデータの１つとしてその時の前記タイマの値を第１のタイムスタンプ値として取得させる処理と、
前記第２の割り込み処理の発生時に前記リアルタイムトレースデータの１つとしてその時の前記タイマの値を第２のタイムスタンプ値として取得させる処理と、
前記第２のタイムスタンプ値から前記第１のタイムスタンプ値を差し引いて前記第１の割り込み処理と前記第２の割り込み処理との間の実行時間を計算させる処理と
を実現させるためのモニタプログラム。
【請求項１５】
請求項１に記載されたモニタプログラムにおいて、
前記コンピュータに、
前記メモリに記憶されているパラメータに含まれるトレース種別をチェックさせ、そのトレース種別が命令実行タイプであった場合、そのパラメータに含まれるトレース対象命令アドレスを命令比較レジスタに設定させる処理と、
前記トレース対象プログラムの実行中に、その実行アドレスが前記命令比較レジスタに設定されているトレース対象命令アドレスと一致する毎に、前記リアルタイムトレースデータを取得するための割り込み処理を発生させる処理と、
前記トレース対象プログラムの実行に先立ってタイマをスタートさせる処理と、
前記割り込み処理の発生毎に前記リアルタイムトレースデータの１つとしてその時の前記タイマの値をタイムスタンプ値として取得させる処理と、
連続して発生する前記割り込み処理の一方を第１の割り込み処理、他方を第２の割り込み処理とし、第２の割り込み処理の発生時に取得したタイムスタンプ値から前記第１の割り込み処理の発生時に取得したタイムスタンプ値を差し引いて、前記第１の割り込み処理と前記第２の割り込み処理との間の実行時間を計算させる処理と
を実現させるためのモニタプログラム。
【請求項１６】
請求項１に記載されたモニタプログラムにおいて、
前記コンピュータに、
前記メモリに記憶されているパラメータに含まれるトレース種別をチェックさせ、そのトレース種別がデータアクセスタイプであった場合、そのパラメータに含まれる第１のトレース対象データアドレスをデータ比較レジスタに設定させる処理と、
前記トレース対象プログラムの実行中に、そのアクセスアドレスが前記データ比較レジスタに設定されている第１のトレース対象データアドレスと一致した場合、前記リアルタイムトレースデータを取得するための第１の割り込み処理を発生させる処理と、
前記第１の割り込み処理の実行後、前記パラメータに含まれる第２のトレース対象データアドレスを前記データ比較レジスタに設定させる処理と、
前記トレース対象プログラムの実行中に、そのアクセスアドレスが前記データ比較レジスタに設定されている第２のトレース対象データアドレスと一致した場合、前記リアルタイムトレースデータを取得するための第２の割り込み処理を発生させる処理と、
前記トレース対象プログラムの実行に先立ってタイマをスタートさせる処理と、
前記第１の割り込み処理の発生時に前記リアルタイムトレースデータの１つとしてその時の前記タイマの値を第１のタイムスタンプ値として取得させる処理と、
前記第２の割り込み処理の発生時に前記リアルタイムトレースデータの１つとしてその時の前記タイマの値を第２のタイムスタンプ値として取得させる処理と、
前記第２のタイムスタンプ値から前記第１のタイムスタンプ値を差し引いて前記第１の割り込み処理と前記第２の割り込み処理との割り込み処理間の実行時間を計算させる処理と
を実現させるためのモニタプログラム。
【請求項１７】
請求項１に記載されたモニタプログラムにおいて、
前記コンピュータに、
前記メモリに記憶されているパラメータに含まれるトレース種別をチェックさせ、そのトレース種別がデータアクセスタイプであった場合、そのパラメータに含まれるトレース対象データアドレスをデータ比較レジスタに設定させる処理と、
前記トレース対象プログラムの実行中に、そのアクセスアドレスが前記データ比較レジスタに設定されているトレース対象データアドレスと一致する毎に、前記リアルタイムトレースデータを取得するための割り込み処理を発生させる処理と、
前記トレース対象プログラムの実行に先立ってタイマをスタートさせる処理と、
前記割り込み処理の発生毎に前記リアルタイムトレースデータの１つとしてその時の前記タイマの値をタイムスタンプ値として取得させる処理と、
連続して発生する前記割り込み処理の一方を第１の割り込み処理、他方を第２の割り込み処理とし、第２の割り込み処理の発生時に取得したタイムスタンプ値から前記第１の割り込み処理の発生時に取得したタイムスタンプ値を差し引いて、前記第１の割り込み処理と前記第２の割り込み処理との割り込み処理間の実行時間を計算させる処理と
を実現させるためのモニタプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ソフトウェアのデバッグ作業に使用されるモニタプログラムおよびリアルタイムトレースシステムに関するものである。
【背景技術】
【０００２】
従来より、ターゲットの装置に組み込まれたデバイスドライバなどのソフトウェア（ファームウェア）の障害解析や性能分析を行うために、インサーキットエミュレータが使用されている。
【０００３】
図２２にインサーキットエミュレータを用いた従来のデバッガシステム（リアルタイムトレースシステム）を示す。同図において、１はホスト装置（以下、単にホストと呼ぶ）、２はインサーキットエミュレータ、３はターゲット装置（以下、単にターゲットと呼ぶ）である。
【０００４】
ホスト１は、入力装置１１と、ホスト１上で動作するデバッガプログラム１２と、表示装置１３とを備えている。ホスト１とインサーキットエミュレータ２とはシリアル回線４で接続されている。インサーキットエミュレータ２は、ターゲット３のＣＰＵ３１のソケット部に装着したＣＰＵプローブ２１を介して、ターゲット３内のバス信号をモニタする。
【０００５】
このリアルタイムトレースシステムの動作を具体的に述べると、ホスト１のデバッガプログラム１２が、入力装置１１から入力されたリアルタイムトレース条件を、インサーキットエミュレータ２にシリアル回線４を使って送信する。インサーキットエミュレータ２は、送信されてきたリアルタイムトレース条件の元、ＣＰＵプローブ２１経由でターゲット２内のバス信号をモニタし、すなわちファームウェアの実行中に所要のデータをリアルタイムでトレースし、そのトレースした結果をデバッガプログラム１２に返信する。デバッガプログラム１２は送られてきたトレース結果を表示装置１３に表示する（特許文献１）。
【０００６】
【特許文献１】特開平０５−０７３３４８号公報
【特許文献２】特開２００３−０４４３１７号公報
【特許文献３】特開平０５−１８９２７７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、このリアルタイムトレースシステムでは、ターゲットのＣＰＵ動作クロックの高速化に伴い、インサーキットエミュレータがその機能を果たせなくなってきている。また、最近では、サードパーティも製造を中止するなど、インサーキットエミュレータそのものが製造されなくなっている。そのために、リアルタイムトレースが行えない、処理時間計測など処理性能測定が困難となるなどの問題が発生し、ファームウェアの障害解析／性能分析が困難な状況に陥っている。
【０００８】
ＣＰＵの動作クロックが高速化すればするほど、ファームウェアのリアルタイムトレースを行う手段がなくなる。このため、リアルタイム検証は、ハードウェア外部信号をプロービングして、ファームウェアそのものもハードウェア外部信号に信号を出力するようなプログラムの変更を施したものとし、ターゲットハードウェアを動作させ、オシロスコープ等の測定器で実測する等の工夫と手間をかけなければならない状況になっている。
【０００９】
なお、インサーキットエミュレータの代替えとしてロジックアナライザを用いたとしても、プロービングが面倒かつ困難であるという問題を抱えている。すなわち、ロジックアナライザを用いてリアルタイムトレースする場合、３２ビットＣＰＵの場合、アドレスバス、必要な制御信号全てを合わせると、８０本前後のプロービングが必要となり、実際の製品ハードウェアにそれだけのプロービングは困難であり、非現実的である。
【００１０】
本発明は、このような課題を解決するためになされたもので、その目的とするところは簡単なシステム構成で、ターゲットのＣＰＵ動作クロックが高速であっても、リアルタイムトレースを行うことが可能なモニタプログラムおよびリアルタイムトレースシステムを提供することにある。
【課題を解決するための手段】
【００１１】
このような目的を達成するために本発明は、モニタプログラム（以下、ＲＯＭモニタ余呼ぶ）によって、ターゲットのコンピュータ（ＣＰＵ）に、少なくとも下記の(１)，(２)の処理を実行させるようにしたものである。
(１)トレース種別およびトレース対象アドレスを少なくとも含むパラメータをトレース対象プログラムの実行中にトレースするデータの条件としてメモリに記憶させる。
(２)トレース対象プログラムの実行中、メモリに記憶されているパラメータに従って、割り込み処理によりトレースされたデータをリアルタイムトレースデータとしてメモリに記憶させる。
【００１２】
この発明によれば、ターゲットのＣＰＵは、ＲＯＭモニタの上記(１)の処理機能により、トレース種別およびトレース対象アドレスを少なくとも含むパラメータをトレース対象プログラムの実行中にトレースするデータの条件（リアルタイムトレース条件）としてメモリ（例えば、ＲＡＭのパラメータ領域）に記憶させる。また、ターゲットのＣＰＵは、ＲＯＭモニタの上記(２)の処理機能により、トレース対象プログラムの実行中、メモリに記憶されているパラメータに従って、割り込み処理により所定のデータをトレースし、このトレースしたデータをリアルタイムトレースデータとしてメモリ（例えば、ＲＡＭのトレース領域）に記憶させる。
【００１３】
本発明において、ＲＯＭモニタは、ターゲットの不揮発性メモリに格納することができるため、多数のバスプロービングが一切不要となる。また、ターゲットのＣＰＵ自身を用いてリアルタイムトレースを行うため、ＣＰＵの動作クロックが高速であってもリアルタイムトレースを行うことが可能となる。これにより、デバイスドライバをはじめとするファームウェアの性能検証を測定器なしで行うことが可能になる。
【００１４】
また、本発明では、トレース種別およびトレース対象アドレスを少なくとも含むパラメータをリアルタイムトレース条件としてメモリに記憶させることにより、トレース種別が命令実行タイプである場合とデータアクセスタイプである場合とでその処理動作を分けることができる。
例えば、トレース種別が命令実行タイプであった場合、そのパラメータに含まれるトレース対象アドレス（トレース対象命令アドレス）を命令比較レジスタに設定させ、トレース対象プログラムの実行中に、その実行アドレスが命令比較レジスタに設定されているトレース対象命令アドレスと一致した場合に、リアルタイムトレースデータを取得するための割り込み処理を発生させるようにする。
例えば、トレース種別がデータアクセスタイプであった場合、そのパラメータに含まれるトレース対象アドレス（トレース対象データアドレス）をデータ比較レジスタに設定させ、トレース対象プログラムの実行中に、そのアクセスアドレスがデータ比較レジスタに設定されているトレース対象データアドレスと一致した場合に、リアルタイムトレースデータを取得するための割り込み処理を発生させるようにする。
【００１５】
トレース種別がデータアクセスタイプであった場合、そのパラメータに含まれるトレース対象データアドレスをデータ比較レジスタに設定させ、そのトレース対象データアドレスへのデータアクセスの属性をトレース対象アクセス属性としてデータ属性設定レジスタに設定させ、トレース対象プログラムの実行中に、そのアクセスアドレスがデータ比較レジスタに設定されているトレース対象データアドレスと一致し、かつそのアクセスアドレスへのデータアクセスの属性がデータ属性設定レジスタに設定されているトレース対象アクセス属性と一致した場合に、リアルタイムトレースデータを取得するための割り込み処理を発生させるようにしてもよい。
【００１６】
また、本発明において、トレース対象プログラムの実行に先立ってタイマをスタートさせるようにし、割り込み処理の発生時にリアルタイムトレースデータの１つとしてその時のタイマの値をタイムスタンプ値として取得させるようにしてもよい。これにより、リアルタイムトレースデータの１つとして取得したタイムスタンプ値から、割り込み処理間の実行時間（例えば、前回の命令実行から今回の命令実行までの時間、前回のデータアクセスから今回のデータアクセスまでの時間）を計算させるようにすることが可能である。
【００１７】
また、本発明のＲＯＭモニタは、ターゲット装置に搭載し、ホスト装置と組み合わせることにより、リアルタイムトレースシステムを構成することができる。この場合、ホスト装置には、トレース種別およびトレース対象アドレスを少なくとも含むパラメータをターゲット装置に送る手段、ターゲット装置から送られてくるトレース結果を表示する手段、ターゲット装置にトレース開始指示を与える手段、ターゲット装置にトレース停止指示を与える手段などを設ける。
【００１８】
本発明において、トレース種別には命令実行タイプやデータアクセスタイプがあるが、命令実行タイプには「シーケンシャル命令」や「リピート命令」などがあり、データアクセスタイプには「シーケンシャルアクセス」や「リピートアクセス」などがある。「シーケンシャル命令」では前回とは異なる命令アドレスをトレース対象命令アドレスとし、「リピート命令」では前回と同じ命令アドレスをトレース対象命令アドレスとする。「シーケンシャルアクセス」では前回とは異なるデータアドレスをトレース対象アドレスとし、「リピートアクセス」では前回と同じデータアドレスをトレース対象アドレスとする。
【００１９】
トレース種別が「シーケンシャル命令」の場合、ＲＯＭモニタは、コンピュータに、メモリに記憶されているパラメータに含まれる第１のトレース対象命令アドレスを命令比較レジスタに設定させる処理と、トレース対象プログラムの実行中に、その実行アドレスが命令比較レジスタに設定されている第１のトレース対象命令アドレスと一致した場合、リアルタイムトレースデータを取得するための第１の割り込み処理を発生させる処理と、第１の割り込み処理の実行後、パラメータに含まれる第２のトレース対象命令アドレスを命令比較レジスタに設定させる処理と、トレース対象プログラムの実行中に、その実行アドレスが命令比較レジスタに設定されている第２のトレース対象命令アドレスと一致した場合、リアルタイムトレースデータを取得するための第２の割り込み処理を発生させる処理と、トレース対象プログラムの実行に先立ってタイマをスタートさせる処理と、第１の割り込み処理の発生時にリアルタイムトレースデータの１つとしてその時のタイマの値を第１のタイムスタンプ値として取得させる処理と、第２の割り込み処理の発生時にリアルタイムトレースデータの１つとしてその時のタイマの値を第２のタイムスタンプ値として取得させる処理と、第２のタイムスタンプ値から第１のタイムスタンプ値を差し引いて第１の割り込み処理と第２の割り込み処理との間の実行時間を計算させる処理とを実行させる。
【００２０】
トレース種別が「リピート命令」の場合、ＲＯＭモニタは、コンピュータに、メモリに記憶されているパラメータに含まれるトレース対象命令アドレスを命令比較レジスタに設定させる処理と、トレース対象プログラムの実行中に、その実行アドレスが命令比較レジスタに設定されているトレース対象命令アドレスと一致する毎に、リアルタイムトレースデータを取得するための割り込み処理を発生させる処理と、トレース対象プログラムの実行に先立ってタイマをスタートさせる処理と、割り込み処理の発生毎にリアルタイムトレースデータの１つとしてその時のタイマの値をタイムスタンプ値として取得させる処理と、連続して発生する割り込み処理の一方を第１の割り込み処理、他方を第２の割り込み処理とし、第２の割り込み処理の発生時に取得したタイムスタンプ値から第１の割り込み処理の発生時に取得したタイムスタンプ値を差し引いて、第１の割り込み処理と第２の割り込み処理との間の実行時間を計算させる処理とを実行させる。
【００２１】
トレース種別が「シーケンシャルアクセス」の場合、ＲＯＭモニタは、コンピュータに、メモリに記憶されているパラメータに含まれる第１のトレース対象データアドレスをデータ比較レジスタに設定させる処理と、トレース対象プログラムの実行中に、そのアクセスアドレスがデータ比較レジスタに設定されている第１のトレース対象データアドレスと一致した場合、リアルタイムトレースデータを取得するための第１の割り込み処理を発生させる処理と、第１の割り込み処理の実行後、パラメータに含まれる第２のトレース対象データアドレスをデータ比較レジスタに設定させる処理と、トレース対象プログラムの実行中に、そのアクセスアドレスがデータ比較レジスタに設定されている第２のトレース対象データアドレスと一致した場合、リアルタイムトレースデータを取得するための第２の割り込み処理を発生させる処理と、トレース対象プログラムの実行に先立ってタイマをスタートさせる処理と、第１の割り込み処理の発生時にリアルタイムトレースデータの１つとしてその時のタイマの値を第１のタイムスタンプ値として取得させる処理と、第２の割り込み処理の発生時にリアルタイムトレースデータの１つとしてその時のタイマの値を第２のタイムスタンプ値として取得させる処理と、第２のタイムスタンプ値から第１のタイムスタンプ値を差し引いて第１の割り込み処理と第２の割り込み処理との割り込み処理間の実行時間を計算させる処理とを実行させる。
【００２２】
トレース種別が「リピートアクセス」の場合、ＲＯＭモニタは、コンピュータに、メモリに記憶されているパラメータに含まれるトレース対象データアドレスをデータ比較レジスタに設定させる処理と、トレース対象プログラムの実行中に、そのアクセスアドレスがデータ比較レジスタに設定されているトレース対象データアドレスと一致する毎に、リアルタイムトレースデータを取得するための割り込み処理を発生させる処理と、トレース対象プログラムの実行に先立ってタイマをスタートさせる処理と、割り込み処理の発生毎にリアルタイムトレースデータの１つとしてその時のタイマの値をタイムスタンプ値として取得させる処理と、連続して発生する割り込み処理の一方を第１の割り込み処理、他方を第２の割り込み処理とし、第２の割り込み処理の発生時に取得したタイムスタンプ値から第１の割り込み処理の発生時に取得したタイムスタンプ値を差し引いて、第１の割り込み処理と第２の割り込み処理との割り込み処理間の実行時間を計算させる処理とを実行させる。
【００２３】
なお、本発明に係るＲＯＭモニタは、このＲＯＭモニタを記憶させたフレキシブルディスク、ＣＤ−ＲＯＭ、メモリカードなどの記録媒体としても提供可能である。
【発明の効果】
【００２４】
本発明によれば、ＲＯＭモニタ（モニタプログラム）によって、ターゲットのコンピュータにリアルタイムトレースを行わせることにより、簡単なシステム構成で、ターゲットのＣＰＵ動作クロックが高速であっても、リアルタイムトレースを行うことが可能となる。
また、本発明では、トレース種別およびトレース対象アドレスを少なくとも含むパラメータをリアルタイムトレース条件としてメモリに記憶させることにより、トレース種別が命令実行タイプである場合とデータアクセスタイプである場合とでその処理動作を分けてリアルタイムトレースを行うようにすることができ、命令実行タイプの一種である「シーケンシャル命令」や「リピート命令」、データアクセスタイプの一種である「シーケンシャルアクセス」や「リピートアクセス」に対応することが可能となる。
【発明を実施するための最良の形態】
【００２５】
以下、本発明を図面に基づいて詳細に説明する。図１に本発明に係るモニタプログラム（ＲＯＭモニタ）を使用したリアルタイムトレースシステムの一実施の形態を示す。
このリアルタイムトレースシステムは、コマンド入力、レスポンス出力を行うホスト（ホスト装置）１と、リアルタイムトレース対象のターゲット（ターゲット装置）３と、その両者を接続するシリアル回線４とを含む。ホスト１は、キーボード等の入力装置１１と、ディスプレイ等の表示装置１３と、コマンド／レスポンスのやり取りを行うシリアルインタフェース１４とを備えている。
【００２６】
ターゲット３は、プログラム処理を行うＣＰＵ３１と、タイマカウント処理を行うタイマユニット３２と、プログラムコードが格納されるＲＯＭ３３と、プログラムデータが格納されるＲＡＭ３４と、コマンド／レスポンスのやり取りを行うシリアルインタフェース３５とを備えている。
【００２７】
図２にターゲット３内の更に詳細な構成を示す。ＣＰＵ３１は、デバッグ割り込み制御状態レジスタ３１１と、命令比較レジスタ３１２と、データ比較レジスタ３１３と、データ属性設定レジスタ３１４と、データ属性状態レジスタ３１５とを備えている。本実施の形態では、これらのレジスタを総称してデバッグレジスタと呼ぶ。
【００２８】
ＲＯＭ３３には、本実施の形態特有のプログラム（ＣＰＵ３１が実行するプログラム）として、ＲＯＭモニタ３３１が格納されている。ＲＯＭモニタ３３１は、コマンド実行処理プログラム（以下、コマンド実行処理と呼ぶ）３３１１と、デバッグ割り込みハンドラ処理プログラム（以下、デバッグ割り込みハンドラ処理と呼ぶ）３３１２とを備えている。
【００２９】
なお、ＲＯＭモニタ３３１は、このＲＯＭモニタ３３１を記憶させたフレキシブルディスク、ＣＤ−ＲＯＭ、メモリカードなどの記録媒体として提供を受け、必要に応じてターゲット３内のハードディスクにインストールするなどとしてもよい。
【００３０】
ＲＡＭ３４は、パラメータ領域３４１と、トレース領域３４２とを備えている。ホスト１の入力装置１１から入力されたコマンドは、シリアルインタフェース１４、３５を介して、コマンド実行処理３３１１に渡される。コマンド実行処理３３１１は、後述するようにリアルタイムトレースを実行し、そのトレース結果を、シリアルインタフェース３５，１４を介して、ホスト１に送信する。ホスト１はターゲット１からのトレース結果を表示装置１３に表示する。
【００３１】
デバッグ割り込み制御状態レジスタ３１１は、図３にそのフォーマットを示すように、デバッグ割り込み制御フィールド３１１１（Ｂｉｔ３１：ＩＥ（Interrupt Enable）ビット）と、デバッグ割り込み状態フィールド３１１２（Ｂｉｔ０：ＩＳ（Interrupt Status）ビット）とを備えている。
【００３２】
デバッグ割り込み制御フィールド３１１１は、ＩＥビット＝１とすることで、デバッグ割り込みを許可することができる。ＩＥビット＝０で、デバッグ割り込みを禁止することができる。デバッグ割り込み状態フィールド３１１２は、ＩＳビット＝１ならば命令実行による割り込みが発生したことを示し、ＩＳビット＝０ならばデータアクセスにより割り込みが発生したことを示す。命令実行による割り込み、データアクセスによる割り込みについては、後述する。
【００３３】
図４に命令比較レジスタ３１２のフォーマットを、図５にデータ比較レジスタ３１３のフォーマットを、図６にデータ属性設定レジスタ３１４のフォーマットを、図７にデータ属性状態設定レジスタ３１５のフォーマットを示す。命令比較レジスタ３１２は、命令アドレスフィールド３１２１を備え、データ比較レジスタ３１３はデータアドレスフィールド３１３１を備え、データ属性設定レジスタ３１４はアクセス属性設定フィールド３１４１を備え、データ属性状態レジスタ３１５はアクセス属性状態フィールド３１５１を備えている。
【００３４】
命令比較レジスタ３１２の命令アドレスフィールド３１２１（図４）には、トレースしたい命令アドレス（トレース対象命令アドレス）を設定することができる。ＣＰＵ３１は、命令アドレスフィールド３１２１に設定されているアドレスのプログラムコードを実行する際、デバッグ割り込み制御状態レジスタ３１１のデバッグ割り込み状態フィールド３１１２（図３）を「１」に設定し、デバッグ割り込みａを発生させる。
【００３５】
データ比較レジスタ３１３のデータアドレスフィールド３１３１（図５）には、トレースしたいデータアドレス（トレース対象データアドレス）を設定することができる。データ属性設定レジスタ３１４のアクセス属性設定フィールド３１４１（図６）には、トレースしたいアクセス属性（トレース対象アクセス属性）を設定することができる。
【００３６】
アクセス属性設定フィールド３１４１において、Ｂｉｔ３０＝１（Ｗ＝１）ならばライトアクセスでデバッグ割り込み許可を示し、Ｂｉｔ３０＝０（Ｗ＝０）ならばライトアクセスでデバッグ割り込み禁止を示す。Ｂｉｔ３１＝１（Ｒ＝１）ならばリードアクセスでデバッグ割り込み許可を示し、Ｂｉｔ３１＝０（Ｒ＝０）ならばリードアクセスでデバッグ割り込み禁止を示す。
【００３７】
ＣＰＵ３１は、実行プログラム（後述するトレース対象プログラム）がデータ比較レジスタ３１３のデータアドレスフィールド３１３１（図５）に設定されているデータアドレスに、データ属性設定レジスタ３１４のアクセス属性設定フィールド３１４１（図６）に設定されたアクセス属性（リード／ライト）でアクセスした場合、デバッグ割り込み制御状態レジスタ３１１のデバッグ割り込み状態フィールド３１１２（図３）を「０」に設定し、データ属性状態設定レジスタ３１５のアクセス属性状態フィールド３１５１（図７）に該当するアクセス属性（リード／ライト）のビットを立て、デバッグ割り込みａを発生させる。デバッグ割り込みａの発生により、ＲＯＭモニタ３３１のデバッグ割り込みハンドラ処理３３１２が起動される。
【００３８】
なお、データ属性状態設定レジスタ３１５において、Ｂｉｔ３０＝１（Ｗ＝１（ＣＰＵが設定））ならばライトアクセスでデバッグ割り込み発生を示し、Ｂｉｔ３０＝１（Ｗ＝１（プログラムが設定））ならばデバッグ割り込みクリアを示す。Ｂｉｔ３１＝１（Ｒ＝１（ＣＰＵが設定））ならばリードアクセスでデバッグ割り込み発生を示し、Ｂｉｔ３１＝１（Ｒ＝１（プログラムが設定））ならばデバッグ割り込みクリアを示す。
【００３９】
ＲＡＭ３４のパラメータ領域３４１には、ＲＯＭモニタ３３１のコマンド実行処理３３１１により、図８に示されるフォーマットでパラメータが格納される。このパラメータは後述するトレース対象プログラムの実行中にトレースするデータの条件（リアルタイムトレース条件）を示す。ＲＡＭ３４のトレース領域３４２には、ＲＯＭモニタ３３１のデバッグ割り込みハンドラ処理３３１２により、図９に示されるフォーマット（１トレース単位）でリアルタイムトレースの結果（リアルタイムトレースデータ）が格納される。パラメータ領域３４１に格納されるパラメータ、トレース領域３４２に格納されるリアルタイムトレースデータの詳細については、後述する。
【００４０】
図１０にＲＯＭモニタ３３１のコマンド実行処理３３１１に従ってＣＰＵ３１が実行する処理のフローチャートを、図１１にＲＯＭ３３１のデバッグ割り込みハンドラ処理３３１２に従ってＣＰＵ３１が実行する処理のフローチャートを示す。以下、この図１０および図１１を参照しながら、図１に示したリアルタイムトレースシステムの動作について詳細に説明する。
【００４１】
〔コマンド実行処理〕
ホスト１は、シリアル回線４を介してターゲット３に、リアルタイムトレースコマンドを送る。このリアルタイムトレースコマンドは、ターゲット３のシリアルインタフェース３５を介して、ＣＰＵ３１へ送られる。ＣＰＵ３１は、このホスト１からのリアルタイムトレースコマンドを受けて、ＲＯＭモニタ３３１のコマンド実行処理３３１１を起動する。
【００４２】
リアルタイムトレースコマンドには、トレース開始コマンド、トレース結果表示コマンド、トレース停止コマンドがある。トレース開始コマンドには、トレース対象プログラムの実行中のリアルタイムトレース条件として、トレース種別、トレース対象アドレス（トレース対象命令アドレス、トレース対象データアドレス）、トレース対象アクセス属性、トレース領域開始アドレス、トレース領域終了アドレスなどのパラメータが含まれている。
【００４３】
コマンド実行処理３３１１は、コマンドの解析を行い（図１０に示すステップ１０１）、トレース開始コマンドであった場合、そのトレース開始コマンドに含まれているパラメータをパラメータ領域３４１に格納する（図８参照）。
次に、コマンド実行処理３３１１は、リアルタイムトレースコマンドの種別毎の処理を行う（ステップ１０２）。
【００４４】
〔トレース開始コマンドであった場合〕
トレース開始コマンドであった場合（ステップ１０２の「トレース開始」）、コマンド実行処理３３１１は、パラメータ領域３４１に格納されているトレース領域開始アドレス３４１８およびトレース領域終了アドレス３４１９に従い、トレース領域開始アドレス３４１８からトレース領域終了アドレス３４１９までのトレース領域３４２を初期化する（ステップ１０３）。
【００４５】
そして、パラメータ領域３４１に格納されているトレース種別３４１１をチェックし、トレース種別３４１１がプログラム実行トレース（命令実行タイプ）であった場合には（ステップ１０４のＹＥＳ）、命令比較レジスタ３１２にパラメータ領域３４１中のトレース対象１命令アドレス３４１２を設定する（ステップ１０５）。トレース種別３４１１がデータアクセストレース（データアクセスタイプ）であった場合には（ステップ１０６のＹＥＳ）、データ比較レジスタ３１３にトレース対象１データアドレス３４１３を設定し、データ属性設定レジスタ３１４にトレース対象１アクセス属性３４１４を設定する（ステップ１０７）。
【００４６】
そして、タイマユニット３２のタイマをスタートさせると同時に、デバッグ割り込み制御状態レジスタ３１１のデバッグ制御フィールド３１１１を「１」（ＩＥビット＝１）とし、デバッグ割り込みを許可する（ステップ１０８）。
【００４７】
〔トレース結果表示コマンド〕
トレース結果表示コマンドであった場合（ステップ１０２の「トレース結果表示」）、コマンド実行処理３３１１は、トレース領域３４２に格納されたリアルタイムトレースデータ（図９）の１トレース毎のタイムスタンプ値３４２４（後述）を引き算し、プログラム動作クロックを掛け合わせることで１トレース毎の実行時間を算出する（ステップ１０９）。
【００４８】
そして、算出した１トレース毎の実行時間を含むリアルタイムトレースデータをＡＳＣＩＩ形式に編集し（ステップ１１０）、その内容（トレース結果）をシリアルインタフェース３５を介してホスト１に送信する（ステップ１１１）。
【００４９】
〔トレース停止コマンド〕
トレース停止コマンドであった場合（ステップ１０２の「トレース停止」）、コマンド実行処理３３１１は、デバッグ割り込み制御状態レジスタ３１１のデバッグ制御フィールド３１１１（ＩＥビット）をクリアし、デバッグ割り込み禁止としたうえ、タイマユニット３２のタイマ動作を停止させる（ステップ１１２）。以後、デバッグ割り込みは発生せず、リアルタイムトレースは終了したことになる。
【００５０】
〔デバッグ割り込み処理〕
デバッグ割り込みａが発生すると、ＣＰＵ３１は、デバッグ割り込みハンドラ処理３３１２を起動する。デバッグ割り込みハンドラ処理３３１２は、デバッグ割り込みａの発生と同時に、タイマユニット３２からその時のタイマ値を読み出し、トレース領域３４２のタイムスタンプ値３４２４（図９）に書き込む（図１１に示すステップ２０１）。
【００５１】
そして、デバッグ割り込みハンドラ処理３３１２は、デバッグ割り込みａが命令実行によるものか、データアクセスによるものかをデバッグ割り込み制御状態レジスタ３１１のデバッグ割り込み状態フィールド３１１２（ＩＳビット）の値により判断する。命令実行によるものなら（ＩＳ＝１）、割り込み発生時の実行アドレスをトレース領域３４２のトレース結果アドレス３４２１（図９）に書き込む。データアクセスによるものなら（ＩＳ＝０）、割り込み発生時のアクセスアドレスをトレース領域３４２のトレース結果アドレス３４２１に、割り込み発生時のアクセス属性をトレース領域３４２のトレース結果属性３４２３に、割り込み発生時のアクセスデータ値をトレース領域３４２のトレース結果データ３４２２に書き込む（ステップ２０２）。
【００５２】
その後、デバッグ割り込みハンドラ処理３３１２は、パラメータ領域３４１のトレース種別３４１１（図８）を読み出し、読み出したトレース種別３４１１が「シーケンシャル命令」であった場合には（ステップ２０３のＹＥＳ）、トレース対象２命令アドレス３４１５が「−１」ではないことを確認のうえ（ステップ２０４のＮＯ）、トレース対象２命令アドレス３４１５を命令比較レジスタ３１２に設定する（ステップ２０５）。
【００５３】
読み出したトレース種別３４１１が「シーケンシャルアクセス」であった場合には（ステップ２０３のＹＥＳ）、トレース対象２データアドレス３４１６が「−１」ではないことを確認のうえ（ステップ２０４のＮＯ）、トレース対象２データアドレス３４１６をデータ比較レジスタ３１３に、トレース対象２アクセス属性３４１７をデータ属性設定レジスタ３１４に設定する（ステップ２０５）。
【００５４】
もし、読み出したトレース種別３４１１が「シーケンシャル命令」でトレース対象２命令アドレス３４１５が「−１」であった場合には（ステップ２０４のＹＥＳ）、或いは、読み出したトレース種別３４１１が「シーケンシャルアクセス」でトレース対象２データアドレス３４１６が「−１」であった場合には（ステップ２０４のＹＥＳ）、ステップ２０５へは進まず、ステップ２０７のトレース終了処理へジャンプする。
【００５５】
ステップ２０５の実行後、トレース領域３４２の空き領域が有るなら、トレース領域３４２の書き込みポインタを更新し、デバッグ割り込み処理を終了して、次のデバッグ割り込みを待つ。トレース領域３４２の空き領域が無かったら、ステップ２０７のトレース終了処理へ進み、タイマユニット３２のタイマ動作を停止し、デバッグ割り込み制御状態レジスタ３１１のデバッグ割り込み制御フィールド３１１１（ＩＥビット）をクリアし、デバッグ割り込み処理を終了する。
【００５６】
次に、具体的な例を挙げて、本実施の形態の動作について更に詳細に説明する。
〔具体例１〕
図１２にデバッグ端末５とのシリアルインタフェース３６を有するターゲット３にＲＯＭモニタ３３１を搭載したリアルタイムトレースシステムを示す。この構成において、例えば、シリアルインタフェース３６のシリアルデバイスドライバをデバッグする場合、シリアル送信データが正確に要求回線速度で送信できているかのリアルタイム検証を行いたいとする。
【００５７】
この場合、トレース対象プログラムとして、シリアルデバイスドライバ送信テストプログラムを使用するものとし、このシリアルデバイスドライバ送信テストプログラムにより、文字列「ＨｅｌｌｏＷｏｒｌｄ」を１文字ずつ９６００ｂｐｓの回線速度でシリアル回線６を介してデバッグ端末５へ送信するものとする。
【００５８】
〔リアルタイム検証の手順〕
〔トレース対象プログラムのダウンロード〕
まず、ホスト１から、シリアルデバイスドライバ送信テストプログラム（トレース対象プログラム）をＲＯＭモニタ３３１の既存ダウロードコマンドで、ＲＡＭ３４の空き領域にダウンロードしておく（図１３に示すステップ３０１）。
【００５９】
〔トレース開始コマンドの入力〕
次に、ホスト１から、トレース開始コマンドを入力する（ステップ３０２）。ターゲット３のＣＰＵ３１は、ホスト１からのトレース開始コマンドを受けて、ＲＯＭモニタ３３１のコマンド実行処理３３１１を起動する。
【００６０】
なお、この例では、ホスト１からのトレース開始コマンドに、トレース種別として「リピートアクセス」が、トレース対象アドレス（トレース対象データアドレス）としてシリアル送信ポートのアドレス「１００番地」が、トレース対象アクセス属性として「Ｗ（Ｗｒｉｔｅ）」が、トレース領域開始アドレスとして「１０２４番地」が、トレース領域終了アドレスとして「１２７９番地」がパラメータ（シリアルデバイスドライバ送信テストプログラムの実行中のリアルタイムトレース条件）として含まれているものとする。
【００６１】
コマンド実行処理３３１１は、コマンドの解析を行い（図１０：ステップ１０１）、トレース開始コマンドに含まれているパラメータをパラメータ領域３４１に格納する（図１４参照）。この場合、トレース種別３４１１に「リピートアクセス」を、トレース対象１データアドレス３４１３に「＃１００」を、トレース対象１アクセス属性３４１４に「Ｗ」を、トレース領域開始アドレス３４１８に「＃１０２４」を、トレース領域終了アドレス３４１９に「＃１２７９」を書き込む。
【００６２】
また、コマンド実行処理３３１１は、コマンド種別が「トレース開始」であることから、ＲＡＭ３４中のトレース領域３４２のクリアを行う（ステップ１０３）。また、パラメータ領域３４１のトレース種別３４１１が「リピートアクセス」であることから、データアクセストレース（データアクセスタイプ）であると判断し（ステップ１０６のＹＥＳ）、データ比較レジスタ３１３およびデータ属性設定レジスタ３１４へのパラメータの設定を行う（ステップ１０７）。
【００６３】
この場合、パラメータ領域３４１のトレース対象１データアドレス３４１１（「＃１００」）をデータ比較レジスタ３１３に設定し、パラメータ領域３４１のトレース対象１アクセス属性３４１４（Ｗ）をデータ属性設定レジスタ３１４に設定する（Ｂｉｔ３０に「１」を設定する）。
【００６４】
そして、コマンド実行処理３３１１は、タイマユニット３２のタイマをスタートさせ、デバッグ割り込み制御状態レジスタ３１１のＩＥビットを「１」に設定し、デバッグ割り込みを許可する（ステップ１０８）。
【００６５】
〔トレース対象プログラムの実行開始〕
その後、ホスト１は、ＲＯＭモニタ３３１の既存実行制御コマンドで、ＲＡＭ３４に格納されているシリアルデバイスドライバ送信プログラム（トレース対象プログラム）に対して起動をかける（図１３：ステップ３０３）。これにより、ＣＰＵ３１は、シリアルデバイスドライバ送信プログラムの実行を開始する。
【００６６】
シリアルデバイスドライバ送信プログラムが文字列「ＨｅｌｌｏＷｏｒｌｄ」を、シリアル回線６に送信しようとすると、シリアルインタフェース３６のシリアルデバイスドライバが１００番地に最初の文字「Ｈ」を書き込む。
【００６７】
この際、ＣＰＵ３１は、デバッグ属性状態レジスタ３１５のＢｉｔ３０に「１」を、デバッグ割り込み制御状態レジスタ３１１のＩＳビットに「０」を書き込み、デバッグ割り込みを発生させ、ＲＯＭモニタ３３１のデバッグ割り込みハンドラ処理３３１２を起動させる。
【００６８】
デバッグ割り込みハンドラ処理３３１２は、タイマユニット３２からその時のタイマ値ｔ１を読み込み（図１１：ステップ２０１）、トレース領域３４２の１トレース単位のフォーマット中のタイムスタンプ値３４２４に書き込む（図１５（ａ）参照）。
次に、デバッグ割り込みハンドラ処理３３１２は、デバッグ割り込み制御状態レジスタ３１１のＩＳビットが「０」であることから、データアクセスによる割り込みであると認識する。
【００６９】
これに従い、デバッグ割り込みハンドラ処理３３１２は、トレース結果アドレス３４２１に「＃１００」を、トレース結果データ３４２２に文字「Ｈ」を書き込む。また、アクセス属性状態レジスタ３１５のＢｉｔ３０が「１」であることから、トレース結果属性３４２３に文字列「Ｗ」を書き込む（図１１：ステップ２０２、図１５（ａ）参照）。これにより、ＲＡＭ３４のトレース領域３４２内に、最初の文字「Ｈ」の送信に際してのリアルタイムトレースデータが作成される。
【００７０】
次に、デバッグ割り込みハンドラ処理３３１２は、ＲＡＭ３４中のパラメータ領域３４１のトレース種別３４１１をチェックする（ステップ２０３）。この場合、トレース種別３４１１は「リピートアクセス」であり、「シーケンシャル命令」あるいは「シーケンシャルアクセス」ではないので、ステップ２０４へは進まず、直ちにステップ２０６へ進み、トレース領域３４２の空きを確認する。この場合、まだ十分な空きがあるため（ステップ２０６のＹＥＳ）、トレース領域３４２の書き込みポインタを更新し、デバッグ割り込み処理を終了する。
【００７１】
以下、同様にして、デバッグ割り込みハンドラ処理３３１２は、残りの「ｅｌｌｏＷｏｒｌｄ」の各文字について、デバッグ割り込み処理を行う。これにより、ＲＡＭ３４のトレース領域３４２内に、「Ｈ」の場合と同様にして、残りの各文字の送信に際してのリアルトレースデータが作成される（図１５（ｂ）〜（ｊ）参照）。
【００７２】
〔トレース停止コマンドの入力〕
次に、ホスト１から、トレース停止コマンドを入力する（図１３：ステップ３０４）。ターゲット３のＣＰＵ３１は、ホスト１からのトレース停止コマンドを受けて、ＲＯＭモニタ３３１のコマンド実行処理３３１１を起動する。
【００７３】
コマンド実行処理３３１１は、コマンドの解析を行い（図１０：ステップ１０１）、コマンド種別が「トレース停止」であることから、デバッグ割り込み制御状態レジスタ３１１のＩＥビットをクリアし、デバッグ割り込み禁止としたうえ、タイマユニット３２のタイマ動作を停止する（図１０：ステップ１１２）。
【００７４】
〔トレース結果表示コマンドの入力〕
最後に、トレース結果を確認するため、ホスト１から、トレース結果表示コマンドを入力する（図１３：ステップ３０５）。ターゲット３のＣＰＵ３１は、ホスト１からのトレース結果表示コマンドを受けて、ＲＯＭモニタ３３１のコマンド実行処理３３１１を起動する。
【００７５】
コマンド実行処理３３１１は、コマンドの解析を行い（図１０：ステップ１０１）、コマンド種別が「トレース結果表示」であることから、１トレース毎のリアルタイムトレースデータにおけるタイムスタンプ値３４２４を読み出し、１トレース毎の実行時間（ｔ２−ｔ１、ｔ３−ｔ２、・・・・、ｔ１０−ｔ９）を計算する（ステップ１０９）。
【００７６】
そして、この１トレース毎の実行時間（割り込み処理間の時間）を含むリアルタイムトレースデータをＡＳＣＩＩ形式に編集し（ステップ１１０）、その内容（トレース結果）をシリアルインタフェース３５に送信する（ステップ１１１）。このトレース結果はホスト１の表示装置１３に表示される。
【００７７】
図１６にホスト１の表示装置１３に表示されたトレース結果を例示する。このトレース結果では、１文字毎の送信間隔が１ミリ秒であることから、シリアルインタフェース３６のシリアルデバイスドライバが９６００ｂｐｓの回線スピードで、文字を正確に送信していることが確認できる。
【００７８】
〔具体例２〕
図１７に、アラーム監視ホスト７１と、複数のアラーム検出器７２（７２−１，７２−２，７２−３）とを備え、これらが装置内バス７３によって接続されたアラーム監視システムを示す。このアラーム監視システム７において、各アラーム検出器７２は、ターゲット３の構成要素を備えている。ターゲット３のＲＯＭ３３にはＲＯＭモニタ３３１が格納されている。
【００７９】
アラーム監視ホスト７１は、各アラーム検出器７２を装置内バス７３を経由してポーリングしながら、アラーム情報を収集する。全アラーム検出器７２のアラーム情報を収集する要求周期を３００ミリ秒とした場合、各アラーム検出器７２は、アラーム監視ホスト７１からのアラーム収集コマンドを受信してから、アラーム情報を応答するまでに１００ミリ秒以内で処理を行うことが求められる。
【００８０】
この構成において、各アラーム検出器７２が１００ミリ秒以内で応答を返せるのかのリアルタイム検証を行いたいとする。この場合、アラーム検出器７２をトレース対象とする。また、図１７のアラーム監視システム７の装置内バス７３に、図１８に示すようにホスト１を接続する。
【００８１】
〔リアルタイム検証の手順〕
〔トレース対象プログラムのダウンロード〕
まず、ホスト１から、アラーム検出器用プログラム（トレース対象プログラム）をＲＯＭモニタ３３１の既存ダウンロードコマンドで、ＲＡＭ３４の空き領域にダウンロードしておく（図１３：ステップ３０１）。
【００８２】
〔トレース開始コマンドの入力〕
次に、ホスト１から、トレース開始コマンドを入力する（ステップ３０２）。アラーム検出器７２のＣＰＵ３１は、ホスト１からのトレース開始コマンドを受けて、ＲＯＭモニタ３３１のコマンド実行処理３３１１を起動する。
【００８３】
なお、この例では、ホスト１からのトレース開始コマンドに、トレース種別として「シーケンシャル命令」が、第１のトレース対象アドレス（トレース対象命令アドレス）としてアラーム収集コマンド受付処理の開始アドレス「２００番地」が、第２のトレース対象アドレス（トレース対象２命令アドレス）としてアラーム収集コマンド応答処理の終了アドレス「３００番地」が、トレース領域開始アドレスとして「１０２４番地」が、トレース領域終了アドレスとして「１２７９番地」がパラメータ（アラーム検出器用プログラムの実行中のリアルタイムトレース条件）として含まれているものとする。
【００８４】
コマンド実行処理３３１１は、コマンドの解析を行い（図１０：ステップ１０１）、トレース開始コマンドに含まれているパラメータをパラメータ領域３４１に格納する（図１９（ａ）参照）。この場合、トレース種別３４１１に「シーケンシャル命令」を、トレース対象１命令アドレス３４１２に「＃２００」を、トレース対象２命令アドレス３４１５に「＃３００」を、トレース領域開始アドレスに「＃１０２４」を、トレース領域終了アドレスに「＃１２７９」を書き込む。
【００８５】
また、コマンド実行処理３３１１は、コマンド種別が「トレース開始」であることからＲＡＭ３４中のトレース領域３４２のクリアを行う（ステップ１０３）。また、パラメータ領域３４１のトレース種別３４１１が「シーケンシャル命令」であることから、プログラム実行トレース（命令実行タイプ）であると判断し（ステップ１０４のＹＥＳ）、命令比較レジスタ３１２の命令アドレスフィールド３１２１にパラメータを設定する（ステップ１０５）。この場合、パラメータ領域３４１のトレース対象１命令アドレス３４１２（「＃２００」）を読み出し、命令比較レジスタ３１２に設定する。
【００８６】
そして、コマンド実行処理３３１１は、タイマユニット３２のタイマをスタートさせ、デバッグ割り込み制御状態レジスタ３１１のＩＥビットを「１」に設定し、デバッグ割り込みを許可する（ステップ１０８）。
【００８７】
〔トレース対象プログラムの実行開始〕
その後、ホスト１は、ＲＯＭモニタ３３１の既存実行制御コマンドで、ＲＡＭ３４に格納されているアラーム検出器用プログラム（トレース対象プログラム）に対して起動をかける（図１３：ステップ３０３）。これにより、ＣＰＵ３１は、アラーム検出器用プログラムの実行を開始する。
【００８８】
アラーム検出器用プログラムがアラーム収集コマンド受付処理を実行しようとすると、すなわち命令比較レジスタ３１２に設定されているトレース対象１命令アドレス「＃２００」を実行しようとすると、ＣＰＵ３１は、デバッグ割り込み制御状態レジスタ３１１のＩＳビットに「１」を書き込み、デバッグ割り込みを発生させ、ＲＯＭモニタ３３１のデバッグ割り込みハンドラ処理３３１２を起動させる。
【００８９】
デバッグ割り込みハンドラ処理３３１２は、タイマユニット３２からその時のタイマ値ｔｓを読み込み（図１１：ステップ２０１）、トレース領域３４２の１トレース単位のフォーマット中のタイムスタンプ値３４２４に書き込む（図２０（ａ）参照）。
次に、デバッグ割り込みハンドラ処理３３１２は、デバッグ割り込み制御状態レジスタ３１１のＩＳビットが「１」であることから、命令実行による割り込みであると認識する。
【００９０】
これに従い、デバッグ割り込みハンドラ処理３３１２は、トレース結果アドレス３４２１に「＃２００」を書き込む。また、実行トレースであることから、トレース結果データ３４２２に「０」を、トレース結果属性３４２３に「ｅｘｅｃｕｔｅ」を意味する文字列「Ｅ」を書き込む（図１１：ステップ２０２、図２０（ａ）参照）。これにより、ＲＡＭ３４のトレース領域３４２内に、アラーム収集コマンド受付処理に際してのリアルタイムトレースデータが作成される。
【００９１】
次に、デバッグ割り込みハンドラ処理３３１２は、ＲＡＭ３４中のパラメータ領域３４１のトレース種別３４１１をチェックする（ステップ２０３）。この場合、トレース種別３４１１は「シーケンシャル命令」であるので、ステップ２０４へ進む。そして、パラメータ領域３４１のトレース対象２命令アドレス３４１５（「＃３００」）を読み出し、このトレース対象２命令アドレス３４１５が「−１」ではないことを確認のうえ（ステップ２０４のＮＯ）、命令比較レジスタ３１２に設定する（ステップ２０５）。
【００９２】
そして、パラメータ領域３４１のトレース対象２命令アドレス３４１５を「−１」とした後（図１９（ｂ）参照）、トレース領域３４２の空きを確認する。この場合、まだ十分な空きがあるため（ステップ２０６のＹＥＳ）、トレース領域３４２の書き込みポインタを更新し、デバッグ割り込み処理を終了する。
【００９３】
その後、アラーム検出器用プログラムがアラーム収集コマンド応答処理を終了しようとすると、すなわち命令比較レジスタ３１２の命令アドレスフィールド３１２１に設定されているトレース対象２命令アドレス「＃３００」を実行しようとすると、ＣＰＵ３１は、デバッグ割り込み制御状態レジスタ３１１のＩＳビットに「１」を書き込み、デバッグ割り込みを発生させ、ＲＯＭモニタ３３１のデバッグ割り込みハンドラ処理３３１２を起動させる。
【００９４】
デバッグ割り込みハンドラ処理３３１２は、タイマユニット３２からその時のタイマ値ｔｅを読み込み（図１１：ステップ２０１）、トレース領域３４２の１トレース単位のフォーマット中のタイムスタンプ値３４２４に書き込む（図２０（ｂ）参照）。
次に、デバッグ割り込みハンドラ処理３３１２は、デバッグ割り込み制御状態レジスタ３１１のＩＳビットが「１」であることから、命令実行による割り込みであると認識する。
【００９５】
これに従い、デバッグ割り込みハンドラ処理３３１２は、トレース結果アドレス３４２１に「＃３００」を書き込む。また、実行トレースであることから、トレース結果データ３４２２に「０」を、トレース結果属性３４２３に「ｅｘｅｃｕｔｅ」を意味する文字列「Ｅ」を書き込む（図１１：ステップ２０２、図２０（ｂ）参照）。これにより、ＲＡＭ３４のトレース領域３４２内に、アラーム収集コマンド応答処理に際してのリアルタイムトレースデータが作成される。
【００９６】
次に、デバッグ割り込みハンドラ処理３３１２は、ＲＡＭ３４中のパラメータ領域３４１のトレース種別３４１１をチェックする（ステップ２０３）。この場合、トレース種別３４１１は「シーケンシャル命令」であるので、ステップ２０４へ進み、パラメータ領域３４１のトレース対象２命令アドレス３４１５を読み出す。この場合、トレース対象２命令アドレス３４１５は「−１」とされているので（ステップ２０４のＹＥＳ）、ステップ２０５へは進まず、ステップ２０７のトレース終了処理へジャンプする。そして、このステップ２０７で、タイマユニット３２のタイマ動作を停止し、デバッグ割り込み制御状態レジスタ３１１のＩＥビットをクリアし、デバッグ割り込み処理を終了する。
【００９７】
〔トレース停止コマンドの入力〕
次に、ホスト１から、トレース停止コマンドを入力する（図１３：ステップ３０４）。アラーム検出器７２のＣＰＵ３１は、ホスト１からのトレース停止コマンドを受けて、ＲＯＭモニタ３３１のコマンド実行処理３３１１を起動する。
【００９８】
コマンド実行処理３３１１は、コマンドの解析を行い（図１０：ステップ１０１）、コマンド種別が「トレース停止」であることから、デバッグ割り込み制御状態レジスタ３１１のＩＥビットをクリアし、デバッグ割り込み禁止としたうえ、タイマユニット３２のタイマ動作を停止する（図１０：ステップ１１２）。
【００９９】
〔トレース結果表示コマンドの入力〕
最後に、トレース結果を確認するため、ホスト１から、トレース結果表示コマンドを入力する（図１３：ステップ３０５）。アラーム検出器７２のＣＰＵ３１は、ホスト１からのトレース結果表示コマンドを受けて、ＲＯＭモニタ３３１のコマンド実行処理３３１１を起動する。
【０１００】
コマンド実行処理３３１１は、コマンドの解析を行い（図１０：ステップ１０１）、コマンド種別が「トレース結果表示」であることから、１トレース毎のリアルタイムトレースデータにおけるタイムスタンプ値３４２４から読み出し、１トレース毎の実行時間（ｔｅ−ｔｓ）を計算する（ステップ１０９）。
【０１０１】
そして、この１トレース毎の実行時間（割り込み処理間の時間）を含むリアルタイムトレースデータをＡＳＣＩＩ形式に編集し（ステップ１１０）、その内容（トレース結果）をシリアルインタフェース３５に送信する（ステップ１１１）。このトレース結果はホスト１の表示装置１３に表示される。
【０１０２】
図２１にホスト１の表示装置１３に表示されたトレース結果を例示する。このトレース結果では、アラーム収集コマンド受付から応答を返すまで１００ミリ秒以上であることから、処理性能の改善が必要であることが確認できる。
【０１０３】
なお、上述した具体例１では、トレース種別を「リピートアクセス」とした場合について説明したが、トレース種別が「シーケンシャルアクセス」であった場合には、具体例２と同様の処理動作によってリアルタイムトレースが行われることになる。
【０１０４】
この場合、ＲＯＭモニタ３３１は、ＣＰＵ３１に、ＲＡＭ３４のパラメータ領域３４１のトレース対象１データアドレス３４１３をデータ比較レジスタ３１３に設定させる処理と、ＲＡＭ３４のパラメータ領域３４１のトレース対象１アクセス属性３４１４をデータ属性設定レジスタ３１４に設定させる処理と、トレース対象プログラムの実行中に、そのアクセスアドレスがデータ比較レジスタ３１３に設定されているトレース対象１データアドレス３４１３と一致し、かつそのアクセス属性がデータ属性設定レジスタ３１４に設定されているトレース対象１アクセス属性３４１４と一致した場合に割り込み処理（第１の割り込み処理）を発生させる処理と、この割り込み処理の実行後、ＲＡＭ３４のパラメータ領域３４１のトレース対象２データアドレス３４１６をデータ比較レジスタ３１３に設定させる処理と、ＲＡＭ３４のパラメータ領域３４１のトレース対象２アクセス属性３４１７をデータ属性設定レジスタ３１４に設定させる処理と、トレース対象プログラムの実行中に、そのアクセスアドレスがデータ比較レジスタ３１３に設定されているトレース対象２データアドレス３４１６と一致し、かつそのアクセス属性がデータ属性設定レジスタ３１４に設定されているトレース対象２アクセス属性３４１７と一致した場合に割り込み処理（第２の割り込み処理）を発生させる処理とを実行させる。また、トレース対象プログラムの実行に先立ってタイマユニット３２のタイマをスタートさせる処理と、第１の割り込み処理の発生時にリアルタイムトレースデータの１つとしてその時のタイマの値を第１のタイムスタンプ値として取得させる処理と、第２の割り込み処理の発生時にリアルタイムトレースデータの１つとしてその時のタイマの値を第２のタイムスタンプ値として取得させる処理と、第２のタイムスタンプ値から第１のタイムスタンプ値を差し引いて第１の割り込み処理と第２の割り込み処理との割り込み処理間の実行時間を計算させる処理とを実行させる。
【０１０５】
なお、この例では、トレース対象１アクセス属性３４１４やトレース対象２アクセス属性３４１７を必須としたが、トレース対象アクセス属性３４１４やトレース対象２アクセス属性３４１７については、省略するものとしてもよい。すなわち、トレース対象アクセス属性に拘わらず、トレース対象プログラムの実行中に、そのアクセスアドレスがデータ比較レジスタ３１３に設定されているトレース対象１データアドレス３４１３やトレース対象２データアドレス３４１６と一致した場合に、割り込み処理を発生させるようにしてもよい。
【０１０６】
また、上述した具体例２では、トレース種別を「シーケンシャル命令」とした場合について説明したが、トレース種別が「リピート命令」であった場合には、具体例１と同様の処理動作によってリアルタイムトレースが行われることになる。
【０１０７】
この場合、ＲＯＭモニタ３３１は、ＣＰＵ３１に、ＲＡＭ３４のパラメータ３４１のトレース対象１命令アドレス３４１２を命令比較レジスタ３１２に設定させる処理と、トレース対象プログラムの実行中に、その実行アドレスが命令比較レジスタ３１２に設定されているトレース対象１命令アドレス３４１２と一致する毎に割り込み処理を発生させる処理と、トレース対象プログラムの実行に先立ってタイマユニット３２のタイマをスタートさせる処理と、割り込み処理の発生毎にリアルタイムトレースデータの１つとしてその時のタイマの値をタイムスタンプ値として取得させる処理と、連続して発生する割り込み処理の一方を第１の割り込み処理、他方を第２の割り込み処理とし、第２の割り込み処理の発生時に取得したタイムスタンプ値から第１の割り込み処理の発生時に取得したタイムスタンプ値を差し引いて、第１の割り込み処理と第２の割り込み処理との間の実行時間を計算させる処理とを実行させる。
【０１０８】
以上の説明から分かるように、本実施の形態では、ＲＯＭモニタ３３１をターゲット３に搭載し、このＲＯＭモニタ３３１によってターゲット３のＣＰＵ３１を利用してリアルタイムトレースを行わせるようにしているので、多数のバスプロービングが一切不要（実装が容易）となり、簡単なシステム構成で、ターゲット３のＣＰＵ動作クロックが高速であってもリアルタイムトレースを行うことができるようになる。
【０１０９】
また、本実施の形態では、デバッグ割り込みハンドラ処理３３１２内のロジックでは、ＣＰＵ負荷の掛かる数値計算処理を行わない等、処理負担を軽減しているため、リアルタイム検証のためのオーバーヘッドを最小限に止めることができる。
また、本実施の形態では、ＣＰＵ３１自身のデバッグ割りみ機構を利用しているので、インストラクションキャッシュでの実行割り込み、データキャッシュでのデータアクセス割り込みにも対応できる。従って、従来のインサーキットエミュレータやロジックアナライザでは対応できなかったキャッシュヒットも含んだリアルタイムトレース取得が可能となる。
また、本実施の形態では、トレース領域３４２をユーザが任意に設定できるため、プログラムが使用するメモリ資源を節約することができる。
【０１１０】
なお、この明細書の「背景技術」では説明しなかったが、開発プログラムのデバッグ作業にＲＯＭモニタを使用することについて特許文献２に示されている。すなわち、ターゲットにＲＯＭモニタを搭載し、このＲＯＭモニタを用いてターゲット内のＣＰＵにデバッグ作業を行わせることについて示されている。
また、特許文献３には、プログラム実行前にタイマのカウントデータをリセットし、プログラム実行中に、デバッグレジスタに設定されたアドレスを実行しようとすると、プロセッサにデバッグ割り込みを発生させ、その時のタイマのカウントデータを読み出し、実行時間としてメモリに格納する技術が示されている。
【０１１１】
しかしながら、この特許文献２と特許文献３とを組み合わせて考えられる技術とは、本発明の実施の形態において、命令比較レジスタにトレース対象命令アドレスを設定し、トレース対象プログラムの実行アドレスが命令比較レジスタに設定されているトレース対象命令アドレスに一致した時に、その時のタイマ値を読み取る程度の技術に過ぎない。
【０１１２】
本発明は、トレース種別およびトレース対象アドレスを少なくとも含むパラメータをリアルタイムトレース条件としてメモリに記憶させることにより、トレース種別が命令実行タイプである場合とデータアクセスタイプである場合とでその処理動作を分けることができることを特徴としている。
【０１１３】
すなわち、本発明では、実施の形態の説明からも分かるように、命令比較レジスタだけではなく、データ比較レジスタやデータ属性設定レジスタも設けており、これらのレジスタを巧みに組み合わせて、各種のリアルタイムトレースを行うことができるようにしている。このような点について、特許文献２，３には何ら開示されておらず、特許文献２，３から推測することができる技術とは構成だけではなく、効果についても明らかな差異がある。
【図面の簡単な説明】
【０１１４】
【図１】本発明に係るＲＯＭモニタを使用したリアルタイムトレースシステムの一実施の形態を示すシステム構成図である。
【図２】このリアルタイムトレースシステムにおけるターゲット内の更に詳細な構成を示す図である。
【図３】ターゲット内のＣＰＵにおけるデバッグ割り込み制御状態レジスタのフォーマットを示す図である。
【図４】ターゲット内のＣＰＵにおける命令比較レジスタのフォーマットを示す図である。
【図５】ターゲット内のＣＰＵにおけるデータ比較レジスタのフォーマットを示す図である。
【図６】ターゲット内のＣＰＵにおけるデータ属性設定レジスタのフォーマットを示す図である。
【図７】ターゲット内のＣＰＵにおけるデータ属性状態設定レジスタのフォーマットを示す図である。
【図８】ターゲット内のＲＡＭ中に作成されるパラメータ領域のフォーマットを示す図である。
【図９】ターゲット内のＲＡＭ中に作成されるトレース領域のフォーマットを示す図である。
【図１０】ＲＯＭモニタのコマンド実行処理（プログラム）に従ってＣＰＵが実行する処理のフローチャートである。
【図１１】ＲＯＭモニタのデバッグ割り込みハンドラ処理（プログラム）に従ってＣＰＵが実行する処理のフローチャートである。
【図１２】デバッグ端末とのシリアルインタフェースを有するターゲットにＲＯＭモニタを搭載したリアルタイムトレースシステム（具体例１）を示す図である。
【図１３】ホスト側からのリアルタイム検証の手順を示すフローチャートである。
【図１４】トレース種別をリピートアクセスとした場合のパラメータ領域へのパラメータ（リアルタイムトレース条件）の設定例を示す図である。
【図１５】トレース種別をリピートアクセスとした場合のトレース領域へのリアルタイムトレースデータの格納例を示す図である。
【図１６】トレース種別をリピートアクセスとした場合のホスト側でのトレース結果の表示例を示す図である。
【図１７】リアルタイムトレースを行おうとするアラーム監視システムを例示する図である。
【図１８】このアラーム監視システムのアラーム検出器にＲＯＭモニタを搭載し装置内バスにホストを接続したリアルタイムトレースシステム（具体例２）を示す図である。
【図１９】トレース種別をシーケンシャル命令とした場合のパラメータ領域へのパラメータ（リアルタイムトレース条件）の設定例を示す図である。
【図２０】トレース種別をシーケンシャル命令とした場合のトレース領域へのリアルタイムトレースデータの格納例を示す図である。
【図２１】トレース種別をシーケンシャル命令とした場合のホスト側でのトレース結果の表示例を示す図である。
【図２２】従来のインサーキットエミュレータを用いたデバッガシステムを示す図である。
【符号の説明】
【０１１５】
１…ホスト、３…ターゲット、４…シリアル回線、５…デバッグ端末、６…シリアル回線、７…アラーム監視ステム、１１…入力装置、１３…出力装置、１４…シリアルインタフェース、３１…ＣＰＵ、３２…タマニット、３３…ＲＯＭ、３４…ＲＡＭ、３５…シリアインタフェース、５１…入力装置、５２…シリアルインタフェース、５３…表示装置、７１…アラーム監視ホスト、７２（７２−１，７２−２，７２−３）…アラーム検出器、７３…装置内バス、３１１…デバッグ割りみ制御状態レジスタ、３１２…命令比較レジスタ、３１３…データ比較レジスタ、３１４…データ属性設定レジスタ、３１５…データ属性状態レジスタ、３３１…ＲＯＭモニタ、３３１１…コマンド実行処理、３３１２…デバッグ割り込みハンドラ処理、３４１…パラメータ領域、３４２…トレース領域、３１１…デバッグ割込み制御フィールド、３１１２…デバッグ割り込み状態フィールド、３１２１…命令アドレスフィールド、３１３１…データアドレスフィールド、３１４１…アクセス属性設定フィールド、３１５１…アクセス属性状態フィールド、３４１１…トレース種別、３４１２…トレース対象１命令アドレス、３４１３…トレース対象１データアドレス、３４１４…トレース対象１アクセス属性、３４１５…トレース対象２命令アドレス、３４１６…トレース対象２データアドレス、３４１７…トレース対象２アクセス属性、３４１８…トレース領域開始アドレス、３４１９…トレース領域終了アドレス、３４２１…トレース結果アドレス、３４２２…トレース結果データ、３４２３…トレース結果属性、３４２４…タイムスタンプ値。
【図１】
2006323726.tif 000003
【図２】
2006323726.tif 000004
【図３】
2006323726.tif 000005
【図４】
2006323726.tif 000006
【図５】
2006323726.tif 000007
【図６】
2006323726.tif 000008
【図７】
2006323726.tif 000009
【図８】
2006323726.tif 000010
【図９】
2006323726.tif 000011
【図１０】
2006323726.tif 000012
【図１１】
2006323726.tif 000013
【図１２】
2006323726.tif 000014
【図１３】
2006323726.tif 000015
【図１４】
2006323726.tif 000016
【図１５】
2006323726.tif 000017
【図１６】
2006323726.tif 000018
【図１７】
2006323726.tif 000019
【図１８】
2006323726.tif 000020
【図１９】
2006323726.tif 000021
【図２０】
2006323726.tif 000022
【図２１】
2006323726.tif 000023
【図２２】
2006323726.tif 000024