<分区>
这只是个人兴趣问题。我知道我的 JTAG 能够读取 uController 的寄存器值。但我不知道 JTAG 设备如何知道何时停止 uController。我认为也许添加了一些调用中断的代码,但您可以在操作期间添加断点,因此这个接缝是错误的。那么它是怎么做到的呢?
<分区>
这只是个人兴趣问题。我知道我的 JTAG 能够读取 uController 的寄存器值。但我不知道 JTAG 设备如何知道何时停止 uController。我认为也许添加了一些调用中断的代码,但您可以在操作期间添加断点,因此这个接缝是错误的。那么它是怎么做到的呢?
最佳答案
如 @Martin James 的评论中所述,这种工作的典型方式是目标硬件本身支持断点。
然后调试器使用JTAG接口(interface)设置片上寄存器来配置断点,真正的“断点”则由芯片自己完成。
这通常意味着您可以拥有的同时断点的数量被限制在一些较小的数量,因为存在的此类硬件数量有限。
This link例如,描述了 ARM Cortex-M0 的调试硬件,并表示它具有(客户可选择的)1 到最多 4 个硬件断点和最多两 (2) 个观察点。因此,非常有限(但作为一名实际的嵌入式开发人员,我看到了这一点并认为“mmmm 硬件断点,如此丰富”)。
关于c - 断点如何在嵌入式设备上工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37294090/