Dear all, I'm relatively new to AVR-GCC and try to do something,
that is standing procedure in C51 for me. I want to program a delay based on a timer-ISR. The code looks like this: ********************************* //isr-test, very basic // cpu: ATMega128 // speed: 16 mhz #include <avr/io.h> #include <avr/interrupt.h> unsigned char TimerTick; //--------------------------------------- // Timer/Counter1 Compare Match A //--------------------------------------- ISR(TIMER1_COMPA_vect) // timer_compare_a { TimerTick ? TimerTick-- : 0; } //--------------------------------------- // main //--------------------------------------- int main() { unsigned char a; // --- TIMER1_COMPA irq --- // selected time = 10 ms (160000 ticks) // prescaler = 8 (8 ticks ... 32.768 ms) TCCR1B = (1<<WGM12)|(1<<CS11); OCR1AH = 0x4e; OCR1AL = 0x20; TIMSK |= (1<<OCIE1A); // main loop sei(); for (;;) { TimerTick = 10; while(TimerTick); a = ~a; } return(0); } ******************************** When I compile this without optimization (-O0) Everything is just fine and as expected. When I select ANY other optimization level, the resulting assembler code looks like this (starting at "TimerTick = 10;"): ********************** 45: TimerTick = 10; +00000086: E08A LDI R24,0x0A Load immediate +00000087: 93800100 STS 0x0100,R24 Store direct to data space +00000089: CFFF RJMP PC-0x0000 Relative jump *********************** so the program stops here and loops. Where is my thinking wrong? I tried all sources I could imaging. Thanks for any help Karl
_______________________________________________ AVR-GCC-list mailing list AVR-GCC-list@nongnu.org http://lists.nongnu.org/mailman/listinfo/avr-gcc-list