(57)【要約】【目的】  本発明はソフトウェアブレークポイントの置き戻しによる時間遅延を少なくしたデバッグを実現することを目的とする。【構成】  ホストコンピュータ３０はコマンドをＩＣＥ２０に発行し、ＩＣＥ２０はソフトウェアブレークポイントの追加・削除のコマンドがある事を確認したら、メモリ１３の該当する命令についてソフトウェアブレークポイントへ置き替えるよう制御する。その後、ユーザはホストコンピュータ３０を使用してユーザプログラム実行の発行要求を行う。ＩＣＥ２０はこの発行要求がソフトウェアブレークポイントからの実行要求であった場合は、ホストコンピュータ３０に記憶された本来の命令群より、対象となる実行開始位置に本来存在していた命令を読み込み、再実行開始命令設定レジスタ１４に設定する。ＣＰＵコア１２は再実行開始命令設定レジスタ１４からの命令を読み込み、終了後命令バス切替回路１５を操作し、次命令からはメモリ１３から命令を順次読み込み、実行する。【選択図】        図１
2005267445.tif 000002
【特許請求の範囲】
【請求項１】
プログラムにソフトウェアブレークポイントが挿入されることにより、プログラムが停止し、デバッグ処理が行われるマイクロプロセッサであって、
前記プログラムを格納するメモリと、
前記プログラムの命令の内、前記ソフトウェアブレークポイントに置き替わる前に存在していた命令を格納するレジスタと
を有することを特徴とするマイクロプロセッサ。
【請求項２】
プログラムにソフトウェアブレークポイントが挿入されることによりプログラムが停止し、デバッグ処理が行われるマイクロプロセッサであって、
前記プログラムを格納するメモリと、
前記プログラムの命令の内、前記ソフトウェアブレークポイントに置き替わる前に存在していた命令を格納するレジスタと、
前記レジスタに格納された命令の読み込みの後、前記メモリに格納される命令の内、該ソフトウェアブレークポイントが挿入された後の命令を読み込む制御部と
を有することを特徴とするマイクロプロセッサ。
【請求項３】
プログラムにソフトウェアブレークポイントを挿入することによりプログラムを停止させてデバッグ処理を行わせるエミュレータであって、
前記ソフトウェアブレークポイントに置き替わる前に存在していた命令の読み込みの終了を認識した後、前記プログラムの読み込みへ切り替える制御を行う制御部
を有することを特徴とするエミュレータ。
【請求項４】
プログラムにソフトウェアブレークポイントを挿入することによりプログラムを停止させてデバッグ処理を行わせるエミュレータであって、
前記プログラムを格納するメモリと、
前記プログラムの命令の内、前記ソフトウェアブレークポイントに置き替える前に存在していた命令を格納するレジスタと
を有することを特徴とするエミュレータ。
【請求項５】
プログラムにソフトウェアブレークポイントを挿入することによりプログラムを停止させてデバッグ処理を行わせるエミュレータであって、
前記プログラムを格納するメモリと、
前記プログラムの命令の内、前記ソフトウェアブレークポイントに置き替える前に存在していた命令を格納するレジスタと、
前記レジスタに格納された命令を読み込んだ後、前記メモリに格納される命令の内、該ソフトウェアブレークポイントを挿入した後の命令を読み込む制御部と
を有することを特徴とするエミュレータ。
【請求項６】
エミュレータからの制御により、マイクロプロセッサで実行されるプログラムにソフトウェアブレークポイントを挿入し、プログラムを停止させてデバッグ処理を行うデバッグシステムであって、
前記マイクロプロセッサは、
前記プログラムを格納するメモリと、
前記プログラムを格納するメモリと、
前記プログラムの命令の内、前記ソフトウェアブレークポイントに置き替わる前に存在していた命令を格納するレジスタと
前記レジスタに格納された命令、および該メモリに格納された命令を選択的に実行する第１の制御部と、
を有し、
前記エミュレータは、
前記マイクロプロセッサのレジスタに格納された命令をステップ実行により実行するように前記第１の制御部を制御するとともに、前記ステップ実行によるブレーク後、該第１の制御部の実行する命令の読み込み先を該レジスタから前記メモリへ切り替えるように制御する第２の制御部と
を有することを特徴とするデバッグシステム。
【請求項７】
プログラムにソフトウェアブレークポイントが挿入されることによりプログラムが停止し、デバッグ処理が行われるマイクロプロセッサであって、
前記プログラムを格納するメモリと、
前記プログラムの命令の内、前記ソフトウェアブレークポイントに置き替わる前に存在していた命令を格納するレジスタと、
前記レジスタに格納された命令のステップ実行の後、前記メモリに格納される命令の内、該ソフトウェアブレークポイントが挿入された後の命令を実行する制御部と
を有することを特徴とするマイクロプロセッサ。
【請求項８】
プログラムにソフトウェアブレークポイントを挿入することによりプログラムを停止させ、デバッグ処理を行わせるエミュレータであって、
前記ソフトウェアブレークポイントを挿入した命令からプログラムを実行させる場合に、ステップ実行により該命令を実行させる制御部を
有することを特徴とするエミュレータ。
【請求項９】
マイクロプロセッサのメモリに格納させるプログラムにソフトウェアブレークポイントを挿入させることによりプログラムを停止させ、デバッグ処理を行わせるよう制御する、コンピュータで実行可能なソフトウェアであって、
前記プログラムの命令の内、前記ソフトウェアブレークポイントに置き替える前に存在していた命令を、前記マイクロプロセッサのレジスタに格納させるステップと、
前記レジスタの命令をステップ実行により実行させるステップと
前記ステップ実行によるブレーク後、前記メモリに格納されたプログラムの命令を実行するように制御するステップと
を有することを特徴とするソフトウェア。
【請求項１０】
マイクロプロセッサのメモリに格納させるプログラムにソフトウェアブレークポイントを挿入させることによりプログラムを停止させ、デバッグ処理を行わせるように制御するソフトウェアが格納された、コンピュータで読み取り可能な記憶媒体であって、
前記プログラムの命令の内、前記ソフトウェアブレークポイントに置き替える前に存在していた命令を、前記マイクロプロセッサのレジスタに格納させるステップと、
前記レジスタの命令をステップ実行により実行させるステップと、
前記ステップ実行によるブレーク後、前記メモリに格納されたプログラムの命令を実行するように制御するステップと
を有することを特徴とするソフトウェアが格納された記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイコンを用いたシステムのデバッグ支援システムおよびシステムを構成するマイクロプロセッサ、エミュレータ、並びにシステムを制御するソフトウェアおよびプログラムが記憶された記憶媒体に係わり、特にプログラム中にソフトウェアブレークポイントが挿入しプログラムの実行を停止させてデバッグ処理を行うものに関する。
【背景技術】
【０００２】
ソフトウェアの作成作業において、プログラムの誤り(バグ)を検出して修正する、いわゆるデバッグを行うことは必要不可欠である。このデバッグ作業を行うために、プログラムを連続で実行(連続実行)したり、1命令ずつ実行(ステップ実行)するための実行処理や、プログラムの実行を停止(ブレーク)処理する環境が必要となる。ブレークにはユーザがプログラム実行中に強制的にプログラムを停止させる方式や、ソフトウェアブレークポイントと呼ばれる特殊な命令をプログラム中の任意の箇所に挿入し、このソフトウェアブレークポイントを実行させることで任意の位置でプログラムを停止(ブレーク)させる等いくつか方式がある。プログラムの実行、停止(ブレーク)を行うことで、プログラム動作状況を確認し実行されたプログラムに誤りがあればユーザはこれの修正を行っている。
【０００３】
ここで、従来のソフトウェアブレークポイントを使用したデバックシステムの例を図  Ａを使用して説明する。図１１において、１１０は電子機器の制御用などで利用される小型の組み込み用マイクロプロセッサであるＭＣＵ(Micro Controller Unit)、１１１はＩＣＥ１２０とＣＰＵコア１１２との間に立ち、プログラムの実行や停止(ブレーク)、MCU
１１１内部のレジスタやメモリ、各種Ｉ／Ｏへのアクセスを制御するデバッグ回路、１１２は主演算を行うＣＰＵ(Central Processing Unit)コア、１１３はデバッグを行うプログラムを記憶するメモリ、１２０はMCUで実行するプログラムをデバッグするためにデバッグ回路を持ったMCU１１０に装着して使う、特別に作られたプロセッサであるＩＣＥ(In-Circuit Emulator)、１３０はデバッグユーザからのコマンドを入力するホストコンピュータをそれぞれ示す。
【０００４】
デバッグ作業を行うユーザからホストコンピュータ１３０を介してソフトウェアブレークポイント挿入と入力されたコマンドを受け、ＩＣＥ１２０はコマンドに対応する制御信号をＭＣＵ１１０に送る。ＭＣＵ１１０内のデバッグ回路１１１は制御信号の指示に従って、メモリ１１３に記憶されているプログラム中であって、制御信号により指定されたアドレスにソフトウェアブレークポイントの挿入を行う。ＩＣＥ１２０は更に挿入したソフトウェアブレークポイントの実行に基づくプログラム停止中に、デバッグ作業を行うユーザからホストコンピュータ１３０を介してデバッグに必要なレジスタやメモリの内容を参照するコマンドを受け、コマンドに対応する制御信号をＭＣＵ１１０に送る。ＭＣＵ１１０内のデバッグ回路１１１は制御信号の指示に従って、必要なレジスタやメモリの内容などをＩＣＥ１２０に送信する。ＩＣＥ１２０はホストコンピュータ１３０に送信しホストコンピュータ１３０はその情報をユーザに表示する。この情報をもとにユーザはその停止前に実行されたプログラム中の誤りを検出して修正(デバッグ)を行う。
【０００５】
ここで、ソフトウェアブレークポイントの挿入法について説明する。主に以下の2つの手法が存在する。
（１）の手法
指定されたアドレスにソフトウェアブレークポイントを記述し、そのアドレスに元々あった命令とそれ以降の命令を、ソフトウェアブレークポイントが書き込まれたアドレス分だけそれぞれ後ろにずらす手法。
（２）の手法
指定されたアドレスにある命令をソフトウェアブレークポイントと置き替える手法。
（１）の手法では、ソフトウェアブレークポイント以降の各命令のアドレス全体をずらしてしまうので、絶対アドレスで指定されたジャンプ命令などはそのまま実行することができず、ソフトウェアブレークポイントを書き込んだ後に、アドレス全体を再調整すべく、再コンパイルなどを施す必要がある。また、再コンパイルした場合であっても、タイミングがずれたことによるパフォーマンスの低下の問題が発生する。即ち、ソフトウェアブレークポイントを挿入した分だけ命令が増えたプログラムになっているため、ハードウェアとの協調性を必要としているソフトウェアの場合には、その増加した命令の分タイミングがずれることになり、ソフトウェアブレークポイント挿入前の本来のプログラムと同等の動きを再現することは極めて難しいという問題である。更に、ソフトウェアブレークポイント挿入前のプログラムが、メモリ１１３の総容量に近い量である場合、ソフトウェアブレークポイントを書き込める数が極めて少なくなる場合や、状況によっては全く書き込めないという問題もあった。（１）の手法にはこのような問題が存在するため、現在（２）の手法が多用されている。
（２）の手法は、ユーザよりプログラム実行の要求を受けると、まずメモリ１１３内の指定されたアドレスにある命令をソフトウェアブレークポイントと置き替える。
【０００６】
ソフトウェアブレークポイント挿入後、ユーザプログラムの実行を開始し、そのソフトウェアブレークポイントがＣＰＵコア１１２により実行されることにより、ブレーク処理ルーチンを経由して、アクセス権がＩＣＥ１２０側に渡るとともに、ホストコンピュータ１３０を経由してユーザにその旨が通知される。アクセス権がＩＣＥ１２０側に渡った時点で、ユーザはＭＣＵ１１０のメモリ１１３やレジスタ(図示せず)を確認したり、変更を行ったりすることができる。
【０００７】
（２）の手法では（１）の手法のような問題は発生しないが、プログラムの本来の命令をソフトウェアブレークポイントに置き替えてしまうため、ソフトウェアブレークポイントに置き替えたアドレスからプログラムを実行する際には、ソフトウェアブレークポイントの置き替え前に存在した命令に置き戻してからプログラムを実行する必要がある。
【０００８】
従来技術としてソフトウェアブレークポイントを挿入する方法として以下の特許文献が存在する。
【特許文献１】特開平７−２５３９０７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、（２）の手法においても次の問題が生じている。即ち、近年、製品開発後すぐに商品化する事例が増えているため、製品としてリリースする段階でもマスクＲＯＭを起す時間を省くために、ＭＣＵ１１０内のメモリ１１３として、ＦＬＡＳＨメモリをインプリメントし、デバッグが完了した時点でプログラムをＦＬＡＳＨメモリに書き込み、出荷するケースが増えている。ユーザにとっては製品出荷時の環境でのデバッグを希望する事が多く、ホストコンピュータからＦＬＡＳＨメモリにプログラムをダウンロードしデバッグを行うことが日常的に行われている。
【００１０】
このＦＬＡＳＨメモリは、記憶データの消去や、書き込みは、必要なデータ単位ではなく、ＦＬＡＳＨメモリを構成するセルの単位で行う必要がある。これはソフトウェアブレークポイントの置き替え、あるいは置き戻しの際に、対象となるソフトウェアブレークポイントだけでなく、その周辺の本来消去・書き込みをする必要のない命令までも一括して消去・書き込みを行わなければならず、作業に大きな時間がかかることを意味している。ブログラムの実行開始、ソフトウェアブレークポイントによるプログラム停止を繰り返して行うデバッグ作業にとって、ソフトウェアブレークポイントの置き替え、置き戻しの度に時間を費やすことによる作業上のインパクトは計り知れない問題である。
【００１１】
また、上記の問題は、ＦＬＡＳＨメモリに限らず、データ単位ではなく、ある領域単位でデータの消去、書き込みを行うメモリであれば、同様の問題が生ずる。
【００１２】
従って、本発明はソフトウェアブレークポイントの置き戻しによる時間遅延を少なくしたデバッグを実現することを目的とする。
【課題を解決するための手段】
【００１３】
上記目的は、プログラムにソフトウェアブレークポイントが挿入されることにより、プログラムが停止し、デバッグ処理が行われるマイクロプロセッサであって、前記プログラムを格納するメモリと、前記プログラムの命令の内、前記ソフトウェアブレークポイントに置き替わる前に存在していた命令を格納するレジスタとを有するマイクロプロセッサによって達成される。
【００１４】
また、上記目的は、プログラムにソフトウェアブレークポイントが挿入されることによりプログラムが停止し、デバッグ処理が行われるマイクロプロセッサであって、前記プログラムを格納するメモリと、前記プログラムの命令の内、前記ソフトウェアブレークポイントに置き替わる前に存在していた命令を格納するレジスタと、前記レジスタに格納された命令の読み込みの後、前記メモリに格納される命令の内、該ソフトウェアブレークポイントが挿入された後の命令を読み込む制御部とを有するマイクロプロセッサによって達成される。
【００１５】
また、上記目的は、プログラムにソフトウェアブレークポイントを挿入することによりプログラムを停止させてデバッグ処理を行わせるエミュレータであって、前記ソフトウェアブレークポイントに置き替わる前に存在していた命令の読み込みの終了を認識した後、前記プログラムの読み込みへ切り替える制御を行う制御部を有するエミュレータによって達成される。
【００１６】
また、上記目的は、プログラムにソフトウェアブレークポイントを挿入することによりプログラムを停止させてデバッグ処理を行わせるエミュレータであって、前記プログラムを格納するメモリと、前記プログラムの命令の内、前記ソフトウェアブレークポイントに置き替える前に存在していた命令を格納するレジスタとを有するエミュレータによって達成される。
【００１７】
また、上記目的は、プログラムにソフトウェアブレークポイントを挿入することによりプログラムを停止させてデバッグ処理を行わせるエミュレータであって、前記プログラムを格納するメモリと、前記プログラムの命令の内、前記ソフトウェアブレークポイントに置き替える前に存在していた命令を格納するレジスタと、前記レジスタに格納された命令を読み込んだ後、前記メモリに格納される命令の内、該ソフトウェアブレークポイントを挿入した後の命令を読み込む制御部とを有するエミュレータによって達成される。
【００１８】
また、上記目的は、エミュレータからの制御により、マイクロプロセッサで実行されるプログラムにソフトウェアブレークポイントを挿入し、プログラムを停止させてデバッグ処理を行うデバッグシステムであって、前記マイクロプロセッサは、前記プログラムを格納するメモリと、前記プログラムを格納するメモリと、前記プログラムの命令の内、前記ソフトウェアブレークポイントに置き替わる前に存在していた命令を格納するレジスタと  前記レジスタに格納された命令、および該メモリに格納された命令を選択的に実行する第１の制御部とを有し、前記エミュレータは、前記マイクロプロセッサのレジスタに格納された命令をステップ実行により実行するように前記第１の制御部を制御するとともに、前記ステップ実行によるブレーク後、該第１の制御部の実行する命令の読み込み先を該レジスタから前記メモリへ切り替えるように制御する第２の制御部とを有するデバッグシステムによって達成される。
【００１９】
また、上記目的は、プログラムにソフトウェアブレークポイントが挿入されることによりプログラムが停止し、デバッグ処理が行われるマイクロプロセッサであって、前記プログラムを格納するメモリと、前記プログラムの命令の内、前記ソフトウェアブレークポイントに置き替わる前に存在していた命令を格納するレジスタと、前記レジスタに格納された命令のステップ実行の後、前記メモリに格納される命令の内、該ソフトウェアブレークポイントが挿入された後の命令を実行する制御部とを有するマイクロプロセッサによって達成される。
【００２０】
また、上記目的は、プログラムにソフトウェアブレークポイントを挿入することによりプログラムを停止させ、デバッグ処理を行わせるエミュレータであって、前記ソフトウェアブレークポイントを挿入した命令からプログラムを実行させる場合に、ステップ実行により該命令を実行させる制御部を有するエミュレータによって達成される。
【００２１】
また、上記目的は、マイクロプロセッサのメモリに格納させるプログラムにソフトウェアブレークポイントを挿入させることによりプログラムを停止させ、デバッグ処理を行わせるよう制御する、コンピュータで実行可能なソフトウェアであって、前記プログラムの命令の内、前記ソフトウェアブレークポイントに置き替える前に存在していた命令を、前記マイクロプロセッサのレジスタに格納させるステップと、前記レジスタの命令をステップ実行により実行させるステップと前記ステップ実行によるブレーク後、前記メモリに格納されたプログラムの命令を実行するように制御するステップとを有するソフトウェアによって達成される。
【００２２】
また、上記目的は、マイクロプロセッサのメモリに格納させるプログラムにソフトウェアブレークポイントを挿入させることによりプログラムを停止させ、デバッグ処理を行わせるように制御するソフトウェアが格納された、コンピュータで読み取り可能な記憶媒体であって、前記プログラムの命令の内、前記ソフトウェアブレークポイントに置き替える前に存在していた命令を、前記マイクロプロセッサのレジスタに格納させるステップと、  前記レジスタの命令をステップ実行により実行させるステップと、  前記ステップ実行によるブレーク後、前記メモリに格納されたプログラムの命令を実行するように制御するステップとを有するソフトウェアが格納された記憶媒体によって達成される。
【発明の効果】
【００２３】
本発明によれば、プログラムの置き替え回数を少なくすることにより、時間遅延を少なくしたデバッグを実現することができる。
【発明を実施するための最良の形態】
【００２４】
発明の実施するための最良の形態を、実施例１〜実施例３で説明する。
【実施例１】
【００２５】
本発明の実施例１を図１と図２を使用して説明する。ここではブレーク要因としてソフトウェアブレークポイントを扱っているが、実際のシステムではユーザがプログラム実行を停止させるブレーク方式などさまざまなブレーク要因がある。
【００２６】
図１は本発明のデバッグシステムの実施例１の説明図である。図において、１０はＭＣＵ、１１はＩＣＥ２０とＣＰＵコア１２との間に立ち、プログラムの実行や停止(ブレーク)、MCU１０内部のレジスタやメモリ、各種Ｉ／Ｏへのアクセスを制御するデバッグ回路、１２はＣＰＵコア、１３はプログラムを格納するメモリ、１４はソフトウェアブレークポイントを指定したアドレスからのプログラム実行の際、本来のプログラムの命令が設定される再実行開始命令設定レジスタ、１５はＣＰＵコア１２に接続されている命令バスの接続先をメモリ１３と再実行開始命令設定レジスタ１４との間で切り替える命令バス切替回路、１６は再実行開始命令設定レジスタ１４からのフェッチ終了をデバッグ回路１１に通知したり命令バス切替回路１５の制御を行うフラグを設定するバス切替制御フラグ設定回路、２０はＩＣＥ、３０はホストコンピュータをそれぞれ示す。
【００２７】
図２は実施例１の動作フローを示す図である。まず、ユーザがホストコンピュータ３０を使用してプログラムの実行前の各種操作を行う(Ｓ１)。ホストコンピュータ３０はこれらの操作に対応したコマンドをＩＣＥ２０に発行し、ＩＣＥ２０は各コマンドに対応した制御信号をデバッグ回路１１に出力する。この中にソフトウェアブレークポイントの追加・削除のコマンドがある事を確認した（Ｓ２）場合は、その内容に従ってメモリ１３に記憶されている命令の内、該当するアドレスについてソフトウェアブレークポイントに置き替え、またはソフトウェアブレークポイントの置き戻しを行う(Ｓ３)よう制御信号をデバッグ回路１１に出力し、デバッグ回路１１はそれに従ってメモリ１３の内容を書きかえる。
【００２８】
その後、ユーザはホストコンピュータ３０を使用してユーザプログラムの連続実行やステップ実行の発行要求を行う(Ｓ４)。ＩＣＥ２０はこの発行要求を受け取ると、ソフトウェアブレークポイントからの実行かどうかを確認し(Ｓ５)、ソフトウェアブレークポイントからの実行要求でなかった場合はそのままプログラムの実行(Ｓ１２)に移る。ソフトウェアブレークポイントからの実行要求であった場合は、本来の命令はソフトウェアブレークポイントに置き換わっているので、そのまま実行することができない。そこでホストコンピュータ３０に記憶してある本来の命令群より、対象となる実行開始位置に本来存在していた命令を読み込み、再実行開始命令設定レジスタ１４に設定する(Ｓ６)。具体的な設定の方法については、図３を用いて説明する。
【００２９】
図３は再実行開始命令設定レジスタの設定手法を説明する図である。図２と同一符号を付してあるものは同一部材を示す。
【００３０】
まず、1)ＩＣＥ２０は、ソフトウェアブレークポイントの絶対アドレスをホストコンピュータ３０に送る。2)ホスコトコンピュータ３０には、ソフトウェアブレークポイントが書き込まれた場所に元々存在していた本来の命令群を絶対アドレスとともに保存しており、ＩＣＥ２０から受信した絶対アドレスに対応する本来の命令をＩＣＥ２０に送る。3)ＩＣＥ２０から再実行開始命令設定レジスタ１４にアクセスを行い本来の命令を設定する。
【００３１】
ＩＣＥ２０内部に命令群をあらかじめ蓄えている場合は、ソフトウェアブレークポイントからの再実行と判別した時点で、ＩＣＥ２０内部の命令群から対応する命令を再実行開始命令設定レジスタ１４に本来の命令を設定する。
【００３２】
また、ホストコンピュータ３０上でソフトウェアブレークポイントからの実行かを判別するシステムも実現可能で、この場合は、再実行開始命令設定レジスタ１４に本来の命令を設定するようなコマンドをＩＣＥ２０に発行し、ＩＣＥ２０はそのコマンドに対応した制御信号をデバッグ回路に出力し、デバッグ回路１１はそれに従って再実行開始命令設定レジスタ１４に本来の命令を設定する。その後連続(ステップ)実行を行うコマンドをＩＣＥ２０に発行するようなデバッグシステムを構成する事も可能である。
【００３３】
図１、図２の説明に戻る。次にＭＣＵ１０への連続(ステップ)実行要求前に、ＩＣＥ２０から直接命令バス切替回路１５にアクセスするか、デバッグ回路１１に対応するコマンドを発行する等により命令バス切替回路１５を操作し、ＣＰＵコア１２の命令バスを再実行開始命令設定レジスタ１４に接続する(Ｓ７)。バス切替制御フラグをネゲートする(初期化)を次に行うが、命令バス切替回路１５を再実行開始命令設定レジスタ１４に接続すると同時に初期化することもデバッグ回路１１の構成によっては可能である。
【００３４】
その後、連続(ステップ)実行要求をＭＣＵ１０に対して発行する(Ｓ８)。これを受け、ＣＰＵコア１２は再実行開始命令設定レジスタ１４に設定されている本来の命令を順次フェッチし、実行する(Ｓ９)。
【００３５】
再実行開始命令設定レジスタ１４からのフェッチが終了すると、バス切替制御フラグ設定回路１５よりデバッグ回路１１にバス切替制御フラグがアサートされデバッグ回路１１にフェッチ終了が通知される(Ｓ１０)。デバッグ回路１１で命令バス切替回路１５を制御する場合はＩＣＥ２０にバス切替制御フラグをさらに出力する必要はなく、直接命令バス切替回路１５を制御し、ＣＰＵコア１２の命令バスの接続先をメモリ１３に設定する(Ｓ１１)。
【００３６】
命令バス切替回路１５の制御をＩＣＥ２０が行う場合には、デバッグ回路１１はＩＣＥ  ２０にバス切替制御フラグを出力する。ＩＣＥ２０は命令バス切替回路１５に直接アクセスするか、デバッグ回路１１を通じて命令バス切替回路１５を制御し、ＣＰＵコア１２の命令バスの接続先をメモリ１３に接続する。
【００３７】
ＣＰＵコア１２は次のフェッチから、メモリ１３にある命令を順次フェッチしていく(Ｓ１２)。順次フェッチしていく過程でソフトウェアブレークポイント等ブレーク要因が発生(Ｓ１３)した場合には、ユーザ各種設定(Ｓ１)に戻る。また、ＩＣＥ２０における上記処理の制御は、図示していない制御部の制御によって行われる。
【００３８】
ここで、ステップＳ８，Ｓ１２における命令フェッチの手順を図４を用いて説明する。
【００３９】
図４は、一度にフェッチするバイト数が１バイト、ソフトウェアブレークポイントの命令長が４バイト(可変長)の場合の、命令フェッチの手順を示す図である。
【００４０】
図の左側は元の命令群のアドレスと機械語イメージとニーモニックイメージとの関係が示されており、ホストコンピュータ３０に記憶されているものである。図の右側はメモリ１３に記憶されているアドレスと機械語イメージとニーモニックイメージとの関係が示されている。
【００４１】
ソフトウェアブレークポイント(機械語イメージ“ＸＸＸＸＸＸＸＸ”、ニーモニックイメージ“ＩＮＩＴＥ”)が置かれているＦ０００４番地から実行を開始する場合、図２で説明したステッブＳ６〜Ｓ８の処理により再実行開始命令設定レジスタ１４には、本来の命令“ＢＢＣＣ１２３４”が設定されている。図の例ではバス幅が１バイトという制約があり、一度にフェッチすることができるバイト数は１バイトとなっている。ＣＰＵコア１２は１回目“ＢＢ”をフェッチする。以下同様に２回目で“ＣＣ”、３回目で“１２”、４回目で“３４”をフェッチして再実行開始命令設定レジスタ１４の本来の命令のフェッチは終了となる。再実行開始命令設定レジスタ１４からのフェッチが終わった段階で命令バス切替回路１５の操作によりＣＰＵコア１２の命令バスの接続先がメモリ１３に設定されているので、５回目のフェッチからはメモリ１３のＦ０００８番地の“ＡＡ”から順次フェッチする。
【００４２】
以上は、ソフトウェアブレークポイントの命令長を可変長とした場合の例について説明したが、これを固定長とすると、より簡単な回路構成で実現することができる。
【００４３】
図５は、一度にフェッチするバイト数が１バイト、ソフトウェアブレークポイントの命令長が１バイト固定の場合の、実行開始から命令フェッチの順序を示す図である。
【００４４】
図４と同様に、図の左側は元の命令群のアドレスと機械語イメージとニーモニックイメージとの関係が示されており、ホストコンピュータ３０に記憶されているものである。図の右側はメモリ１３に記憶されているアドレスと機械語イメージとニーモニックイメージとの関係が示されている。
【００４５】
ソフトウェアブレークポイント(機械語イメージ“ＸＸ”、ニーモニックイメージ“ＩＮＩＴＥ”)が置かれているＦ０００４番地から実行を開始する場合、図２で説明したステップＳ６〜Ｓ８の処理により再実行開始命令設定レジスタ１４には、本来の命令“ＢＢ”が設定されている。図の例ではバス幅が１バイトという制約があり、一度にフェッチすることができるバイト数は１バイトとなっている。ソフトウェアブレークポイントが１バイトという固定長の場合、再実行開始命令設定レジスタ１４に本来の命令の“ＢＢ”を設定してＣＰＵコア１２の命令バスの接続先を再実行開始命令設定レジスタ１４に設定する。ＣＰＵコア１２は実行開始直後の一度だけ、再実行開始命令設定レジスタ１４からフェッチする。その語、命令バス切替回路１５を操作し、ＣＰＵコア１２の接続先をメモリ１３に設定する。実行開始から２回目以降のフェッチについては、メモリ１３にあるＦ０００５番地の“ＣＣ”から順次フェッチする。ソフトウェアブレークポイントが可変長である図４の場合と異なり、図５ではソフトウェアブレークポイントが固定長であるので再実行開始命令設定レジスタからフェッチする回数は必ず決まった回数になり、命令バス切替回路１５の操作が単純化される。
【実施例２】
【００４６】
本発明の実施例２を図６と図７を用いて説明する。ここではブレーク要因としてソフトウェアブレークポイントを扱っているが、実際のシステムではユーザがプログラム実行を停止させるブレーク方式などさまざまなブレーク要因がある。
【００４７】
図６は本発明のデバッグシステムの実施例２の説明図である。図において、４０はＭＣＵ、４１はＩＣＥ５０とＣＰＵコア４２との間に立ち、プログラムの実行や停止(ブレーク)、MCU４０内部のレジスタやメモリ、各種Ｉ／Ｏへのアクセスを制御するデバッグ回路、５０はＩＣＥ、５１はＭＣＵ５０のデバッグその他の制御を行う制御回路、５２はメモリ、５３は再実行開始命令設定レジスタ、５４は命令バス切替回路、５５はバス切替制御フラグ、６０はホストコンピュータをそれぞれ示す。
【００４８】
この実施例は、ＩＣＥ５０が本発明の主たる構成を有している例である。ＩＣＥ５０とＭＣＵ４０との間に制御信号の他、命令アドレスや命令バスのＩ／Ｆを持ち、ＩＣＥ５０内部にＭＣＵ５０の実行するプログラムを格納するメモリ５２を有する。
【００４９】
図７は実施例１の動作フローを示す図である。まず、ユーザはホストコンピュータ６０を介してプログラムの実行前の操作を行う(Ｓ２１)。ホストコンピュータ６０はこれらの操作に対応したコマンドをＩＣＥ５０に発行し、ＩＣＥ５０は各コマンドに対応した制御信号をデバッグ回路４１に出力する。この中にソフトウェアブレークポイントの追加・削除のコマンドがあることを確認した（Ｓ２２）場合は、その内容に従って制御回路５１はメモリ５２に記憶されている命令の内、該当するアドレスについてソフトウェアブレークポイントに置き替え、またはソフトウェアブレークポイントの置き戻しを行う(Ｓ２３)。
【００５０】
その後、ユーザはホストコンピュータ３０を使用してユーザプログラムの連続実行やステップ実行の発行要求を行う(Ｓ２４)。制御回路５１はこの発行要求を受け取ると、ソフトウェアブレークポイントからの実行かどうかを確認し(Ｓ２５)、ソフトウェアブレークポイントからの実行要求でなかった場合はそのままプログラムの実行(Ｓ３２)に移る。ソフトウェアブレークポイントからの実行要求であった場合は、本来の命令がソフトウェアブレークポイントに置き換わっているので、そのまま実行することはできない。そこでホストコンピュータ３０に記憶してある本来の命令群より、対象となる実行開始位置に本来存在していた命令を読み込み、再実行開始命令設定レジスタ１４に設定する(Ｓ２６)。具体的な設定の方法は、実施例１と同様のものを利用できる。
【００５１】
次にＭＣＵ４０への連続(ステップ)実行要求前に、制御回路５１は、命令バス切替回路５４にアクセスし、ＭＣＵ４０へ出力する命令を再実行開始命令設定レジスタ５３から出力できるよう、ＩＣＥ５０内部のバスを切り替える(Ｓ２７)。その後、連続(ステップ)実行要求をＭＣＵ４０に対して発行する(Ｓ２８)。これを受け、ＣＰＵコア４２は再実行開始命令設定レジスタ５３に設定されている本来の命令を順次フェッチし実行する(Ｓ２９)。
【００５２】
再実行開始命令設定レジスタ５３からのフェッチが終了(Ｓ３０)すると、バス切替制御フラグ設定回路５５より制御回路５１にバス切替制御フラグがアサートされ、これを受けて制御回路５１は命令バス切替回路５４を操作し、制御回路５１のバスの接続先をメモリ５２に設定する(Ｓ３１)。
【００５３】
また、命令アドレスの変化や命令バスのフェッチの状況を監視して再実行開始命令設定レジスタ５３からのフェッチの終了を検出する(Ｓ３０)場合には、バス切替制御フラグ、バス切替制御フラグ設定回路５５は必要ない。次のＣＰＵコア４２のフェッチまでに命令バス切替回路５４を操作し、ＣＰＵコア４２と通信する制御回路５０のバスの接続先をメモリ５２に設定する(Ｓ３１)。
【００５４】
ＣＰＵコア４２は次のフェッチから、メモリ５２にある命令を順次フェッチしていく(Ｓ３２)。順次フェッチしていく過程でソフトウェアブレークポイント等ブレーク要因が発生(Ｓ３３)した場合には、ユーザ各種操作(Ｓ２１)に戻る。ステップＳ２８，Ｓ３２の命令フェッチの手順は図４，図５と同様のものを利用できる。
【実施例３】
【００５５】
本発明の実施例３を説明する前に、本発明のデバッグシステムの状態遷移を説明する。図８は本発明のデバッグシステムの状態遷移の説明図である。本発明のデバッグシステムでは電源投入直後やユーザからのシステムのリセット要求等を受けて初期化を行うリセットモード、ユーザプログラムを実行しているユーザモード、ユーザプログラムを停止(ブレーク)した状態でＩＣＥよりＭＣＵ内部のレジスタやメモリ等、各種Ｉ／Ｏへのアクセスを行うデバッグモードの３つの状態を遷移するものである。これは本発明の実施例１〜３に共通する状態遷移である。また、ユーザモードはプログラムを実行している状態であるので、ＭＣＵ内の各レジスタやＩ／ＯやメモリはＣＰＵコアの制御下におかれた状態である。ＭＣＵの種類によっては、ＩＣＥからの(一部の)制御信号の入力をマスクをするものまで存在する。デバッグモードはそれとは反対にＭＣＵ内の各レジスタやＩ／ＯやメモリはＩＣＥの制御下におかれた状態である。
【００５６】
まず電源投入直後やユーザからのリセット要求などによるリセット処理が終わりリセット解除を行うとリセットモードからデバッグモードに状態遷移する(図中1))。その後、ユーザからの連続実行、ステップ実行の要求があるとデバッグモードからユーザモードに状態遷移する(図中3))。ユーザプログラム実行中にリセット要因を検出した場合にはリセットモードに戻る(図中6))。
【００５７】
リセット解除後、直ちにユーザプログラムを実行する場合はリセットモードからユーザモードへ直ちに遷移する(図中5))。ユーザプログラム実行中、ソフトウェアブレークポイントやＩＣＥからの強制ブレーク要求、ステップ実行終了に伴うブレーク発生により、ユーザモードからデバッグモードに状態遷移する(図中4))。デバッグモードの際、ユーザからのリセットコマンドの要求があれば、デバッグモードからリセットモードに状態遷移する(図中2))。
【００５８】
以上を踏まえて、本発明の実施例３を説明する。この実施例３は、ＭＣＵ側にメモリ、命令バス切替回路、再実行開始命令設定レジスタが存在する場合であって、かつユーザモード時に再実行開始命令設定レジスタからの本来の命令のフェッチ後、命令バスを切り替えるような制御機能をデバッグ回路に実装できない場合の対処を示した実施例である。ＭＣＵ側に切替機能がないのであれば、ＭＣＵのレジスタやメモリ、各種Ｉ／ＯがＣＰＵの制御下であるユーザモードではなく、ＩＣＥ制御下でのデバッグモードにおいて切り替えようとする実施例である。
【００５９】
この実施例３を図９と図１０を使用して説明する。ここではブレーク要因としてソフトウェアブレークポイントを扱っているが、実際のシステムではユーザがプログラム実行を停止させるブレーク方式などさまざまなブレーク要因がある。
【００６０】
図９は本発明のデバッグシステムの実施例３の説明図である。図において、７０はＭＣＵ、７１はＩＣＥ８０とＣＰＵコア７２との間に立ち、プログラムの実行や停止(ブレーク)、MCU７０内部のレジスタやメモリ、各種Ｉ／Ｏへのアクセスを制御するデバッグ回路、７２はＣＰＵコア、７３はプログラムを格納するメモリ、７４はソフトウェアブレークポイントを指定したアドレスからのプログラム実行の際、本来のプログラムの命令が設定される再実行開始命令設定レジスタ、７５はＣＰＵコア７２に接続されている命令バスの接続先をメモリ７３と再実行開始命令設定レジスタ７４との間で切り替える命令バス切替回路、８０はＩＣＥ、９０はホストコンピュータをそれぞれ示す。
【００６１】
図１０は実施例３の動作フローを示す図である。まず、ユーザがホストコンピュータ９０を使用してプログラムの実行前の各種操作を行う(Ｓ４１)。ホストコンピュータ９０はこれらの操作に対応したコマンドをＩＣＥ８０に発行し、ＩＣＥ８０は各コマンドに対応した制御信号をデバッグ回路７１に出力する。この中にソフトウェアブレークポイントの追加・削除のコマンドがある事を確認した(Ｓ４２)場合は、その内容に従ってメモリ７３に記憶されている命令の内、該当するアドレスについてソフトウェアブレークポイントに置き替え、またはソフトウェアブレークポイントの置き戻しを行う(Ｓ４３)よう制御信号をデバッグ回路７１に出力し、デバッグ回路７１はそれに従ってメモリ７３の内容を書きかえる。
【００６２】
その後、ユーザはホストコンピュータ９０を使用してユーザプログラムの連続実行やステップ実行の発行要求を行う(Ｓ４４)。ＩＣＥ８０はこの発行要求を受け取ると、ソフトウェアブレークポイントからの実行かどうかを確認し(Ｓ４５)、ソフトウェアブレークポイントからの実行要求でなかった場合はそのままプログラムの実行(Ｓ５３)に移る。
【００６３】
ソフトウェアブレークポイントからの実行要求であった場合は、本来の命令はソフトウェアブレークポイントに置き換わっているので、そのまま実行することができない。そこでホストコンピュータ９０に記憶してある本来の命令群より、対象となる実行開始位置に本来存在していた命令を読み込み、再実行開始命令設定レジスタ７４に設定する(Ｓ４６)。具体的な設定の方法は、実施例１と同様のものを利用できる。
【００６４】
次にＭＣＵ７０へのステップ実行要求前に、ＩＣＥ８０から直接命令バス切替回路７５にアクセスするか、デバッグ回路７１に対応するコマンドを発行する等により命令バス切替回路７５を操作し、ＣＰＵコア７２の命令バスを再実行開始命令設定レジスタ７４に接続する(Ｓ４７)。この制御はＩＣＥ８０制御下におかれているのでデバッグモードで行われる。
【００６５】
その後、ステップ実行要求をＭＣＵ７０に対して発行する(Ｓ４８)。これを受け、ＣＰＵコア７２は再実行開始命令設定レジスタ７４に設定されている本来の命令を順次フェッチし、実行するとともに、実行後ブレークする(Ｓ４９)。
【００６６】
ここで、連続実行要求ではなく、ステップ実行要求を利用している意味について説明する。連続実行にしろステップ実行にしろ、プログラムを実行させるということは、プログラム実行をするという行為がＩＣＥ制御下であるデバッグモードからＭＣＵ７０制御下のユーザモードに遷移することを意味する。実施例３の冒頭で説明したように、本実施例はＭＣＵ７０内のデバッグ回路７１にはＣＰＵコア７２の命令バスの接続先を再実行開始命令設定レジスタ７４からメモリ７３になるように命令バス切替回路７５を制御する機能がないことが前提である。従って、ユーザモードに遷移したものの、ＭＣＵ７０自身では上記切替を行うことができない。そこで実施例３では命令実行後にブレーク状態となるステップ実行を利用することで、ユーザモードからデバッグモードへ引き戻し、ＩＣＥ８０の制御下とすることが可能となる。デバックモードへ状態遷移後、ＩＣＥ８０は、自身の制御により命令バス切替回路７５の切替制御を行えることが可能となる。これが連続実行ではなく、ステップ実行を利用している意味である。
【００６７】
ブレーク終了後、ＩＣＥ８０は命令バス切替回路７５に直接アクセスするか、デバッグ回路７１を通じて命令バス切替回路７５を制御し、ＣＰＵコア７２の命令バスの接続先をメモリ７３に設定する(Ｓ５０)。
【００６８】
ここで、ユーザがそもそも連続実行を要求していた場合(Ｓ５１)は、ＭＣＵ７０に対して連続実行要求を発行する(Ｓ５２)。ステップ実行要求だった場合はこのまま処理を終了し、ユーザからの次のコマンドを待つ。
【００６９】
ＣＰＵコア７２は次のフェッチから、メモリ７３にある命令を順次フェッチしていく(Ｓ５３)。順次フェッチしていく過程でソフトウェアブレークポイント等ブレーク要因が発生(Ｓ５４)した場合には、ユーザ各種設定(Ｓ４１)に戻る。
【００７０】
この実施例３では、ステップ実行後のブレークで再実行開始命令設定レジスタ７４からのフェッチ終了を検出しているので、ブレーク後ＩＣＥ８０が命令バス切替回路７５を切り替えるまでメモリ７３からの命令をフェッチできない。よって、再実行開始命令設定レジスタ７４のレジスタの大きさは、ＭＣＵ７２の実行可能な最大の命令長をサポートする必要がある。
【００７１】
以上の動作の内、ＩＣＥ８０の制御について特化した部分をソフトウェアとしてホストコンピュータ上で動作させ汎用のエミュレータを操作することによっても本実施例を実現できる。また、そのソフトウェアはＣＤ−ＲＯＭ等の記憶媒体や、インターネット等の電子回線を通じて流通させることもできる。
【００７２】
・付記
（付記１）  プログラムにソフトウェアブレークポイントが挿入されることにより、プログラムが停止し、デバッグ処理が行われるマイクロプロセッサであって、
前記プログラムを格納するメモリと、
前記プログラムの命令の内、前記ソフトウェアブレークポイントに置き替わる前に存在していた命令を格納するレジスタと
を有することを特徴とするマイクロプロセッサ。      （１）
（付記２）  プログラムにソフトウェアブレークポイントが挿入されることによりプログラムが停止し、デバッグ処理が行われるマイクロプロセッサであって、
前記プログラムを格納するメモリと、
前記プログラムの命令の内、前記ソフトウェアブレークポイントに置き替わる前に存在していた命令を格納するレジスタと、
前記レジスタに格納された命令の読み込み後、前記メモリに格納される命令の内、該ソフトウェアブレークポイントが挿入された後の命令を読み込む制御部と
を有することを特徴とするマイクロプロセッサ。      （２）
（付記３）  プログラムにソフトウェアブレークポイントが挿入されることによりプログラムが停止し、デバッグ処理が行われるマイクロプロセッサであって、
前記プログラムを格納するメモリと、
前記プログラムの命令の内、前記ソフトウェアブレークポイントに置き替わる前に存在していた命令を格納するレジスタと、
前記レジスタに格納された命令の読み込みの後、前記メモリに格納される命令の内、該ソフトウェアブレークポイントが挿入された後の命令の読み込みに切り替える切替回路と、
を有することを特徴とするマイクロプロセッサ。
【００７３】
（付記４）  プログラムにソフトウェアブレークポイントが挿入されることによりプログラムが停止し、デバッグ処理が行われるマイクロプロセッサであって、
前記プログラムを格納するメモリと、
前記プログラムの命令の内、前記ソフトウェアブレークポイントに置き替わる前に存在していた命令を格納するレジスタと、
前記レジスタに格納された命令、および該メモリに格納された命令を選択的に読み込む制御部と、
前記制御部における前記レジスタに格納された命令の読み込み後、該制御部の命令の読み込み先を該レジスタから前記メモリへ切り替える切替手段と
を有することを特徴とするマイクロプロセッサ。
【００７４】
（付記５）  プログラムにソフトウェアブレークポイントを挿入することによりプログラムを停止させてデバッグ処理を行わせるエミュレータであって、
前記ソフトウェアブレークポイントに置き替わる前に存在していた命令の読み込みの終了を認識した後、前記プログラムの読み込みへ切り替える制御を行う制御部
を有することを特徴とするエミュレータ。        （３）
（付記６）  プログラムにソフトウェアブレークポイントを挿入することによりプログラムを停止させてデバッグ処理を行わせるエミュレータであって、
前記プログラムを格納するメモリと、
前記プログラムの命令の内、前記ソフトウェアブレークポイントに置き替える前に存在していた命令を格納するレジスタと
を有することを特徴とするエミュレータ。        （４）
（付記７）  プログラムにソフトウェアブレークポイントを挿入することによりプログラムを停止させてデバッグ処理を行わせるエミュレータであって、
前記プログラムを格納するメモリと、
前記プログラムの命令の内、前記ソフトウェアブレークポイントに置き替える前に存在していた命令を格納するレジスタと、
前記レジスタに格納された命令を読み込んだ後、前記メモリに格納される命令の内、該ソフトウェアブレークポイントを挿入した後の命令を読み込む制御部と
を有することを特徴とするエミュレータ。        （５）
（付記８）  プログラムにソフトウェアブレークポイントを挿入することによりプログラムを停止させてデバッグ処理を行わせるエミュレータであって、
前記プログラムを格納するメモリと、
前記プログラムの命令の内、前記ソフトウェアブレークポイントに置き替える前に存在していた命令を格納するレジスタと、
前記レジスタに格納された命令の読み込みの後、前記メモリに格納される命令の内、該ソフトウェアブレークポイントが挿入された後の命令の読み込みに切り替える切替回路と、
を有することを特徴とするエミュレータ。
【００７５】
（付記９）  プログラムにソフトウェアブレークポイントを挿入することによりプログラムを停止させてデバッグ処理を行わせるエミュレータであって、
前記プログラムを格納するメモリと、
前記プログラムの命令の内、前記ソフトウェアブレークポイントに置き替える前に存在していた命令を格納するレジスタと、
前記レジスタに格納された命令、および該メモリに格納された命令を選択的に読み込む制御部と、
前記制御部における前記レジスタに格納された命令の読み込み後、該制御部の命令の読み込み先を該レジスタから前記メモリへ切り替える切替手段と
を有することを特徴とするエミュレータ。
【００７６】
（付記１０）  エミュレータからの制御により、マイクロプロセッサで実行されるプログラムにソフトウェアブレークポイントを挿入し、プログラムを停止させてデバッグ処理を行うデバッグシステムであって、
前記マイクロプロセッサは、
前記プログラムを格納するメモリと、
前記プログラムを格納するメモリと、
前記プログラムの命令の内、前記ソフトウェアブレークポイントに置き替わる前に存在していた命令を格納するレジスタと
前記レジスタに格納された命令、および該メモリに格納された命令を選択的に実行する第１の制御部と、
を有し、
前記エミュレータは、
前記マイクロプロセッサのレジスタに格納された命令をステップ実行により実行するように前記第１の制御部を制御するとともに、前記ステップ実行によるブレーク後、該第１の制御部の実行する命令の読み込み先を該レジスタから前記メモリへ切り替えるように制御する第２の制御部と
を有することを特徴とするデバッグシステム。        （６）
（付記１１）  プログラムにソフトウェアブレークポイントが挿入されることによりプログラムが停止し、デバッグ処理が行われるマイクロプロセッサであって、
前記プログラムを格納するメモリと、
前記プログラムの命令の内、前記ソフトウェアブレークポイントに置き替わる前に存在していた命令を格納するレジスタと、
前記レジスタに格納された命令のステップ実行の後、前記メモリに格納される命令の内、該ソフトウェアブレークポイントが挿入された後の命令を実行する制御部と
を有することを特徴とするマイクロプロセッサ。        （７）
（付記１２）  プログラムにソフトウェアブレークポイントを挿入することによりプログラムを停止させ、デバッグ処理を行わせるエミュレータであって、
前記ソフトウェアブレークポイントを挿入した命令からプログラムを実行させる場合に、ステップ実行により該命令を実行させる制御部
を有することを特徴とするエミュレータ。        （８）
（付記１３）  マイクロプロセッサのメモリに格納させるプログラムにソフトウェアブレークポイントを挿入させることによりプログラムを停止させ、デバッグ処理を行わせるよう制御する、コンピュータで実行可能なソフトウェアであって、
前記プログラムの命令の内、前記ソフトウェアブレークポイントに置き替える前に存在していた命令を、前記マイクロプロセッサのレジスタに格納させるステップと、
前記レジスタの命令をステップ実行により実行させるステップと
前記ステップ実行によるブレーク後、前記メモリに格納されたプログラムの命令を実行するように制御するステップと
を有することを特徴とするソフトウェア。        （９）
（付記１４）  マイクロプロセッサのメモリに格納させるプログラムにソフトウェアブレークポイントを挿入させることによりプログラムを停止させ、デバッグ処理を行わせるように制御するソフトウェアが格納された、コンピュータで読み取り可能な記憶媒体であって、
前記プログラムの命令の内、前記ソフトウェアブレークポイントに置き替える前に存在していた命令を、前記マイクロプロセッサのレジスタに格納させるステップと、
前記レジスタの命令をステップ実行により実行させるステップと、
前記ステップ実行によるブレーク後、前記メモリに格納されたプログラムの命令を実行するように制御するステップと
を有することを特徴とするソフトウェアが格納された記憶媒体。        （１０）
（付記１５）  マイクロプロセッサのメモリに格納させるプログラムにソフトウェアブレークポイントを挿入させることによりプログラムを停止させ、デバッグ処理を行わせるよう制御する制御方法であって、
前記プログラムの命令の内、前記ソフトウェアブレークポイントに置き替える前に存在していた命令を、前記マイクロプロセッサのレジスタに格納させ、
前記レジスタの命令をステップ実行により実行させ、
前記実行ステップによるブレーク後、前記メモリに格納されたプログラムの命令を実行するように制御すること
を特徴とする制御方法。
【産業上の利用可能性】
【００７７】
以上に述べたように、本発明によればマイコンを用いたシステムのデバッグ支援システムおよびこれを備えた回路のプログラム中にソフトウェアブレークポイントが挿入しプログラムの実行を停止させてデバッグ処理を行うものについて、ソフトウェアブレークポイントの置き戻しに要する時間を、従来のセル単位でのメモリ置き戻しから、本発明のソフトウェアブレークポイントに置き替える前に本来存在した命令のみの再実行開始命令設定レジスタへの書き込みだけ(メモリのセル単位のメモリの置き戻しは不要)で済むので、ソフトウェアブレークポイントが多く挿入されるプログラムである程、大幅な時間削減を可能となり、デバッグ作業にかかる大幅な時間・費用の削減が期待できる。
【００７８】
また、命令を保持するメモリの置き替え・置き戻しに際のアクセス回数としても、１つのソフトウェアブレークポイントについて従来技術ではソフトウェアブレークポイントの置き替え時と本来存在した命令への置き戻し時の２回のアクセスが必要であるのに対し、本発明ではソフトウェアブレークポイントの置き替え時の１回のみである。置き替えに必要なメモリアクセスを半減させることによるメモリの長寿命化、システムの省電力化も期待できる。
【図面の簡単な説明】
【００７９】
【図１】本発明のデバッグシステムの実施例1の説明図である。
【図２】本発明のデバッグシステムの実施例1の動作フロー図である。
【図３】本発明の再実行開始命令設定レジスタの設定手法を説明する図である。
【図４】命令フェッチの手順(可変命令長の場合)を示す図である。
【図５】命令フェッチの手順(固定命令長)を示す図である。
【図６】本発明のデバッグシステムの実施例２の説明図である。
【図７】本発明のデバッグシステムの実施例２の動作フロー図である。
【図８】本発明のデバッグシステムの状態遷移を説明する図である。
【図９】本発明のデバッグシステムの実施例３の説明図である。
【図１０】本発明のデバッグシステムの実施例３の動作フロー図である。
【図１１】従来のデバッグシステムの説明図である。
【符号の説明】
【００８０】
１０  ＭＣＵ
１１  デバッグ回路
１２  ＣＰＵコア
１３  メモリ
１４  再実行開始命令設定レジスタ
１５  命令バス切替回路
１６  バス切替制御フラグ設定回路
２０  ＩＣＥ
３０  ホストコンピュータ
【図１】
2005267445.tif 000003
【図２】
2005267445.tif 000004
【図３】
2005267445.tif 000005
【図４】
2005267445.tif 000006
【図５】
2005267445.tif 000007
【図６】
2005267445.tif 000008
【図７】
2005267445.tif 000009
【図８】
2005267445.tif 000010
【図９】
2005267445.tif 000011
【図１０】
2005267445.tif 000012
【図１１】
2005267445.tif 000013