我正在使用GCC 4.7.4和Lauterbach Combiprobe JTAG调试器开发STM32F2器件。在我的代码中,我有以下声明总是在某个位置打破以进行测试:
asm volatile ("BKPT #0");
这是唯一的断点。当我运行程序时,我可以看到我的程序到达断点,但我不能使用我的JTAG调试器超越此断点。相反,我必须通过该指令移动PC计数器以使程序执行。
这在过去是有效的,但我现在无法弄清楚为什么行为会有所不同。任何线索或提示都将不胜感激。
答案 0 :(得分:1)
有很多损坏的JTAG调试器。您可能安装了JTAG适配器的更新?
当您将GDB作为调试器时,您可能会检查是否可以将宏set PC=PC+4
添加到按钮或键。但如果这可能取决于您的IDE。
答案 1 :(得分:1)
如果您的应用程序代码中有断点指令,则程序计数器没有一般规则。某些CPU在包含断点指令的地址处停止,其他CPU在断点指令之后停止。
由于您使用标签“lauterbach”,我假设您使用的是Lauterbach的TRACE32调试器。
如果您认为调试器的行为在过去有所不同,我认为您应该联系Lauterbach支持。
现在,您可以使用以下TRACE32命令解决问题
Break.Set T:0x1000 /Program /CMD "Register.Set PP r(PP)+2"
(其中0x1000代表BKPT指令所在的地址。)