一些用户在代码中使用软件断点时,调试时会遇到CRC不匹配的问题
对于这一问题,原因是在使用如那件断电时候,调试器会通过插入BKPT指令(Cortex-M 上的操作码 0xBE00)临时修改断点位置的内存。
尽管这一变化是暂时的,仅用于调试,但是任何包含该修改代码的CRC或校验都可能返回一项不到的结果;如果放入flash中,那么flash的内容就会被物理改变直到被擦除和重新编程为止。
为了避免这个问题:
1、优先选择硬件断点而不是软件短板断电,因为他们非侵入性而且不改变内存内容
2、注意软件断点,避免在该地区进行CRC检查
3、在CRC检查前手动清除断电(重新下载原始固件)
附加说明:
1、调试器在实现软件断点时的行为依赖于工具链。有些调试器可能表现不同
2、在没有调试器的情况下执行断点指令会导致硬故障异常,导致设备崩溃。如果断点留在闪存固件内部,可能会导致不稳定和故障(如果调试会话意外终止(例如因断电),断点可能会留在闪存内部)
更多详细内容可以参考:
https://developer.arm.com/documentation/100235/0100/The-Cortex-M33-Instruction-Set/Miscellaneous-instructions/BKPT?lang=en(ARM Cortex-M33上的BKPT指令)
https://developer.arm.com/documentation/ddi0553/latest/(Armv8-M架构参考手册第13.4.4章节)
|
|