AI8051强制数据转换会导致数据错误,进而引起MCU重启
我将signed short类型参数,强制转换成%.1f float类型,数据发生错误,并且重启
我移植了在stm32上使用的卡尔曼滤波函数,其中涉及到整形和浮点型的转换,导致执行此函数单片机会重启
请问该如何解决
应该不是这里的问题或不使用MDU32试试 Ayb_ice 发表于 2025-2-26 11:11
应该不是这里的问题或不使用MDU32试试
我做了测试,signed short转化成float之后,数据会发生错误我用的陀螺仪测试,正常情况数据额是个位数整形,转换后明显发生错误 TRX 发表于 2025-2-26 11:24
我做了测试,signed short转化成float之后,数据会发生错误我用的陀螺仪测试,正常情况数据额是个位数整 ...
要相信编译器,这种转换太正常了,不可能有什么问题 是否使用了REMOVEUNUSED? Ayb_ice 发表于 2025-2-26 11:31
要相信编译器,这种转换太正常了,不可能有什么问题
这个还真不一定不是编译器的问题,,
论坛里有一篇关于32位模式下,使用除法引起单片机重启的问题,,
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=9432&highlight=%E9%99%A4%E6%B3%95%2B%E9%87%8D%E5%90%AF
根据这篇帖子中5楼的回复,编译器生成了一个复位指令。。 DebugLab 发表于 2025-2-26 13:41
是否使用了REMOVEUNUSED?
确实使用了因为edata空间不够,我删除REMOVEUNUSED,然后修改变量试一试 TRX 发表于 2025-2-26 15:26
确实使用了因为edata空间不够,我删除REMOVEUNUSED,然后修改变量试一试
同时使用浮点库和REMOVEUNUSED可能导致各种稀奇古怪的错误,比如跑飞、死机、异常复位等
使用浮点库,不要使用REMOVEUNUSED,不使用的代码注释掉
猜测可能的原因是浮点库内部是汇编写的,浮点库是要替换掉math.h的,使用REMOVEUNUSED时,Keil不能正确判断哪些代码是否需要编译和替换,从而导致异常
DebugLab 发表于 2025-2-26 15:30
同时使用浮点库和REMOVEUNUSED可能导致各种稀奇古怪的错误,比如跑飞、死机、异常复位等
使用浮点库,不要 ...
解决了,C251要用double转换成浮点型,我用的float会出错
页:
[1]