首先,在程序中我设置了一个hardfault:
然后运行程序程序复位,通过log打印可以看到通用寄存器的值:
我们主要看lr的值,然后debug调试程序,打开keil的Disassembly窗口,在View菜单中,
拖动鼠标找到0x800d7b1这个位置(大概位置就可以)出现hardfault的地方就在lr地址后面的地址出的代码:
我们双击D7B2这个地址,代码跳转到这个函数中,仔细检查这个函数没有问题,推测可能是调用此函数的地方出现了问题:
可以看到第一张图中我们设置的hardfault测试,给这个函数传入的参数是一个-1,那么就是这里导致的hardfault,-1传入就是一个很大的值,而这个函数中要取buf里的值,这就导致buf越界了从而产生hardfault.