主页 >> 信息 >> 几种AVR C语言编译器的比较

几种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'。