Call Stack窗口显示目标处于UsageFault异常状态。该窗口显示故障源自函数_NoThumbFunc。我们在Call Stack窗口中选择_NoThumbFunc。在Call Stack窗口中选择调用帧时,Ozone 的调用帧感知调试窗口会将输出切换到所选帧的执行上下文(请参阅上图)。Local Data窗口指示在函数_NoThumbFunc中执行了地址 0 分支。这导致 CPU 在 ARM 状态下执行 Thumb 指令。查看Ozone的寄存器窗口,寄存器UFSR确认CPU已发出INVSTATE UsageFault。
总结 Cortex-M处理器异常包含:
(1)HardFault异常,是缺省异常,固定优先级为-1,优先级比除NMI之外的所有中断和异常更高。
(2)MemManage异常,可通过使用内存保护单元(MPU)引起内存访问冲突异常。
(3)BusFault异常,在任一内存访问错误时触发,例如通过非法读/写,向量捕获。
(4)UsageFault异常,在执行错误时触发。UsageFault异常在向量表第6位,IRQ为-11,具有可配置优先级。如果未启用UsageFault,则会改为触发HardFault。
在任一异常中,都会从向量表中调用异常处理程序,类似于中断处理过程。Ozone检测到目标系统崩溃时,会自动分析目标状态并提供所必要的信息。异常窗口指示崩溃的原因,位置以及NVIC寄存器;Call Stack窗口可以从异常中展开,以便导航到错误位置,即使跨过多个异常( The Call Stack Window can also unwind from an exception to enable easy navigation to the location of error, even across multiple exceptions.)。