Здравствуйте господа, такой вопрос: имеется IAR 4.10B, имеется AVRStudio 4.11.401, имеется MEGA32 (частота 4 МГц), имеется тупая задержка от timer0 де-то 200 мкс теперь вопрос: почему перечисленныые проги ,при работе в режиме симулятора, ведут себя по разному при одинаковом коде, который, кстати тоже имеется:
#pragma vector=TIMER0_OVF_vect __interrupt void irqHandler(void) { TIMSK=0; //здесь тормозим таймер пока не выполнится функция задержки ... void del(); }
void del(void) //сюда приходим после прерывания { TIMSK=1; //здесь запускаем таймер (разрешаем прерывание) ... //здесь успеваем сделать нечто не связанное с прерыванием }
void main(void) { init_peref(); ... }
void init_peref(void) { ... TCCR0=0x02; //делитель clk/8 TCNT0=0x06; //начальное значение = 6 OCR0=0x00; //сравнить с 0 (итого де-то 200 мс) asm ("sei"); }
Так вот студия после TIMSK=1 сразу переходит на #pragma... А IAR после TIMSK=1 продолжаетвыполнять код. Короче как оно должно быть на самом деле? Где истина? ЗЫ Сейчас в отпуске на даче, даташита под рукой нет, да даже еслибы и был все равно момент интересный. Кто объяснит?
|