登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

做I2c感受到GCC的效率啊

作者:Anitya 栏目:单片机
做I2c感受到GCC的效率啊
分别用GCC和ICC编译相同的一段程序,我编译的是I2c的中断程序.ICC手头上有正版,打勾了Enable Code Compression,GCC的优化参数是默认的Os.

GCC:
    if (twst == TW_SR_SLA_ACK)
  c4:    c0 36           cpi    r28, 0x60    ; 96
  c6:    61 f0           breq    .+24         ; 0xe0
    {
        TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWEA)|(1<<TWIE);
    }
    else if (twst == TW_SR_DATA_ACK)
  c8:    c0 38           cpi    r28, 0x80    ; 128
  ca:    51 f0           breq    .+20         ; 0xe0
        TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWEA)|(1<<TWIE);
    }
    else if (twst == TW_SR_STOP)
  cc:    c0 3a           cpi    r28, 0xA0    ; 160
  ce:    41 f0           breq    .+16         ; 0xe0
    {
        TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWEA)|(1<<TWIE);
    }
    else if (twst == TW_ST_SLA_ACK)
  d0:    c8 3a           cpi    r28, 0xA8    ; 168
  d2:    11 f0           breq    .+4          ; 0xd8
    {
        TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWIE);    
    }
    else if (twst == TW_ST_DATA_ACK)
  d4:    c8 3b           cpi    r28, 0xB8    ; 184
  d6:    11 f4           brne    .+4          ; 0xdc
    {
        TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWIE);
  d8:    85 e8           ldi    r24, 0x85    ; 133
  da:    03 c0           rjmp    .+6          ; 0xe2
    }    
    else if (twst == TW_ST_DATA_NACK)
  dc:    c0 3c           cpi    r28, 0xC0    ; 192
  de:    11 f4           brne    .+4          ; 0xe4
    {
        TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWEA)|(1<<TWIE);
  e0:    85 ec           ldi    r24, 0xC5    ; 197
  e2:    86 bf           out    0x36, r24    ; 54
    }

ICC:
(0039)     if (tmpchr == TW_SR_SLA_ACK)
    0050 3640      CPI    R20,0x60
    0051 F419      BNE    0x0055
(0040)     {
(0041)         TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWEA)|(1<<TWIE);
    0052 EC85      LDI    R24,0xC5
    0053 BF86      OUT    P36,R24
(0042)     }
    0054 C018      RJMP    0x006D
(0043)     else if (tmpchr == TW_SR_DATA_ACK)
    0055 3840      CPI    R20,0x80
    0056 F419      BNE    0x005A
(0044)     {
(0068)         TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWEA)|(1<<TWIE);
    0057 EC85      LDI    R24,0xC5
    0058 BF86      OUT    P36,R24
(0069)     }
    0059 C013      RJMP    0x006D
(0070)     else if (tmpchr == TW_SR_STOP)
    005A 3A40      CPI    R20,0xA0
    005B F419      BNE    0x005F
(0071)     {
(0076)         TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWEA)|(1<<TWIE);
    005C EC85      LDI    R24,0xC5
    005D BF86      OUT    P36,R24
(0077)     }
    005E C00E      RJMP    0x006D
(0078)     else if (tmpchr == TW_ST_SLA_ACK)
    005F 3A48      CPI    R20,0xA8
    0060 F419      BNE    0x0064
(0079)     {
(0083)         TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWIE);    
    0061 E885      LDI    R24,0x85
    0062 BF86      OUT    P36,R24
(0084)     }
    0063 C009      RJMP    0x006D
(0085)&nb
2楼: >>参与讨论
qdshen
我试过:GCC的优化确实不错,接近汇编哦........
 
参与讨论
昵称:
讨论内容:
 
 
相关帖子
新手上路-----请教TINY15L
90S2313有没有停产啊?
求教:关于atmega16(我是初学)
我在用at90s8535
怎样查看 <结构位变量>
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号