keil 定位hardfault

当程序触发hardfault时,通过Log查看通用寄存器值,特别是LR。在Keil Disassembly窗口找到LR对应的代码位置,发现可能出问题的函数。通过检查函数调用,发现在给特定函数传递-1作为参数时,导致了越界访问buf,从而引发了hardfault。
摘要由CSDN通过智能技术生成

首先,在程序中我设置了一个hardfault:

然后运行程序程序复位,通过log打印可以看到通用寄存器的值:

我们主要看lr的值,然后debug调试程序,打开keil的Disassembly窗口,在View菜单中,

拖动鼠标找到0x800d7b1这个位置(大概位置就可以)出现hardfault的地方就在lr地址后面的地址出的代码:

我们双击D7B2这个地址,代码跳转到这个函数中,仔细检查这个函数没有问题,推测可能是调用此函数的地方出现了问题:

 

可以看到第一张图中我们设置的hardfault测试,给这个函数传入的参数是一个-1,那么就是这里导致的hardfault,-1传入就是一个很大的值,而这个函数中要取buf里的值,这就导致buf越界了从而产生hardfault.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值