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