找回密码
 立即注册
查看: 215|回复: 8

AI8051强制数据转换会导致数据错误,进而引起MCU重启

[复制链接]
已绑定手机

4

主题

9

回帖

50

积分

注册会员

积分
50
发表于 2025-2-26 10:36:11 | 显示全部楼层 |阅读模式
截图202502261031175992.jpg

我将signed short类型参数,强制转换成%.1f float类型,数据发生错误,并且重启
我移植了在stm32上使用的卡尔曼滤波函数,其中涉及到整形和浮点型的转换,导致执行此函数单片机会重启
请问该如何解决
截图202502261036069584.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-29 08:28:25
已绑定手机

17

主题

446

回帖

1173

积分

金牌会员

积分
1173
发表于 2025-2-26 11:11:28 | 显示全部楼层
应该不是这里的问题或不使用MDU32试试
回复 支持 反对

使用道具 举报 送花

已绑定手机

4

主题

9

回帖

50

积分

注册会员

积分
50
发表于 2025-2-26 11:24:39 | 显示全部楼层
Ayb_*** 发表于 2025-2-26 11:11
应该不是这里的问题或不使用MDU32试试

我做了测试,signed short转化成float之后,数据会发生错误我用的陀螺仪测试,正常情况数据额是个位数整形,转换后明显发生错误
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-29 08:28:25
已绑定手机

17

主题

446

回帖

1173

积分

金牌会员

积分
1173
发表于 2025-2-26 11:31:09 | 显示全部楼层
TR*** 发表于 2025-2-26 11:24
我做了测试,signed short转化成float之后,数据会发生错误我用的陀螺仪测试,正常情况数据额是个位数整 ...

要相信编译器,这种转换太正常了,不可能有什么问题
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2025-2-26 13:41:10 | 显示全部楼层
是否使用了REMOVEUNUSED?
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2025-2-26 14:25:15 | 显示全部楼层
Ayb_*** 发表于 2025-2-26 11:31
要相信编译器,这种转换太正常了,不可能有什么问题

这个还真不一定不是编译器的问题,,

论坛里有一篇关于32位模式下,使用除法引起单片机重启的问题,,
https://www.stcaimcu.com/forum.p ... B%E9%87%8D%E5%90%AF
根据这篇帖子中5楼的回复,编译器生成了一个复位指令。。
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

已绑定手机

4

主题

9

回帖

50

积分

注册会员

积分
50
发表于 2025-2-26 15:26:25 | 显示全部楼层
Debu*** 发表于 2025-2-26 13:41
是否使用了REMOVEUNUSED?

确实使用了因为edata空间不够,我删除REMOVEUNUSED,然后修改变量试一试

点评

同时使用浮点库和REMOVEUNUSED可能导致各种稀奇古怪的错误,比如跑飞、死机、异常复位等 使用浮点库,不要使用REMOVEUNUSED,不使用的代码注释掉  详情 回复 发表于 2025-2-26 15:30
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2025-2-26 15:30:31 | 显示全部楼层
TR*** 发表于 2025-2-26 15:26
确实使用了因为edata空间不够,我删除REMOVEUNUSED,然后修改变量试一试

同时使用浮点库和REMOVEUNUSED可能导致各种稀奇古怪的错误,比如跑飞、死机、异常复位等
使用浮点库,不要使用REMOVEUNUSED,不使用的代码注释掉
猜测可能的原因是浮点库内部是汇编写的,浮点库是要替换掉math.h的,使用REMOVEUNUSED时,Keil不能正确判断哪些代码是否需要编译和替换,从而导致异常
DebugLab
回复 支持 反对

使用道具 举报 送花

已绑定手机

4

主题

9

回帖

50

积分

注册会员

积分
50
发表于 2025-2-26 17:23:26 | 显示全部楼层
Debu*** 发表于 2025-2-26 15:30
同时使用浮点库和REMOVEUNUSED可能导致各种稀奇古怪的错误,比如跑飞、死机、异常复位等
使用浮点库,不要 ...

解决了,C251要用double转换成浮点型,我用的float会出错
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:31 , Processed in 0.148700 second(s), 103 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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