这只是一个个人兴趣的问题。我知道我的JTAG能够读取uController的寄存器值。但我不知道JTAG设备如何知道何时停止uController。我认为可能添加了一些调用中断的代码,但您可以在操作期间添加断点,因此似乎是错误的。那么它是如何完成的?
这只是一个个人兴趣的问题。我知道我的JTAG能够读取uController的寄存器值。但我不知道JTAG设备如何知道何时停止uController。我认为可能添加了一些调用中断的代码,但您可以在操作期间添加断点,因此似乎是错误的。那么它是如何完成的?
调试器使用JTAG接口来设置芯片内部寄存器以配置断点,而实际的“断点”操作则由芯片本身执行。
这通常意味着您可以拥有的同时断点数受到一些小的限制,因为这种硬件的数量是有限的。
该链接描述了例如ARM Cortex-M0的调试硬件,说它具有(可供客户选择的)1到最多4个硬件断点和最多两个(2)监视点。所以,相当严格限制了(但作为一个真正的嵌入式开发者,我看到这一点并想:“哇,硬件断点,这真是太棒了”)。
@unwind已经提到了硬件断点。
有些单片机也提供了单步中断/机制。
在每个指令执行完之后,代码将停止,但调试器不需要为每个单步设置断点。
对于一些旧的没有硬件断点的单片机,断点是通过用软件中断指令替换指令来实现的。
当代码驻留在闪存中时,这是可怕的,因为每个断点都要重新编程闪存,这通常非常缓慢。