AVR单片机怎么运算浮点数就死机????

[复制链接]
4629|11
 楼主| areshan 发表于 2010-10-12 21:31 | 显示全部楼层 |阅读模式
用AVR做个显示数码管的程序,但是一用sum=sum*0.05986;这样的浮点数预算,单片机就不能运算出正确的结果,好像死机一样。。。。。。。怎么会这样呢?????
chunyang 发表于 2010-10-12 22:30 | 显示全部楼层
程序不能这么写,编译会出错。
 楼主| areshan 发表于 2010-10-13 08:55 | 显示全部楼层
为什么呢??? 2# chunyang
兰天白云 发表于 2010-10-13 09:19 | 显示全部楼层
我们的同事都这么写,没问题
chunyang 发表于 2010-10-13 10:29 | 显示全部楼层
这跟你用的编译器版本、平台等均有关,这样的写法不规范,兼容性差。
 楼主| areshan 发表于 2010-10-13 10:51 | 显示全部楼层
如果不用浮点数运算,改成long int sum; sum=sum*5986/100000;不知道能不能比浮点数要快?????????????????/
tjx727 发表于 2010-10-13 11:28 | 显示全部楼层
整数运算肯定比浮点运算要快,8BIT的芯片能用整型尽量用整型
 楼主| areshan 发表于 2010-10-13 18:30 | 显示全部楼层
试过结果全是0,明显数据溢出了! 7# tjx727
chunyang 发表于 2010-10-13 18:36 | 显示全部楼层
要讲究计算方法的,不是列个算式那么简单。
mxh0506 发表于 2010-10-13 22:41 | 显示全部楼层
AVR算浮点虽然不够快,但是这样的计算量应该是ms级响应吧?如果象死机一样,肯定是程序里面有别的问题。
用的什么编译器?
acute1110 发表于 2010-10-14 09:13 | 显示全部楼层
还是建议转整形计算,另外要check 编译后的汇编代码,看看编译后的具体结果来判断修改的方法
IJK 发表于 2010-10-14 10:26 | 显示全部楼层
试过结果全是0,明显数据溢出了! 7# tjx727
areshan 发表于 2010-10-13 18:30


考虑到100000超出了16位,改成这样或许好点:
long int sum;
sum=sum*5986/1000;
sum=sum/100;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

127

主题

728

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部