Есть некая глобальная переменная, которая является счетчиком и инкриминируется в процедуре обработки прерывания таймера. Есть функция выдержки времени, в которой используется эта переменная. Перед функцией я обнуляю переменную-счетчик и жду пока таймер не отсчитает необходимое количество времени, после этого выхожу из функции задержки. Проблема в том, что при включении оптимизации компилятор выкидывает строку обнуления, т.е. (я так понимаю) он не видит, что она меняется в таймере и считает строку обнуления лишней! Как это можно обойти? Вместо обнуления пробовал считывать текущее значение таймера и прибавлять к нему требуемую задержку и далее эту величину подставлять в условие, но там похожая ситуация.
void delay(unsigned int time) { while (timer < time); { } }
#pragma vector=TIMERA0_VECTOR __interrupt void TIMERA0_INT( void ) { timer++; }
void function(void) { timer = 0; delay(2200); }
|