IAR MSP430 v2.21 -> v3.10 проблемы с volatile
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Kurt 05 апреля 2004 г. 14:27

Был вот такой простой код:

volatile unsigned int cnt_user_timeout = 0;

void delay_ms10 (unsigned int ms10)
{
cnt_ms10_delay = ms10;
while(cnt_ms10_delay) continue;
}

void user_isr_handler (void)
{
if (cnt_ms10_delay) cnt_ms10_delay--;
...
}

В IAR 2.21 при оптимизации Speed-Medium было:

void delay_ms10 (unsigned int ms10)
MOV.W R12, &cnt_ms10_delay
??delay_ms10_0:
CMP.W #0x0, &cnt_ms10_delay
JNE ??delay_ms10_0
RET

т.е. все правильно, а вот IAR 3.10 с той же оптимизацией выдал вот такой перл:

void delay_ms10 (unsigned int ms10)
MOV.W R12, &cnt_ms10_delay
??delay_ms10_0:
CMP.W #0x0, R12
JNE ??delay_ms10_0
RET

Т.е. volatile был проигнорирован.

Так что похоже, Improved compiler optimizations несет в себе новые сюрпризы

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru