注意:如果锁定状态出现在NMI处理程序中,后面的NMI就无法使处理器离开锁定状态。
在应用程序中,处理器处于锁定状态,会一直在void HardFault_Handler(void)函数中执行。void HardFault_Handler(void)
{
/* Go to infinite loop when Hard Fault exception occurs */
while (1)
{
}
}
该段代码会判断当前堆栈使用的是MSP或PSP,然后将堆栈参数传递给hard_fault_handler_c函数,该函数定义如下:
void hard_fault_handler_c(unsigned int * hardfault_args, unsigned lr_value)
{
unsigned int stacked_r0; //压栈的 r0
unsigned int stacked_r1; //压栈的 r1
unsigned int stacked_r2; //压栈的 r2
unsigned int stacked_r3; //压栈的 r3
unsigned int stacked_r12; //压栈的 r12
unsigned int stacked_lr; //压栈的 lr
unsigned int stacked_pc; //压栈的 pc
unsigned int stacked_psr; //压栈的 psr