【嵌入式】Hardfault问题分析

2021-06-25  本文已影响0人  Blue_Well

当代码在运行过程中进入到Hardfault时,若想要定位造成Hardfault的代码位置,则不能让芯片复位或者断电上电,要让芯片一直卡死在Hardfault当中,这时用JLINK连接上芯片,打开SEGGER的J-LINK Commander工具,输入connect指令连接芯片,选择SWD接口。

连接完成后能读取Core ID等信息。

输入h指令将芯片halt住,此时能读到以下的信息。

在这里可以看到代码运行到什么地方,以及此时的堆栈情况。

生成.asm文件的方法,Keil5→Options for Target...→User,在"After Build/Rebuild"中输入fromelf --text -a -c -o "$L@L.asm" "#L"后,编译即可。

输入mem32 <Addr>, <NumBytes>读取内存信息,再配合生成的.asm文件锁定Hardfault的大概的位置。

对于堆栈溢出造成的Hardfault需要分析堆栈的情况,由Keil编译生成的bin文件的前4个字节为栈顶(小端模式),减去MSP(栈底)可以计算出运行过程中所使用的栈空间大小,如果溢出了则需要修改启动文件中的栈空间大小。

上一篇下一篇

猜你喜欢

热点阅读