Witam Jest sobie taki fragment programu:
/***************************/ unsigned int Licznik;
SIGNAL(SIG_OUTPUT_COMPARE0) { if (Licznik) Licznik--; }
int main(void) { Licznik = 100; while (Licznik); } /***************************/
oczywiście TIMER0 jest prawidłowo zainicjalizowany i tyka jak trzeba problem jest z "while (Licznik)" w programie głownym, bo kompilator go sobie "przeoptymalizował" :)
525:KodM32.c **** Licznik = 100; 2922 .LM298: 2923 0bb2 84E6 ldi r24,lo8(100) 2924 0bb4 90E0 ldi r25,hi8(100) 2925 0bb6 9093 0000 sts (Licznik)+1,r25 2926 0bba 8093 0000 sts Licznik,r24 526:KodM32.c **** while (Licznik); 2932 .L203: 2933 0bc4 0097 sbiw r24,0 2934 0bc6 F1F7 brne .L203wykombinował sobie, że wartość zmiennej globalnej Licznik ma juz w rejestrach R24:R25 i testuje sobie w pętli tylko zawartość tych rejestrów zamiast faktycznej wartości zmiennej Licznik, która zmniejszana jest w obsłudze przerwania.
Czy Ktoś z szanownych grupowiczów wie jak zmusić kompilator do robienia pętli na zmiennej, a nie na rejestrach ? Może jakoś lokalnie wyłaczyć/zmniejszyc optymalizację ?
Pozdrawiam Grzegorz Kurczyk