您能否在运行时以编程方式删除 ARM Cortex M3 应用程序中的断点?

问题描述 投票:0回答:1

在我的 CM3 裸机 C 应用程序中,我有一个启动脚本,它在内存中目标区域的代码和数据部分上运行 CRC。我注意到有时代码检查会失败,有时不会,这取决于我是否设置了任何断点。好吧,我已经从因果关系中确定编译后的额外断点破坏了代码部分的 CRC,显然是因为这些断点是我的 IDE 后来添加的。

我想在这里检查以下提议是否可行:在 CRC 函数中,捕获我代码中在运行时设置的所有额外断点,并禁用它们,以便指令返回到编译时的状态,然后运行CRC校验功能,然后在该功能结束时重新启用它们。

有办法吗?我想如果没有,那么我将不得不在任何调试过程中跳过 CRC 检查。

提前致谢!

c arm embedded cortex-m3 semihosting
1个回答
0
投票

有办法吗?

没有——但根本不需要。它们在那里是因为你在调试软件中设置了太多断点。

  1. Cortex-m3 可以有 2 个(简化的实现)到 6 个硬件指令比较器。如果获取指令的地址与编程的地址匹配,则为内核提供 bkpt 指令。

  2. 一些调试探针软件(例如 J-Link)提供软件断点。软件断点就是编程到闪存中的

    bkpt
    指令。它改变了原来的FLASH 内容。如果您尝试使用超过硬件断点的数量,则会放置它们。

要防止这种行为,只需禁用调试软件中的软件断点,或者使用的断点不要超过硬件断点(即 2 或 6,具体取决于您的硬件版本 [我知道它是 M3])

如果您使用 J-Link 调试器,您可以使用 Web 界面来禁用硬件断点(在这张图片上它们是启用的):

© www.soinside.com 2019 - 2024. All rights reserved.