打印

STM8207RB COMSIC浮点数运算出错问题(香主帮忙看看)

[复制链接]
2336|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xxlest|  楼主 | 2011-3-29 21:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前晚花了一个通宵没解决问题,因为涉及到的订单比较大,当时老板坐镇陪同通宵,直到天亮还没找到问题

其中程序定义了几个float类型,当数据较大时,做float类型乘以float时,计算出来的结果是错误结果,开始以为是其他指针溢出,将计算结果覆盖了一部分,后来单独提取出来调试,并初始化为276757883,仿真查看变量值时发现赋的值是2.3058430e+018,换成赋值为7883则变量能赋值成功,如:
void main(void)
{
    sys_init();//系统初始化
  whie(1)
  {
    float resutl1= 276757883;//单步执行结果赋值为2.3058430e+018
    float resutl2=1.0;//单步调试时,被跳过,被编译器优化的结果
    float result3=0.0000146;//单步查看赋值成功
    float result 4 =0;//单步查看赋值成功
    s32 result5=1;//单步查看赋值成功

    result2 = result1-3055616;//单步执行 result2计算出的结果是2.3058430e+018
    result4 = result1*result3;//单步执行后 运算结果为3.36653063e+013
    Print6Digit(24,4,0,result2);//LCD显示
    Print6Digit(24,4,0,result4);//LCD显示
  }
}

开始以为是float范围不够,换成double型结果一样
本人做的系统是采用24位AD,故采集出来的AD值较大,当到达一定程度时就开始出错,怀疑是COMSIC 编译器问题,大家帮忙看看,开发时间宝贵,卡在这都好几天,都想到换单片机系统了
沙发
qianguiyi| | 2011-3-30 20:41 | 只看该作者
在需要做浮点运算的地方关掉中断,算完后再开中断就可以了

使用特权

评论回复
板凳
xxlest|  楼主 | 2011-3-31 18:16 | 只看该作者
本帖最后由 xxlest 于 2011-3-31 18:17 编辑

换成IAR 编译器 即解决
感谢楼上

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

8

帖子

1

粉丝