前晚花了一个通宵没解决问题,因为涉及到的订单比较大,当时老板坐镇陪同通宵,直到天亮还没找到问题
其中程序定义了几个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 编译器问题,大家帮忙看看,开发时间宝贵,卡在这都好几天,都想到换单片机系统了 |