你好,我购买了一个6722的开发板,采用裸机开发,配置主频为200Mhz,不采用优化等级,直接在main函数内for循环内执行输出GPIO高低电平,采用示波器测量GPIO间隔为40ns,在两次IO操作中间,插入一次255次循环累计浮点乘法指令,如下:
x=1.1;
y=0.999;
GPIO(on)
for(i=0;i<0xff;i++)
{
x=x*y;
}
GPIO(off)
示波器抓出IO操作间距为50us,采用优化等级-O2,则可优化到25us,而我用arm9,400Hz的测量才35us,请问是否还有优化手段,还是6722只能到这种程度了?
Thomas Yang1:
对于循环优化,TI 编译器有很多手段
建议参考文档 SPRA666(Hand-Tuning Loops and Control Code on the
TMS320C6000)
链接如下: http://www.ti.com.cn/cn/lit/an/spra666/spra666.pdf
Yu Liu:
回复 Thomas Yang1:
Thomas在下面的链接里面还推荐了更多的优化文档。
www.deyisupport.com/…/5101.aspx
具体到您的代码“ x=x*y;”,我们可以看出循环之间非常强的依赖关系。下次的x输入依赖于上一次的x结果。这样的话可能导致编译器无法排出软件流水无法发挥TI DSP的功能。可以打开编译器的-k -s开关看看编译器产生汇编文件中的software pipeline信息。
TI中文支持网