断点如何在嵌入式设备上运行?

时间:2016-05-18 08:26:04

标签: c debugging embedded bare-metal jtag

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

2 个答案:

答案 0 :(得分:6)

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

然后,调试器使用JTAG接口设置片内寄存器来配置断点,然后由芯片本身完成实际的“中断”。

这通常意味着您可以拥有的同时断点数量限制在一些较小的数量,因为存在的此类硬件数量有限。

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

答案 1 :(得分:2)

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

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

对于没有硬件断点的一些较旧的mcu,断点是通过软件中断指令替换指令来实现的 当代码驻留在闪存中时,这很糟糕,因为闪存必须为每个断点重新编程,这通常很慢