主题中讨论的其他部件:controlSUITE, C2000WARE
工具/软件:TI C/C++编译器
我想确认我们是否有编译器问题。
在优化关闭时,我们的示例中的以下功能可以正常工作:
#pragma code_section (RFFT_F32_sincostate_TMU0,".TI.ramfunc")
void RFFT_F32_sincostated_TMU0 (RFFT_F32_struct_handle FFT)
{
浮点delta_phi = 0.125 ;
uINT16_t k = 1;
uINT16_t i,j;
float *dst = FFT->CosSinBuf;
对于(i = 3;i <= FFT->FFTStages;I++){
浮动phi = delta_phi;
用于(j=1;j <= k;j ++)
{
*DST++=__cospuf32 (phi);
*DST++=__sipuf32 (phi);
PHI += delta_phi;
}
*DST++= 0.0 ;
*DST++= 1.0 ;
K =(k * 2)+ 1;
Delta_phi = delta_phi * 0.5 ;
}
}
但是,当将优化级别设置为5时,数据似乎已损坏。 这些是设置:
-v28 -ml -mt --cla_support=cla1 --float_support=fpu32 --tmu_support=tmu0 --vcu_support=vcu2 -O3 --opt_for speed=5 --fp_mode=strict
编译器版本为TI v.16.9 .5.LTS。
从分解的代码来看,操作的数量似乎少于不违反管道的数量。 对于正弦和余弦运算符,在检索结果(4p指令)之前,我们应该需要4个指令,但我们是简短的:
$C$L12: 空间研委会32 R1H,R3H ;[CPU_]|286| SINPUF32 R0H,R3H ;[CPU_]|287| 无操作 ;[CPU_] 无操作 ;[CPU_] MOV32. *XAR5++,R1H ;[CPU_]|286||| ADDF32 R3H,R3H,R2H ;[CPU_]|289| MOV32. *XAR5++,R0H ;[CPU_]|287|
以上是优化后的结果。 如果没有优化,编译器将添加所需数量的NOP,并且代码将正常运行。
请您评论一下吗?
谢谢!