Gast
#40726
Hallo, ich kämpfe nun schon seit langer Zeit mit dem AVR - bisher meist als Sieger. Aber der tiny26 zeit merkwürdiges Verhalten im Zusammenhang mit dem avr-gcc. Folgendes kurzes Programm: #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> /*TIMER0 overflow interrupt*/ SIGNAL(SIG_OVERFLOW0){ PORTB^=1; /* toggle PORTB0 */ TCNT0=0x7f; /* reload counter */ } int main(){ char c; DDRB=0xff; TCNT0=0x7f; /* load counter */ TCCR0=1; /* count with cpu clock */ sbi(TIMSK,TOIE0);/* enable TIMER0 OVI */ sei(); /* enable interrupts */ for(c=0x0f;c!=0;c--) PORTB^=2; /* toggle PORTB1 */ for(;;) /* endless loop */ return 0; } sollte ja kurz nach dem Reset ein wenig auf PORTB1 wackeln und danach nur noch über den TIMER0-Interrupt PORTB0 toggeln. Leider zeigt die Realität ein anderes Bild. Nach jedem TIMER-Interupt wird der Code zum Ändern von PORTB1 durchlaufen - der AVR scheint also irgendwie zum RESET-Vektor zu gelangen. Warum und Wie? Ich habe um Fehlerquellen auszuschliessen auch die Optimierung variiert - ohne Ergebniss. Ohne Angabe von "-O" tut sich auf PORTB1 gar nichts. Auch scheint es egal zu sein, was ich in TCNT0 nachlade. Wird der tiny26 nicht voll unterstützt? Was habe ich nicht kappiert? PS: Ähnliche Symptome habe ich mit dem 2343 erfahren. Sebastian