美文网首页
【嵌入式】Hardfault问题分析

【嵌入式】Hardfault问题分析

作者: Blue_Well | 来源:发表于2021-06-25 14:23 被阅读0次

当代码在运行过程中进入到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(栈底)可以计算出运行过程中所使用的栈空间大小,如果溢出了则需要修改启动文件中的栈空间大小。

相关文章

网友评论

      本文标题:【嵌入式】Hardfault问题分析

      本文链接:https://www.haomeiwen.com/subject/hiznyltx.html