OpenEdv-开源电子网

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

由强制数据类型转换引起的HardFault,一般可能是什么原因造成的?

[复制链接]

11

主题

33

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
301
金钱
301
注册时间
2020-4-22
在线时间
57 小时
发表于 2020-7-2 16:40:17 | 显示全部楼层 |阅读模式
5金钱
我在STM32之中进行强制数据类型转换(u16转float)时,程序在单片机跑时会卡死(应该是出错了)
这样会打印出bug2,bug3打不出来

将buffer改成u16,不进行强制数据类型转换的时候,可以正常运行。
定位到问题之后,进行单步调试,发现buffer[0]=(float)buffer1[0]进入了HardFault,请问一下大家这可能是由于什么原因造成的?

最佳答案

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

谢谢原子哥回答,问题已经解决了,是由于数组创建不规范造成的。按照C标准,数组创建时,不应该使用变量作为下标值,但是,在Keil编译器,以变量作为数组下标创建数组又可以编译通过,我以为这样创建数组没有问题。但是好像就是因为这个原因出现问题了,虽然具体还是不清楚是什么原因(数据转换出现问题,正常使用没出现问题),当改为以常量申请数组之后,就没再出现HardFault了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

33

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
301
金钱
301
注册时间
2020-4-22
在线时间
57 小时
 楼主| 发表于 2020-7-2 16:40:18 | 显示全部楼层
正点原子 发表于 2020-7-3 01:45
数据类型对么?简化下代码看看(不用数组)

谢谢原子哥回答,问题已经解决了,是由于数组创建不规范造成的。按照C标准,数组创建时,不应该使用变量作为下标值,但是,在Keil编译器,以变量作为数组下标创建数组又可以编译通过,我以为这样创建数组没有问题。但是好像就是因为这个原因出现问题了,虽然具体还是不清楚是什么原因(数据转换出现问题,正常使用没出现问题),当改为以常量申请数组之后,就没再出现HardFault了。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2020-7-3 01:45:36 | 显示全部楼层
数据类型对么?简化下代码看看(不用数组)
回复

使用道具 举报

4

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2019-8-17
在线时间
21 小时
发表于 2020-7-14 13:04:36 | 显示全部楼层
如果数组超界限作为指针传输很容易出问题
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-25 20:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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