OpenEdv-开源电子网

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

hardfault handler问题,关于sprintf使用。

[复制链接]

2

主题

4

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2020-2-7
在线时间
16 小时
发表于 2020-5-2 16:26:23 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 x3116002486 于 2020-5-2 16:31 编辑

c8t6的芯片,用到了串口1、3,其中串口1用于串口通信接收 PMS5003返回的数据(监测pm2.5浓度),串口3接ESP8266 wifi模块用于上传数据。
情况是:注释掉串口1初始化和 pm2.5浓度检测的模块使用后,wifi模块与其他模块正常工作;取消注释一起运行时,在wifi模块上传数据的代码中会出现hardfault,我单步调试定位到下图这行代码 微信截图1.png

如果是sprintf函数的问题,那么在代码前些部分8266连接路由器也使用到这个函数,相同的用法,应该在那个位置就出错,但是每次全速运行到上图断点处再单步执行就会出错,也尝试过注释掉当前这行的sprintf,同样会在下一个sprintf出错(上图使用数组拼接组成http报文,上传数据到onenet 的物联网),sprintf后面的info是自己定义的结构体,里面都是float类型数据。

下面是出错时的一些信息:
微信截图3.png 微信截图4.png 微信截图5.png 微信截图6.png
微信截图7.png



上面图片第一张里面的a是fault reports的bfar,自己查原因时在hardfault中断函数里面写的,做了无用功,忽略就好,说明一下;尝试按照网上所说定位出错代码,应该就是第一张的_printf_fp_dec_real的对应的地址,但是看不出具体的出错代码位置。

看fault reports应该是总线故障错误:当发生数据总线错误时,将设置PRECISERR,并且为异常返回而堆叠的PC值指向导致故障的指令。
没理解这句话的意思,但是应该不是堆栈大小、数据越界问题,已尝试调8kb大小的堆与栈、调整过相应数组的大小,无效。

贴下数组定义、初始化: 定义、初始化是在wifi模块上传数据的程序里,应该是局部变量。
微信截图2.png 微信截图8.png




正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2020-5-6 01:32:12 | 显示全部楼层
回复

使用道具 举报

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2019-11-13
在线时间
16 小时
发表于 2020-8-31 09:22:47 | 显示全部楼层
楼主解决了吗,遇到了同样的问题
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-13 19:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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