これは個人的な質問のための単なる質問です。私は自分のJTAGがuControllerのレジスタ値を読み取ることができることを知っています。しかし、私は、JTAGデバイスがいつuControllerをいつ停止するかを知る手がかりがありません。割り込みを呼び出すコードが追加されたかもしれないと思ったが、操作中にブレークポイントを追加できるので、この継ぎ目が間違っていると思った。だからどうしたの?組み込みデバイスでブレークポイントはどのように機能しますか?
答えて
@Martin Jamesのコメントで述べたように、このハードウェアの典型的な仕組みは、ターゲットハードウェアがネイティブでブレークポイントをサポートしていることです。
デバッガはJTAGインターフェイスを使用してオンチップレジスタを設定してブレークポイントを設定し、実際の "切断"はチップ自体によって行われます。
このようなハードウェアが限られているため、これはしばしば同時に発生するブレークポイントの数が少数に制限されることを意味します。
This linkは、ARM Cortex-M0のデバッグハードウェアを例として説明しています.1つから最大4つのハードウェアブレークポイントと最大2つのウォッチポイントがあります(顧客が選択可能)。だから、かなり厳しく制限されています(実際の組み込み開発者として、私はこれを見て "mmmmハードウェアブレークポイント、そのような豊かさ"と考えます)。
[ソフトウェア対ハードウェアブレークポイント](http://stackoverflow.com/questions/8878716/what-is-the-difference-between-hardware-and-software-breakpoints)に関する便利な議論もあります。 。 – Emilien
@unwindすでにハードウェアブレークポイントが言及されています。
一部のMCUでは、シングルステップ割り込み/メカニズムも提供しています。
各命令の後、コードは停止しますが、デバッガはこの1ステップごとにブレークポイントを設定する必要はありません。
ハードウェアブレークポイントのない古いmcuでは、ソフトウェア割り込み命令による命令の置き換えによってブレークポイントが実現されます。
フラッシュにコードが存在する場合、これはひどいことです。ブレークポイントごとにフラッシュを再プログラムする必要があり、通常は非常に遅いためです。
これはIDEに依存します..uVisionのようなIDEは、 – Ian
通常、組み込みのデバッグハードウェアとのインタフェースによって実現されます。そういうわけで、制限事項が見えてくるのです。 'いつでも2つのブレークポイントしかありません'(チップには2つのブレークポイントレジスタしかありません)、 –
質問が多すぎます。デバッガ、ICDアダプタ、マイクロコントローラによって異なります。 – Lundin