通常,代码需要处理 BusFault 时,如果使用默认配置,即保持 BusFault target 到 S 侧,AIRCR.BFHFNMINS=0,则 Fault Handler 可以从 SCB_S 的 CFSR.BFSR 和 BFAR 寄存器获取总线故障信息;而如果设置了 AIRCR.BFHFNMINS=1,那么发生 Bus error 的时候,非安全侧的 Fault Handler 可以直接从 SCB_NS 的 CFSR...
AI代码解释 #include"core_cm4.h"// 包含CMSIS库voidHardFault_Handler(void){printf("Hard Fault!\n");printf("HFSR = 0x%08X\n",SCB->HFSR);printf("CFSR = 0x%08X\n",SCB->CFSR);printf("MMFAR = 0x%08X\n",SCB->MMFAR);// Memory Manage Fault Addressprintf("BFAR = 0x%08X\n",SCB->BF...
SCB->BFAR); // Bus Fault Address while (1); } 3.
target 到 S 侧,AIRCR.BFHFNMINS=0,则 Fault Handler 可以从 SCB_S 的 CFSR.BFSR 和 BFAR ...
vu32 MMFAR; vu32 BFAR; vu32 AFSR; } SCB_TypeDef; /* System Control Block Structure */ 它们对应ARM手册中的名称为 CPUID CPUID Base Register ICSR Interrupt Control State Register VTOR Vector Table Offset Register AIRCR Application Interrupt/Reset Control Register ...
printf("SCB_SHCSR = %xn",SCB->SHCSR);while(1); } ③执行程序后,若发生内核错误,则程序会运行到最后while(1);处。此时观察相应的堆栈和故障寄存器值,stacked_lr即为故障发生时进入故障中断前PC的值,在MDK软件调试状态下,假如stacked_lr的值为0x1a002d08,在左下方的命令窗口输入“PC = 0x1a002d08”回车...
printf("SCB_SHCSR = %xn",SCB->SHCSR); while (1); } ③执行程序后,若发生内核错误,则程序会运行到最后while(1);处。此时观察相应的堆栈和故障寄存器值,stacked_lr即为故障发生时进入故障中断前PC的值,在MDK软件调试状态下,假如stacked_lr的值为0x1a002d08,在左下方的命令窗口输入“PC = 0x1a002d08”...
vu32 MMFAR; vu32 BFAR; vu32 AFSR; } SCB_TypeDef; /* System Control Block Structure */ 它们对应ARM手册中的名称为 CPUID = CPUID Base Register ICSR = Interrupt Control State Register VTOR = Vector Table Offset Register AIRCR = Application Interrupt/Reset Control Register ...
", SCB->BFAR); // Bus Fault Address while (1);} 3' b1 c, b: h" J. y! u" ...
vu32 MMFAR; vu32 BFAR; vu32 AFSR; } SCB_TypeDef; /* System Control Block Structure */ 它们对应ARM手册中的名称为 CPUID = CPUID Base Register ICSR = Interrupt Control State Register VTOR = Vector Table Offset Register AIRCR = Application Interrupt/Reset Control Register ...