4

这只是个人兴趣的问题。我知道我的 JTAG 能够读取 uController 的寄存器值。但我不知道 JTAG 设备如何知道何时停止 uController。我认为可能添加了一些代码来调用中断,但是您可以在操作期间添加断点,因此这个接缝是错误的。那么它是如何完成的呢?

4

2 回答 2

6

正如@Martin James的评论中所提到的,这种工作的典型方式是目标硬件本身支持断点。

然后调试器使用JTAG接口设置片内寄存器来配置断点,而真正的“断”则由芯片自己完成。

这通常意味着您可以同时拥有的断点数量仅限于少数几个,因为存在的此类硬件数量有限。

例如,此链接描述了 ARM Cortex-M0 的调试硬件,并说它具有(客户可选)1 到最多 4 个硬件断点和最多两 (2) 个观察点。所以,非常有限(但作为一个实际的嵌入式开发人员,我看到这一点并认为“嗯嗯硬件断点,如此丰富”)。

于 2016-05-18T08:36:48.357 回答
3

@unwind 已经提到了硬件断点。

一些单片机还提供单步中断/机制。
在每条指令之后,代码将停止,但调试器不需要每次都为这个单步设置断点。

而在一些没有硬件断点的老单片机上,断点是通过用软件中断指令代替指令来实现的。
当代码驻留在闪存中时,这很糟糕,因为闪存必须为每个断点重新编程,这通常非常慢

于 2016-05-18T12:30:11.310 回答