OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9030|回复: 13

关于STM32F103RC进入hardfault的原因

[复制链接]

10

主题

40

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2873
金钱
2873
注册时间
2020-4-30
在线时间
218 小时
发表于 2022-2-9 16:04:27 | 显示全部楼层 |阅读模式
100金钱
最近调试代码,代码运行半小时左右就会进入hardfault,后打上断点,重新运行后停在断点处,如图所示
微信截图_20220209155615.png
在Call Stack的HardFault_Handler上右键Show CallerCode后如图所示
微信截图_20220209155921.png
想请教下大神,这是啥问题,该怎么修改,谢谢

最佳答案

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

看这两篇博客,基本能解决问题。 代码出错提示_ARM CortexM 系列 MCU错误代码自动追踪库的使用经验分享 J-Link RTT库和CmBacktrace库使用总结
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

271

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1236
金钱
1236
注册时间
2015-5-14
在线时间
352 小时
发表于 2022-2-9 16:04:28 | 显示全部楼层
30年众生牛马,60年诸佛龙象!
回复

使用道具 举报

4

主题

896

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4305
金钱
4305
注册时间
2019-9-4
在线时间
896 小时
发表于 2022-2-9 18:11:49 | 显示全部楼层

HardFault_Handler问题查找方法:https://blog.csdn.net/zyboy2000/article/details/7668331
回复

使用道具 举报

10

主题

778

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6719
金钱
6719
注册时间
2017-4-12
在线时间
1257 小时
发表于 2022-2-10 08:38:07 | 显示全部楼层
目测出现在malloc那里,每次malloc后,需要判断下内存是否申请成功,如果内存不足以申请,导致申请失败时,不能操作指针
回复

使用道具 举报

10

主题

40

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2873
金钱
2873
注册时间
2020-4-30
在线时间
218 小时
 楼主| 发表于 2022-2-10 14:29:20 | 显示全部楼层
245925587 发表于 2022-2-10 08:38
目测出现在malloc那里,每次malloc后,需要判断下内存是否申请成功,如果内存不足以申请,导致申请失败时, ...

我猜是内存溢出了,但代码捋了一遍,每次申请用完都释放了,伤脑筋
回复

使用道具 举报

70

主题

6758

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12991
金钱
12991
注册时间
2012-11-26
在线时间
3789 小时
发表于 2022-2-10 14:42:49 | 显示全部楼层
在进入hardfault前   执行了newbuffer   应该是数组越界了
回复

使用道具 举报

10

主题

40

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2873
金钱
2873
注册时间
2020-4-30
在线时间
218 小时
 楼主| 发表于 2022-2-11 14:05:00 | 显示全部楼层
jermy_z 发表于 2022-2-10 14:42
在进入hardfault前   执行了newbuffer   应该是数组越界了

请教下,怎么从执行了newbuffer看出是数组越界 了,而不是内存不够了
回复

使用道具 举报

70

主题

6758

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12991
金钱
12991
注册时间
2012-11-26
在线时间
3789 小时
发表于 2022-2-11 19:41:05 | 显示全部楼层
chen12345678 发表于 2022-2-11 14:05
请教下,怎么从执行了newbuffer看出是数组越界 了,而不是内存不够了

你自己的代码自己检查啊

又没有你的源代码,只能靠猜
学无止境
回复

使用道具 举报

10

主题

40

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2873
金钱
2873
注册时间
2020-4-30
在线时间
218 小时
 楼主| 发表于 2022-2-21 16:49:28 | 显示全部楼层
唉,查了一个多星期了,就是找不到
回复

使用道具 举报

10

主题

271

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1236
金钱
1236
注册时间
2015-5-14
在线时间
352 小时
发表于 2022-2-22 07:57:32 来自手机 | 显示全部楼层
用CmBacktrace库调试下
回复

使用道具 举报

80

主题

931

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3345
金钱
3345
注册时间
2013-5-28
在线时间
468 小时
发表于 2022-2-22 09:12:52 | 显示全部楼层
进入hardfault一般倒追模式是这样.
1.获取SP指针内容,
2.在memory里面按32位长度显示地址,基本上是获取第6个数据,
3.在Disassembly里面选择how Disassemblyat Address,找到进入hardfault的地方,
4.找到后,前后几句话都去看看,

在确定软件没问题后.
1.看看当前进入hardfault的地方是操作哪个外设,去关注下外设的使用限制.外设存在极限问题,进入时间不一定,具有一定随机性.
2.循环是否都正常,就是,是否存在忘记写while(1)这些.
3.按段屏蔽内容,逐步放开,直到定位准确.
回复

使用道具 举报

5

主题

133

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1782
金钱
1782
注册时间
2015-3-13
在线时间
271 小时
发表于 2022-8-1 17:34:05 来自手机 | 显示全部楼层
楼主的问题解决了没? 我也是程序运行进入hardfault
回复

使用道具 举报

10

主题

40

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2873
金钱
2873
注册时间
2020-4-30
在线时间
218 小时
 楼主| 发表于 2022-8-2 09:08:23 | 显示全部楼层
shiqurizi 发表于 2022-8-1 17:34
楼主的问题解决了没? 我也是程序运行进入hardfault

没,通过别的途径解决的,不过大概率是数组越界了
回复

使用道具 举报

5

主题

133

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1782
金钱
1782
注册时间
2015-3-13
在线时间
271 小时
发表于 2022-8-2 23:20:47 来自手机 | 显示全部楼层
是什么途径呢?
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 09:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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