(57)【要約】【課題】ハードウェアブレーク機能およびハードウェアトレース機能を有しないマイクロコンピュータのＲＯＭに書き込まれたプログラムをデバッグする方法を提供する。【解決手段】ブレークポイントの設定をデバッガでするのではなく、ソースプログラムをコンパイルする段階でトラップ命令を予めプログラム中のブレークポイントに挿入しておいて、プログラムをメモリに書き込み、ブレークポイントでブレークさせる。また、タイマ割込みを利用することによりプログラムをトレース実行させる。【選択図】　図１
2004013880.tif 000002
【特許請求の範囲】
【請求項１】
プログラムのブレークポイントにトラップ命令を書き込んでプログラムをブレークさせるブレーク方法において、前記トラップ命令のプログラムへの書き込みを、デバッグを開始する前に、ソースプログラムの翻訳段階でおこなっておくことを特徴とするプログラムのブレーク方法。
【請求項２】
プログラムを１命令ずつ実行させるトレース方法において、プログラムを１命令実行後に停止させるためにタイマ割込みを発生させることを特徴とするプログラムのトレース方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】本発明は、マイクロコンピュータを利用したシステム、特に小型のマイクロコンピュータを利用した組み込みシステムにおいてプログラムをデバッグするデバッグ方法に関する。特にデバッグ方法の内、ブレーク方法とトレース方法に関する。
【０００２】
【従来の技術】図２に従来例を示す。従来例は、一般にリモートデバッグと呼ばれるシステムである。ターゲットシステム２３のＲＯＭ２６にモニタ２５を組み込み、ホストコンピュータ２２上のデバッガ２１がモニタ２５とインターフェース２９を介して通信する。ＣＰＵ２４はマイクロコンピュータ内の中央演算ユニットである。
【０００３】ユーザプログラム２７はＲＡＭ２８に格納されるものとする。
【０００４】ホストコンピュータ２２はモニタ２５に対してコマンドを送信し、モニタ２５はそのコマンドを受信し、ブレークおよびトレースの処理を実行する。
【０００５】モニタ２５はブレークコマンドに対しては、ブレークポイントのアドレスをレジスタに格納してＣＰＵ２４にアドレス一致例外を発生させ、ユーザプログラム２７からモニタ２５に制御を移し、ブレーク処理を行う。これをハードウェアブレークという。
【０００６】ハードウエアブレークの機能がないマイクロコンピュータに対しては、モニタ２５がブレークポイントに例外を発生させるトラップ命令をユーザプログラム２７中に書き込み、ユーザプログラム２７に例外を発生させモニタ２５に制御を移し、ブレーク処理を行い、同処理が終了した後、前記トラップ命令を元の命令に戻す。これをソフトウェアブレークという。
【０００７】モニタ２５はトレースコマンドに対しては、マイクロコンピュータが有しているトレース機能を使うためＣＰＵ２４をトレースモードに遷移させ、ユーザプログラム２７をトレース実行させる。トレースモードがないマイクロコンピュータ対しては０００６で説明した方法により１命令先のアドレスにブレークポイントを設定して、ユーザプログラム２７が１命令実行した時点で例外を発生させ、これを繰り返すことにより、ユーザプログラム２７をトレース実行させる。
【発明が解決しようとする課題】
【０００８】以上の説明のとおり、従来の方法では、ブレークおよびトレースを実現するためにはマイクロコンピュータがトレースモードあるいはアドレス一致例外を発生させる機能を有していること、あるいは外部にそれらのハードウェア回路を有していることが条件となる。またこれらの条件が満たされない場合はトラップ命令をユーザプログラム内に書き込むため、プログラムがＲＡＭなどの短時間でしかも容易に書き換えられるメモリに格納されている必要があった。
【０００９】しかし、組み込みシステムに利用されるマイクロコンピュータシステムなどは、トレースモードあるいはアドレス一致例外を発生させる機能を有していない場合が多く、しかもプログラムは短時間で容易に書き換えられないＲＯＭなどのメモリに格納されている場合も多い。従って従来のデバッグシステムでは前記マイクロコンピュータに対して、ブレークやトレースを利用した高度なデバッグは不可能であった。
【００１０】そこで本発明はこのようなシステムに対してブレークおよびトレースを使ったデバッグシステムを提供しようとするものである。
【００１１】
【課題を解決するための手段】トレースモードおよびアドレス一致例外を発生させることができないマイクロコンピュータに対して、従来の方法は、ユーザプログラムをメモリに格納後、デバッガがモニタを介してメモリ上のブレークポイントにトラップ命令を書き込んでいた。これを変更して、ユーザプログラムをメモリに格納する前に、予めコンパイラまたはアセンブラによって機械語プログラム中にトラップ命令を埋め込み、トラップ命令が含まれた前記機械語プログラムをメモリに格納する。
【００１２】こうすることにより、デバッグ中はメモリに対してトラップ命令の書き込み動作が行われないため、ＲＯＭに対してもユーザプログラムのブレークが可能となった。
【００１３】近年はテキストエディタ、コンパイラ、デバッガが統一された統合開発環境が普及しており、ブレークポイントの設定を必ずしもデバッガに行わせる必要はなく、コンパイル段階でブレークポイントを設定しても使用者の利便性が大きく損なわれることはない。
【００１４】トレースの問題を解決するために、タイマ割込みを利用した。モニタはホストコンピュータから送られるトレースコマンドに対して、ユーザプログラムの次の１命令実行中にタイマ割込みが発生するようにタイマのカウント値を設定し、１命令実行後にタイマ割込みを発生させ、これを繰り返すことによって、ユーザプログラムをトレース実行させる。これによりアドレス一致例外を発生させることができないマイクロコンピュータに対してもトレースの機能が利用できることになった。
【００１５】近年はワンチップマイクロコンピュータが普及し、ワンチップの中に多くの機能を内蔵しており、タイマ機能も基本的機能として複数チャンネル含まれることが多くなった。したがってデバッグのためタイマ機能を１チャンネル使用したとしても使用者の利便性が大きく損なわれることはない。
【００１６】
【発明の実施の形態】以下、本発明の実施の形態を図１、図３、および図４を使って説明する。
【００１７】図１はソースプログラムの作成から最終的な機械語プログラムの作成までの流れを表したものである。
【００１８】テキストエディタ１１はソースプログラムを作成するためのものである。本発明の使用者はソースプログラム１３のブレークさせたい場所に、それを表すキーワード例えばＢＲＥＡＫを書き込む。あるいはテキストエディタ１１のマクロ機能を利用してＢＲＥＡＫを書き込む。（ブレーク挿入手段１２）
【００１９】コンパイラ１４はソースプログラム１３をコンパイルする際にキーワードＢＲＥＡＫをトラップ命令に変換する。（トラップ命令挿入手段１５）なお、この変換はコンパイル時にデバッグオプションが指定された場合のみ行い、それ以外は無視する。
【００２０】リンカ１８はコンパイラ１４によってコンパイルされた機械語プログラム１６とモニタ１７とをリンクして最終的な機械語プログラム１９を作成する。
【００２１】機械語プログラム１９はＲＯＭライタによって図３のターゲットシステム３３のＲＯＭ３６に書き込まれる。
【００２２】図３はターゲットシステム３３上のユーザプログラム３７をホストコンピュータ３２上のデバッガ３１によってデバッグするシステムを表した図である。
【００２３】ターゲットシステム３３は起動後、最初にモニタ３５がコールされ、ホストコンピュータ３２上のデバッガ３１と初期化のための通信をインターフェース３９を介して行う。
【００２４】ホストコンピュータ３２から送信される実行コマンドに対して、モニタ３５はユーザプログラムのレジスタやスタックなどのコンテキストをメモリに保存されている状態から復帰させ、ユーザプログラム３７に制御を移す。
【００２５】ユーザプログラム３７実行中に、ＣＰＵ３４がコンパイラ１４によって書き込まれたトラップ命令に出会うと、例外が発生し、制御がモニタ３５に移動する。モニタ３５はユーザプログラム３７のコンテキストをメモリに保存して、モニタ独自の処理を行う。尚、デバッガ３１は使用者が不要と判断したブレークポイントについてはキャンセルすることができるような機能を有し、使用者は予めブレークポイントをキャンセルしておくことができる。
【００２６】モニタ３５はユーザプログラム３７が停止した際、レジスタや変数の値をホストコンピュータに送信する。ホストコンピュータ３２上のデバッガ３１はそれを画面に表示し、ユーザプログラム３７が停止したソースプログラム上の位置を示す。
【００２７】アセンブラレベルのトレース要求に対してモニタ３５は、ユーザプログラム３７の次の１命令の実行時間内に割込み要求が発生するように調節されたタイマ割込みを設定して、制御をユーザプログラム３７に移す。ユーザプログラム３７は１命令実行後に前記タイマ割込みの発生により制御が再びモニタ３５に戻る。従ってトレース実行が可能となる。
【００２８】Ｃ言語レベルのトレース要求に関してはモニタ３５はアセンブラレベルのトレースを繰り返し、Ｃ言語レベルの次の行に該当するアドレスに達した時点でトレースの繰り返しを終了する。
【００２９】以上の動作を繰り返すことにより、使用者はブレーク、トレースを含むソースレベルのデバッグを行うことができる。
【００３０】００２７で説明したアセンブラレベルのトレース処理に関して、図４を使いさらに詳しく説明する。図４はモニタからユーザプログラムへ制御が移る際の命令の実行過程とタイマ割込みの様子を表した図である。
【００３１】図４中の４１、４２、４３、４４はマイクロコンピュータの命令であり、カウンタスタート命令４１と復帰命令４２がモニタ側の命令である。第１命令４３と第２命令４４はユーザプログラム側の命令である。モニタはタイマ割込みのカウント値を、第１命令４３の実行中にタイマ割込み要求が発生するように設定しておく、そうすると割込み要求信号４５は第１命令４３実行中にイネーブル状態になり、実際の割込み発生信号４６は第１命令４３の実行が終了するのを待ってイネーブル状態となる。
【００３２】ユーザプログラムはタイマ割込みの発生によって第１命令４３だけが実行され第２命令４４は実行されない。以上を繰り返すことによりユーザプログラムは１命令ごとに実行される。従ってトレース実行が可能となる。
【００３３】
【発明の効果】以上説明したように、本発明によれば、マイクロコンピュータがトレースモードやアドレス一致による例外などのデバッグのための特別な機能を有していなく、かつそれらの機能を実現する特別な回路を外部に接続することなく、かつプログラムがＲＯＭに格納されている場合であっても、つまり従来のデバッグ方法ではブレークやトレースが不可能であったマイクロコンピュータに対してもブレークおよびトレースを含むソースレベルデバッグが可能となる。
【００３４】特にマイクロコンピュータによる組み込みシステムの分野においては、デバッグのためのハードウェア的機能がないマイクロコンピュータが多く本発明は有効である。
【図面の簡単な説明】
【図１】ソースプログラムから機械語プログラムを作成する過程を説明した図である。
【図２】従来のデバッグ方法を説明する図である。
【図３】本発明のデバッグ方法を説明する図である。
【図４】本発明のうち、トレース方法を説明する図である。
【符号の説明】
１１　テキストエディタ
１２　ブレーク挿入手段
１３　ソースプログラム
１４　コンパイラ
１５　トラップ命令挿入手段
１６　機械語プログラム
１７　モニタ
１８　リンカ
１９　機械語プログラム
２１　デバッガ
２２　ホストコンピュータ
２３　ターゲットシステム
２４　ＣＰＵ
２５　モニタ
２６　ＲＯＭ
２７　ユーザプログラム
２８　ＲＡＭ
２９　インターフェース
３１　デバッガ
３２　ホストコンピュータ
３３　ターゲットシステム
３４　ＣＰＵ
３５　モニタ
３６　ＲＯＭ
３７　ユーザプログラム
３８　ＲＡＭ
３９　インターフェース
４１　カウンタスタート命令
４２　復帰命令
４３　第１命令
４４　第２命令
４５　割込み要求信号
４６　割込み発生信号
【図１】
2004013880.tif 000003
【図２】
2004013880.tif 000004
【図３】
2004013880.tif 000005
【図４】
2004013880.tif 000006