HardFault_Handler故障原因排查

出现HardFault_Handler故障的原因有两个方面: 内存溢出或者堆栈溢出
在这里插入图片描述
首先需要找到出现故障的地方
1.在main.c下自定义hard_fault_handler_c函数

void hard_fault_handler_c(uint32_t* hardfault_args)
{
    static unsigned int stacked_lr;
    static unsigned int stacked_pc;
    stacked_lr = ((unsigned long) hardfault_args[5]);
    stacked_pc = ((unsigned long) hardfault_args[6]);
    __breakpoint(0);
    while(1);
}

2.把原先HardFault_Handler注释 重新定义
在这里插入图片描述

HardFault_Handler\
                PROC
                IMPORT hard_fault_handler_c
                TST LR, #4
                ITE EQ
                MRSEQ R0,   MSP
                MRSNE R0,   PSP
                B   hard_fault_handler_c
                ENDP
  1. 修改后 下次故障就会出现在定义的函数中
  2. 在这里插入图片描述
    4.定位故障处
    在Debug状态下 在Disassembly窗口里右键选择Show Diassembly at Address
    在这里插入图片描述
    输入stacked_lr,stacked_pc存下的变量地址去定位到故障处
    在这里插入图片描述
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值