由于在RA4M2(Cortex-M33)移植RT-Thread OS的时候遇到了 Hardfault,不知道如何分析错误原因,后参考以前写的文章【ARM Cortex-M 系列 2.1 – RT-Thread Cortex-M7 异常处理及 hardfault 处理分析】 来查找原因。
在 ARM Cortex-M33 微控制器上,当发生异常或错误时,一些特殊的寄存器提供了用于调试和错误处理的关键信息。这些寄存器包括程序状态寄存器 (xPSR)、可配置故障状态寄存器 (CFSR)、硬件故障状态寄存器 (HFSR)、总线故障地址寄存器 (BFAR) 和内存管理故障地址寄存器 (MMFAR) 以及 UFSR(UsageFault Status Register)。
xPSR 寄存器包含多个状态字段,包括程序状态、中断或异常返回状态以及其他系统状态。
其中最重要的字段是:
32-bit read/write-one-to-clear register located at 0xE000ED28.
CFSR 寄存器用于提供有关内存管理、总线和使用错误的详细信息。它分为三个部分:
0xE002ED2A
.0xE002ED2A
is RES0 to software executing in Non-secure state and the debugger.
HFSR 寄存器提供有关所有硬件故障的信息。它包括字段,如调试事件或向量表硬故障。
当 BFSR 的 BFARVALID 位被设置时,BFAR 寄存器包含了导致总线故障的地址。
当 MMFSR 的 MMARVALID 位被设置时,MMFAR 寄存器包含了导致内存管理故障的地址。