在用C28346做for循环操作时,觉得花费的时间有些多:
for(pll=0;pll<8;pll++)
{
tpll=udclevel_sz[pll];
turn[tpll]=(7-pll);
turn_en[tpll]=turn[tpll]>>2;
turn_led[tpll]=turn[tpll]&0x03;
if((interrupt_count==2)&&(pll==0))
{
turn_led[tpll]=0;
}
turnen=(turn_en[tpll]<<tpll)|turnen;
turnon=(turn_led[tpll]<<(2*tpll))|turnon;
}
for(pll=0;pll<16;pll++)
{
if(fudc_ave_sz[pll]!=fudc_sz[pll])
{
error_count++;
}
}
if(error_count>0)
{
GPOC_NFPGAEN=1;
}
else
{
GPOS_NFPGAEN=1;
}
上述两个for循环操作共用去将近3.6μs的时间,请问这么点时间正常吗?更改CCS的设置是否可以使编译得到优化?
注:其中只有fudc_ave_sz和fudc_sz两个数组为浮点数组,其余变量均为16位整型数。
Johnson Chen1:
楼主是如何测试这个时间的?测试过程中是否保证没有中断产生?浮点数组为float还是double?
可以看一下反汇编内容。
在用C28346做for循环操作时,觉得花费的时间有些多:
for(pll=0;pll<8;pll++)
{
tpll=udclevel_sz[pll];
turn[tpll]=(7-pll);
turn_en[tpll]=turn[tpll]>>2;
turn_led[tpll]=turn[tpll]&0x03;
if((interrupt_count==2)&&(pll==0))
{
turn_led[tpll]=0;
}
turnen=(turn_en[tpll]<<tpll)|turnen;
turnon=(turn_led[tpll]<<(2*tpll))|turnon;
}
for(pll=0;pll<16;pll++)
{
if(fudc_ave_sz[pll]!=fudc_sz[pll])
{
error_count++;
}
}
if(error_count>0)
{
GPOC_NFPGAEN=1;
}
else
{
GPOS_NFPGAEN=1;
}
上述两个for循环操作共用去将近3.6μs的时间,请问这么点时间正常吗?更改CCS的设置是否可以使编译得到优化?
注:其中只有fudc_ave_sz和fudc_sz两个数组为浮点数组,其余变量均为16位整型数。
BIN YAO1:
回复 Johnson Chen1:
是放在while(1)里面执行的,每次执行完翻转管脚,然后通过示波器观察管脚高低电平的时间。程序中并未开启中断。浮点数组定义的是float。反汇编不是很懂怎么看。