OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子新作:阿波罗STM32F767&F429&探索者STM32F4开发板&赶快来下载资料哦。

查看: 368|回复: 11

STM32运行一天后出现“HardFault_Handler”死机

[复制链接]

  离线 

6

主题

28

帖子

0

精华

新手上路

Rank: 1

积分
19
金钱
19
注册时间
2016-3-15
在线时间
20 小时
发表于 2017-11-13 15:14:28 | 显示全部楼层 |阅读模式
20金钱
本帖最后由 veblen 于 2017-11-13 15:15 编辑

我的项目环境是:STM32+FreeRTOS+lwip,系统运行一天后死机,通过串口打印可以发现程序进入到HardFault_Handler中断处理函数中,请问有什么方法可以帮助我尽快定位问题出现在哪里?希望大家不吝赐教,谢谢了!!!

最佳答案

查看完整内容[请看2#楼]

进入Fault后,查看调用栈是解决问题的最好办法,前提是栈的数据还可用. 如果是用KEIL在线调试的,可直接停下来在call stack中查看. 如果是log输出的,要麻烦点,通过数据dump的方式把栈输出来,人工对照map文件进行追溯.
回复

使用道具 举报

  离线 

5

主题

264

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1200
金钱
1200
注册时间
2014-5-16
在线时间
181 小时
发表于 2017-11-13 15:14:29 | 显示全部楼层
进入Fault后,查看调用栈是解决问题的最好办法,前提是栈的数据还可用.
如果是用KEIL在线调试的,可直接停下来在call stack中查看.
如果是log输出的,要麻烦点,通过数据dump的方式把栈输出来,人工对照map文件进行追溯.
回复

使用道具 举报

  离线 

6

主题

28

帖子

0

精华

新手上路

Rank: 1

积分
19
金钱
19
注册时间
2016-3-15
在线时间
20 小时
 楼主| 发表于 2017-11-13 19:32:31 | 显示全部楼层
zmingwang 发表于 2017-11-13 16:27
进入Fault后,查看调用栈是解决问题的最好办法,前提是栈的数据还可用.
如果是用KEIL在线调试的,可直接停下 ...

我自己写了一个栈溢出的函数,然后在主程序中调用它,接着在HardFault_Handler中断处理函数中下断点,程序运行后会断下来,按照网上的方法查看LR、SP寄存器并没有找到出错地方的地址信息,请问该如何正确的定位出错信息?会不会是使用FreeRTOS系统后无法正确地定位信息?
回复

使用道具 举报

  离线 

482

主题

8万

帖子

30

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
117247
金钱
117247
注册时间
2010-12-1
在线时间
900 小时
发表于 2017-11-14 01:25:40 | 显示全部楼层
帮顶
回复

使用道具 举报

  离线 

6

主题

28

帖子

0

精华

新手上路

Rank: 1

积分
19
金钱
19
注册时间
2016-3-15
在线时间
20 小时
 楼主| 发表于 2017-11-14 09:15:13 | 显示全部楼层
回复

使用道具 举报

  离线 

2

主题

14

帖子

0

精华

新手上路

Rank: 1

积分
40
金钱
40
注册时间
2017-9-19
在线时间
9 小时
发表于 7 天前 | 显示全部楼层
楼主,我现在也是用ucos + lwip,测试tcp client端,2s收发一次数据,10分钟就进入 HardFault_Handler!  楼主问题解决了吗?
回复

使用道具 举报

  离线 

6

主题

28

帖子

0

精华

新手上路

Rank: 1

积分
19
金钱
19
注册时间
2016-3-15
在线时间
20 小时
 楼主| 发表于 6 天前 | 显示全部楼层
steaven 发表于 2017-11-15 16:34
楼主,我现在也是用ucos + lwip,测试tcp client端,2s收发一次数据,10分钟就进入 HardFault_Handler!   ...

因为你的时间比较短,可以用jLink在线调试,在进入HardFault_Handler里下断点,通过看寄存器中的信息看能不能找到出问题的函数,网上这方面的信息比较多,我就不重复了。重点查看程序有没有访问已经释放了的内存,因为这样的错误可能在系统内存分配不繁忙的时候不会出错,所以我的错误在运行一天后才出现。
回复

使用道具 举报

  离线 

6

主题

25

帖子

0

精华

新手上路

Rank: 1

积分
44
金钱
44
注册时间
2017-8-23
在线时间
20 小时
发表于 5 天前 | 显示全部楼层
veblen 发表于 2017-11-16 10:50
因为你的时间比较短,可以用jLink在线调试,在进入HardFault_Handler里下断点,通过看寄存器中的信息看能 ...

我之前程序也出现了这个问题,后面我的解决方案是,把lWIP里的接收中断里面处理数据的程序直接放在MAIN函数里,也就是由接收中断间接的改成接收轮询,后面就一直没有出现这个问题啦
回复

使用道具 举报

  离线 

6

主题

28

帖子

0

精华

新手上路

Rank: 1

积分
19
金钱
19
注册时间
2016-3-15
在线时间
20 小时
 楼主| 发表于 5 天前 | 显示全部楼层
依宝 发表于 2017-11-17 11:36
我之前程序也出现了这个问题,后面我的解决方案是,把lWIP里的接收中断里面处理数据的程序直接放在MAIN函 ...

你这样不好,首先浪费了大量CPU时间在轮询上,其次如果接收比较频繁的话,容易掉包。你出现那样的问题很可能是你的网络接收中断没有处理好
回复

使用道具 举报

  离线 

6

主题

25

帖子

0

精华

新手上路

Rank: 1

积分
44
金钱
44
注册时间
2017-8-23
在线时间
20 小时
发表于 5 天前 | 显示全部楼层
veblen 发表于 2017-11-17 13:27
你这样不好,首先浪费了大量CPU时间在轮询上,其次如果接收比较频繁的话,容易掉包。你出现那样的问题很 ...

恩,因为做这个东西我本身就是要求我发送的速度快,数据多,接收的少一些,所以如果在中断里处理接收函数对我来说不合理,把它放在外面,每循环一次程序,就处理一次,没有出现什么问题。可能因为我对接收的实时性要求不是很高
回复

使用道具 举报

  离线 

76

主题

246

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
341
金钱
341
注册时间
2014-8-11
在线时间
53 小时
发表于 5 天前 | 显示全部楼层
内存爆了没,log里间断查下内存使用率
回复

使用道具 举报

  离线 

6

主题

28

帖子

0

精华

新手上路

Rank: 1

积分
19
金钱
19
注册时间
2016-3-15
在线时间
20 小时
 楼主| 发表于 5 天前 | 显示全部楼层
战舰水手 发表于 2017-11-17 17:17
内存爆了没,log里间断查下内存使用率

在STM32+FreeRTOS中怎么使用查看内存使用率??
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则




QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2017-11-22 03:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */