【ARM Cortex-M 系列 2.3 -- Cortex-M7 Debug event 详细介绍】


请阅读【嵌入式开发学习必备专栏】


Cortex-M7 Debug event

在ARM Cortex-M7架构中,调试事件(Debug Event)是由于调试原因而触发的事件。一个调试事件会导致以下几种情况之一发生:

  1. 进入调试状态:如果启用了停滞调试(Halting Debug),一个调试事件会使处理器在调试状态下停滞。通过将DHCSR.C_DEBUGEN位设置为1来启用停滞调试。一个导致进入调试状态的调试事件会将DHCSR.C_HALT设置为1。在这里插入图片描述

  2. DebugMonitor异常:如果停滞调试被禁用且 DebugMonitor 异常被启用,当 DebugMonitor 异常的组优先级大于当前执行优先级时,一个调试事件会导致DebugMonitor异常。停滞调试被禁用是通过将DHCSR.C_DEBUGEN位设置为0或通过调试认证接口禁用,在这里插入图片描述
    而 DebugMonitor 异常被启用是通过将DEMCR.MON_EN位设置为1。在这里插入图片描述

MON_EN, bit[16] Enable the DebugMonitor exception:

  • 0 DebugMonitor exception disabled.
  • 1 DebugMonitor exception enabled.

如果DebugMonitor组优先级小于或等于当前执行优先级:

  • 处理器会将由执行BKPT指令生成的断点调试事件升级为HardFault。
  • 处理器升级由FPB生成的断点为HardFault,或忽略FPB断点,这是由具体实现定义的。然而,处理器只有在受断点影响的指令显示其架构行为时才能忽略FPB断点。
  • 处理器忽略其他调试事件。这意味着它忽略看点(Watchpoints)和外部调试请求。
  1. HardFault异常:如果停滞调试和监视器都被禁用,一个断点调试事件会升级为HardFault,并且处理器忽略其他调试事件。
  2. 在NMI或HardFault异常处理程序中发生断点时:如果在NMI或HardFault异常处理程序中断点发生时停滞调试被禁用,系统会因不可恢复的错误(Unrecoverable exception)而锁定。断点可能是由BKPT指令产生或由FPB生成的。
  3. FPB在DHCSR.C_DEBUGEN设置为0且DEMCR.MON_EN设置为0时,是否生成断点调试事件是由具体实现定义的。
  4. 导致HardFault或锁定的断点调试事件被视为不可恢复。

在ARM Cortex-M7架构中关于调试事件行为,特别是关于HardFault和锁定(Lockup)情况的触发机制,主要涉及当处理器在以下情况下执行BKPT(断点)指令时:

  • 因为禁止停滞而不设置DHCSR.C_HALT
  • 因为DebugMonitor被禁用或处理器未在比DebugMonitor优先级低的优先级上执行,而不设置DEMCR.MON_PEND

处理器的DFSR(Debug Fault Status Register,调试故障状态寄存器)包含每个调试事件的状态位。当一个调试事件导致处理器停滞或生成异常时,这些位被设置为1,并且之后通过写1来清除(write-one-to-clear)。是否在事件被忽略或导致锁定时更新这些位是由具体实现定义的。

Debug events

在这里插入图片描述

  • 17
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

主公CodingCos

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值