Cortex-M3调试:断点与监视器模式响应

需积分: 0 9 下载量 17 浏览量 更新于2024-08-10 收藏 9.28MB PDF 举报
"Cortex-M3调试监视器模式下的调试事件响应及断点机制" 在Cortex-M3微控制器中,调试事件的响应是通过调试监视器模式进行的,这一模式对于开发者来说非常重要,因为它允许在运行时对处理器进行观察和控制。在调试过程中,断点是最常用的工具之一。 标题中提到的"调试监视器模式下对调试事件的响应"是指当处理器执行到特定的调试事件,如断点或监控器使能时,系统会如何响应。在Cortex-M3中,有两种主要的断点机制: 1. **断点指令**:这是最常见的断点实现方式,使用16位的Thumb指令`BKPT #im8`。当执行到这个指令时,它会引发一个调试事件。如果C_DBGEN位被置位,处理器内核会被暂停;若调试监视器已使能,会触发调试监视器异常。然而,由于NMI(非屏蔽中断)和Hard Fault的优先级更高,因此在它们的服务例程中不能使用`BKPT`指令启动调试,必须等到它们返回后才能响应调试监视器异常。 2. **基于FPB(Fault-Predicate Breakpoint)的断点**:当程序内存不可修改时,可以使用FPB来设置硬件断点。FPB允许对6个指令地址和2个文字地址进行比较,以触发断点。不过,FPB资源有限,只有6个硬件断点。 执行`BKPT`指令后,处理器会在调试监视器异常返回时跳转回断点指令的地址,而不是执行下一条指令的地址。这是因为`BKPT`通常替换一条正常的指令,调试操作完成后,指令内存恢复到原来的状态。 如果在执行`BKPT`指令时,C_DEBUGEN和MON_EN均为0,这意味着处理器无法进入调试模式,此时会生成一个硬fault,并在HFSR(Hard Fault Status Register)的DEBUGEVT位和DFSR(Debug Fault Status Register)的BKPT位上设置标志。 关于FPB的详细配置和使用,将在后续章节中进一步介绍。FPB提供了一种灵活的硬件断点机制,尽管其资源有限,但在某些场景下非常有用。 这段内容出自《Cortex-M3权威指南》,作者Joseph Yiu,译者宋岩。书中以深入浅出的方式介绍了Cortex-M3的调试技术,包括断点的使用和调试监视器的响应机制,旨在帮助读者更好地理解和使用这种微控制器。