|
发表于 2005-9-3 13:34:20
|
显示全部楼层
摘自"http://www.atmanecl.com/ChineseSite/CCCC.htm"
"几种AVR C语言编译器的比较"
在代码效率和速度方面,IAR,CodeVisionAVR,ICCAVR和AtmanAvr比较如下:
对下面的程序进行代码效率分析:
void Delay(void)
{
unsigned char a, b;
for (a =1;a;a++)
for (b =1;b;b++)
;
}
void LED_On(int i){ PORTB=~(1<<i); Delay();
}
void main(void)
{
int i;
MCUCR=0x00;
DDRB =0xFF;
PORTB =0xFF;
while (1)
{
for (i =0;i <8;i++)
LED_On(i);
for (i =8;i >0;i--)
LED_On(i);
for (i =0;i <8;i +=2)
LED_On(i);
for (i =7;i >0;i -=2)
LED_On(i);
}
}
编译后生成的程序代码 编译器 程序代码字节数
IAR 413
ICCAVR 311
CodeVisionAVR 327
AtmanAvr(GCC) 211
KEIL51 136 LED 变化的速度明显慢得多
注:对于KEIL PORTB 换成P1,对于AtmanAvr 'void main' 换成 'int main'。
对一个浮点运算程序进行代码速度分析:
void main(void)
{
float x,y,z;
x = 1.0;
y = 2.0;
z = sin(x+y);
}
编译后生成的代码和在8MHz 晶振下运行所需时间对比如下: 编译器 程序代码字节数 执行时间(8MHz) 效率
IAR 1237 747.5us 7.09
ICCAVR 1991 950.75us 5.58
CodeVisionAVR 1267 521us 10.17
AtmanAvr(GCC) 1292 728.25us 7.28
KEIL51 1403 5.301ms 1
注:对于AtmanAvr 'void main' 换成 'int main'。 |
|