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

ccs3.3 F2811 开o2优化,编译后计算结果出错

项目需求使用F2811,在编译器开o2优化后,发现计算结果出错,回头看汇编文件,发现部分有符号数的加减法被转成了无符号数的计算,请问各位朋友,在解决这种问题方面有什么经验吗?

比如我的C代码实现如下:

shift = – shift_in;

tmp32_1 = (S32_T)real << shift;

tmp32_2 = (S32_T)imag << shift;

Ltemp = ADD_32_32_32(tmp32_1, tmp32_2);

tmp32_2 = SUB_32_32_32(tmp32_1,tmp32_2);

shift = – shift_in1;

Ltemp >>= shift;

Real = ROUND(Ltemp);

tmp32_2 >>= shift;

Imag = ROUND(tmp32_2);

开o2优化后,SUB_32_32_32的减法计算被替换成了SUBUL,而非不开优化时的SUBL

其中SUB_32_32_32_32等是自己写的C的内敛连函数,如inline S32_T SUB_32_32_32(S32_T Src0,S32_T Src1){ return Src0 – Src1;}

我发现,不开优化时,编译出来的SUB实际上还是LCR(或者另一个)一条调用的指令,开了o2优化后,SUB会被直接替换为SUB指令,只是有的地方编译器给出的结果似SUBUL,而非我想要的SUBL,请问在着用情况下我应该如何优化我的C代码呢?

我已经试过将SUB的结果传递给其他变量,后面在进行计算,但依旧没有达到使用SUBL的结果,直接将SUB改为tmp32_2 -= tmp32_1,开优化后的编译结果也还是SUBUL

我的程序对处理时间的要求还是挺高的。

希望大家可以讨论交流。

10#:

请问你使用是的哪个版本的编译器(注意,不是CCS IDE,而是compiler或者CGT – code generation tools),请下载最新版本的测试一下问题是否还存在,如果是,建议提供一个最简单的测试程序,我可以看一下问题在哪。

http://software-dl.ti.com/codegen/non-esd/downloads/download.htm#C2000

赞(0)
未经允许不得转载:TI中文支持网 » ccs3.3 F2811 开o2优化,编译后计算结果出错
分享到: 更多 (0)