Cortex-M3调试:断点与调试事件响应详解

需积分: 50 6 下载量 41 浏览量 更新于2024-08-09 收藏 9.63MB PDF 举报
"调试监视器模式下对调试事件的响应-史上最全的测试用例设计方法总结" 在嵌入式系统开发中,调试是至关重要的环节,特别是在Cortex-M3这样的微控制器中。本文主要探讨了在调试监视器模式下如何响应调试事件,以及Cortex-M3的两种断点机制。 Cortex-M3处理器提供了两种断点机制:断点指令和基于FPB(Fault Perturbation Buffer,故障扰动缓冲区)的地址比较器断点。断点指令以`BKPT #im8`的形式存在,是一个16位的Thumb指令,当执行到这个指令时,会产生调试事件。如果C_DEBUGEN(调试使能)标志被置位,处理器内核会被暂停;如果调试监视器使能,会触发调试监视器异常。但需要注意,由于调试监视器异常的优先级低于NMI(非屏蔽中断)和Hard Fault,因此在处理这些高优先级异常的例程中,不能使用`BKPT`指令来启动调试,只能在其返回时响应。 执行`BKPT`指令后,处理器会在调试监视器异常返回时跳转回`BKPT`指令的地址,而不是继续执行下一条指令。这是因为`BKPT`通常用于替换正常指令,当调试操作完成后,指令内存恢复为原来的指令,而不会影响其他部分。如果在执行`BKPT`指令时,C_DEBUGEN和MON_EN都是0,处理器会因无法进入调试模式而引发Hard Fault,并在HFSR(Hard Fault Status Register)的DEBUGEVT位和DFSR(Debug Fault Status Register)的BKPT位置1。 对于程序存储器不可变的情况,可以利用FPB创建硬件断点。不过,FPB仅支持6个指令地址和2个文字地址的断点设置,具体的配置和使用将在后续章节详细讲解。 调试Cortex-M3处理器时,开发者需要理解这两种断点机制的工作原理,以及调试事件响应的优先级规则,以便有效地进行代码调试和问题排查。此外,书中还强调了翻译的策略和方法,力求让复杂的概念以更易于理解的方式呈现给读者。