Баг IAR AVR EC++ 3.20C

Do you have a question? Post it now! No Registration Necessary

Threaded View
Hi All,

По оптимизации кода на размер IAR 3.20 получается где-то на 5...10% лучше,
чем 2.28. Однако в нем есть баги.

void RTC::I2C_Stop()
{
_WDR();
TWCR = 0x94;
while(TWCR&0x10); // Wait until TWSTOP is cleared
}


     25          void RTC::I2C_Stop()
   \                     ??I2C_Stop:
     26          {
     27          _WDR();
   \   00000000   95A8                       WDR
     28          TWCR = 0x94;
   \   00000002   E904                       LDI     R16,148
   \   00000004   93000074                   STS     116,R16
     29          while(TWCR&0x10); // Wait until TWSTOP is cleared
   \                     ??I2C_Stop_1:
   \   00000008   CFFF                       RJMP    ??I2C_Stop_1
     30          }

 Такие дела :(
 
 VLV

"Быть честным - лучший способ оставаться бедным" (c) Hаполеон Бонапарт


Баг IAR AVR EC++ 3.20C
Привет Vladimir!

14 Oct 04 17:49, Vladimir Vassilevsky писал All:

 VV> TWCR = 0x94;
 VV> while(TWCR&0x10); // Wait until TWSTOP is cleared

 VV>    \   00000002   E904                       LDI     R16,148
 VV>    \   00000004   93000074                   STS     116,R16
 VV>      29          while(TWCR&0x10); // Wait until TWSTOP is cleared
 VV>    \                     ??I2C_Stop_1:
 VV>    \   00000008   CFFF                       RJMP    ??I2C_Stop_1

    Объявление TWCR можно увидеть?

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... Пирожок вареный с вареньем.

Баг IAR AVR EC++ 3.20C
Thu Oct 14 2004 23:34, Alex Mogilnikov wrote to Vladimir Vassilevsky:

 
 VV>> TWCR = 0x94;
 VV>> while(TWCR&0x10); // Wait until TWSTOP is cleared

 VV>>    \   00000002   E904                       LDI     R16,148
 VV>>    \   00000004   93000074                   STS     116,R16
 VV>>      29          while(TWCR&0x10); // Wait until TWSTOP is cleared
 VV>>    \                     ??I2C_Stop_1:
 VV>>    \   00000008   CFFF                       RJMP    ??I2C_Stop_1

 AM>     Объявление TWCR можно увидеть?

 См. штатные файлы iom128.h и iomacro.h из комплекта. Увы, там все
 правильно описано.

 Примечание: если писать так, как рекомендуют в мануале: while(TWCR_TWSTO),
 то получается точно такой же неправильный результат.

 Лечение: локально отключить оптимизацию c помощью прагмы.

 VLV

 P.S. Это давно отлаженный код, который успешно собирался всеми предыдущими
 версиями.

 

"Быть честным - лучший способ оставаться бедным" (c) Hаполеон Бонапарт


Баг IAR AVR EC++ 3.20C
Привет Vladimir!

15 Oct 04 00:57, Vladimir Vassilevsky писал Alex Mogilnikov:

 AM>>     Объявление TWCR можно увидеть?

 VV>  См. штатные файлы iom128.h и iomacro.h из комплекта. Увы, там все
 VV>  правильно описано.

    Право же, не хочется покупать сабж ради того чтобы посмотреть декларацию
символа... :)

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... О сколько нам открытий чудных готовит открывашки крюк!

Site Timeline