在线时间18 小时
UID122846
注册时间2008-8-25
NXP金币0
该用户从未签到
中级会员
 
- 积分
- 385
- 最后登录
- 2020-8-7
|
本帖最后由 njhuangyuan 于 2018-9-27 16:36 编辑
一段很简单的程序,简单的浮点数运算,然后把值用通讯发出去。这个文件不优化的时候没问题,优化后浮点数就随机出错,有时候变成无效数据,有时候变很大的数据。这个是啥原因?
void samptosendbuff(uint8* m_ptr,uint8 n)
{
uint32 ldate;
uint16 udata;
uint16 *uptr;
uint8 j,point;
float m_fVar;
uptr=(uint16*)&Sample;
ldate=uptr[n+1];
ldate<<=16;
udata=uptr[n];
ldate+=udata;
if((ldate&0x80000000)!=0)
{
ldate=-ldate;
m_fVar=ldate;
m_fVar=m_fVar*(-1.0);
}
else
m_fVar=(float)ldate;
point=2;
for(j=0;j<point;j++)
{
m_fVar/=10.0;
}
gen_print_float(m_ptr, m_fVar); //把浮点数放到m_ptr指向的缓冲区
//本文件设置不优化时m_fVar完全正常,但是一旦设置优化(None(-O0),m_fVar就随机的出错,有时候无效,有时候非常大的值。用其它方式调试过ldate的值是确定对的,也没有负数出现
}
最佳答案
副作用主要为:变量可能会被意想不到地改变,但是优化器在用到这个变量时却是使用的保存在寄存器里的备份,你可以去百度或谷歌一下具体案例。
|
|