[an error occurred while processing this directive]
Ответ: С real time проблем не должно быть, поскольку компилятор генерирует
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
миниатюрный аудио-видеорекордер mAVR

Отправлено Bill 11 июля 2002 г. 08:13
В ответ на: Ответ: отправлено serdgik 11 июля 2002 г. 07:40

код достаточно оптимально. В крайнем случае ассемблерный выход компилятора Вы можете подредактировать вручную, тем более, что в V2.27B, которой Вы пользуетесь, это сделать весьма просто.
Теперь о volatile. Это модификатор класса памяти, который говорит компилятору о том, что данная переменная может быть изменена неизвестным компилятору способом, в частности в процедурах обработки прерываний.
В этих случаях при обработке выражений с этой переменной компилятор не оптимизирует код. Маленький пример из моей практики:
while (!(IntFlags & TIMER0_BIT)); // Т.е ожидание установки флажка прерывания от таймера
Компилятор сгененировал примерно такой код
ldi r30, IntFlags
ld r16, z
?1: sbis r16, 1
rjmp ?1
.....
Плучился бесконечный цикл, поскольку компилятор не знал, что переменная будет изменяться по прерываниям. После объявления
volatile char IntFlags
все всало на свои места - код стал таким

ldi r30, IntFlags
?1: ld r16, z
sbis r16, 1
rjmp ?1
.....
Почитать об этом можно в документации IAR "Compiler Reference Guide".
Если будут вопросы - задавайте, чем смогу - помогу.

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

Ответы



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

E-mail: info@telesys.ru