Риторический вопрос знатокам """""оптимизации"""" Иара
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено Штуша-Кутуша 29 июня 2004 г. 17:39

Имеется переменная
__no_init volatile unsigned char cunter;
flag - бит битового поля которое тоже обьявленно как volatile, само обьявление длинное поэтому не привожу.
В прерывании:
__interrupt void timer1_compa_isr(void)
{
if(flag)if(--conter == 0)flag=0;
.........................
Далее имеются функции

void Pause(unsigned char time)
{
conter=time;
flag=1;
while(flag);
}
void data_wr(void)
{
............
Pause(16);
............
Pause(16);
...........
}
И все работает, но стоит сделать так
void data_wr(void)
{
............
conter=time;
flag=1;
while(flag);
............
conter=time;
flag=1;
while(flag);
...........
}
и них@я не работает второго цикла ожидания нету.
Вопроса два
1. какого черта оптимизатор выбрасывает второй цикл?
2.Как жить с компилятором если никогда не извесно что получится в результате?

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

Ответы



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

E-mail: info@telesys.ru