JTAG ICE開発の続き(ブレークポイントの実装)
引き続き、JTAG ICEを開発しています。
GUIの簡単な操作だけでブレークポイントを設定できるようになりました。
JTAG ICEなので、ROM上のアドレスにもブレークポイントを設定することができます。
さて、JTAG ICEに限らず、デバッガのもつブレークポイント機能というのは、プログラムが指定したアドレスの命令を実行する際に、CPUの動作を停止させる機能です。
普通、JTAGデバッガでは、大抵のCPUに対してブレークポイントの設定で、命令の「実行前に止める」か、「実行後に止める」かという選択ができます。
やはり実行前に止まるのが嬉しいでしょう。
しかし、ここで、悩ましいことが一つ出てきます。
ブレークポイントというのは、やはり命令の実行前に止めて欲しいのですが、その止まったアドレスから再開するときには、一度だけブレークポイントを無視してほしい、というわけです。普通に考えればしっくりとくる動作なのですが、これを実装しようとすると意外に難しいことに気が付きました。
なぜなら、「実行前に停止」にすると、停止しているCPUの動作を再開(リスタート)するときに、ブレーク指定を解除しないと同じアドレスで止まり続けてしまいます。つまり再開(リスタート)できません。
逆に「実行後に停止」を選ぶと、CPUの動作は再開(リスタート)されますが、ループなどで再び同じ番地を通ったときに、設定した次の命令のアドレスで止まってしまいます。
これはあらゆるCPUの、モニタやデバッガを作る際に共通する問題ではないでしょうか。
上手い解決方法もあるのだとは思いますが、眠いので今日はここまでにしておきます。
ブレークポイントで止まった後はシングルステップ実行で1命令進めてからCPUの動作を再開(リスタート)するのがベストといったところでしょうか。
| 固定リンク


コメント