TI中文支持网
TI专业的中文技术问题搜集分享网站

关于release和debuge编译产物的优化问题

有一个函数,debug编译产物运行结果正确,release编译产产物运行结果有错误,请问优化导致了那些问题?

static __inline f8  __cal_BaseCarrPh1(chx_para* pCH,u4 RegH,u4 RegL)

double   result;
unsigned int  quotient;

IFCycleMod = 500000;

IF_ratio = 500000/25000000;

result = RegH*IFCycleMod + RegL*IF_ratio;

quotient =result/65536;

result = result – quotient*65536;

return result;

这个函数就是求RegH*IFCycleMod + RegL*IF_ratio对65536求余,并加上小数部分,其返回值应该小于65536,release版本固件返回值有的远大于65536。

zhengbao ou:

打印了信息,发现问题应该出在quotient*65536运算上面

zhengbao ou:

回复 zhengbao ou:

将result = result – quotient*65536改为result = result – (double)quotient*65536;结果就没有问题,或者用while(rest>=0){result = result – 65536;quotient++}代替quotient =result/65536也没有问题,请教原因?

Tony Tang:

回复 zhengbao ou:

看看编译产生的汇编代码,对比分析一下。

Ryan BL:

类型前面建议都明确,特别是不匹配的类型。我发现好多优化后的类型不匹配的情况,最常见的就是u32赋值给u64后,u64成“负数”,明确的在u32前面加上个u64的强转就好了。

赞(0)
未经允许不得转载:TI中文支持网 » 关于release和debuge编译产物的优化问题
分享到: 更多 (0)