1 | while(1)
|
2 | {
|
3 | return(1); //Endlosschleife für hauptprogramm
|
4 | }
|
den return entfernst du da gleich mal aus der Schleife.
return bedeutet "die aktuell gerade ausgeführte Funktion verlassen".
Welches ist denn die aktuell ausgeführte Funktion? Das ist main(). Und
main() möchtest du ganz sicher nicht verlassen. Denn dann gehts zurück
zum Runtime System und das friert mehr oder weniger in so einem Fall den
µC dann ein. Inklusive Deaktivierung aller Interrupts.
>
1 | > ISR(TIMER0_OVF_vect)
|
2 | > {
|
3 | > uint8_t tmp_sreg; // Speicher fuer das Statusregister
|
4 | > tmp_sreg = SREG; // Statusregister sichern
|
5 | > PORTC |= (1<<PC7); // Testpin an ausgeben
|
6 | > GV_NMRA_OV++; // Erhöhe Zeitwert (Overflow) um 1
|
7 | > SREG = tmp_sreg; // Status-Register wieder herstellen
|
8 | > }
|
9 | >
|
um das SREG brauchst du dich in C nicht kümmern. Das geht dich nichts
an, bzw. das macht der Compiler korrekt für dich. Ganz im Gegenteil,
wenn du dich bei solchen Dingen, die unter Oberhoheit des Compilers
stehen einmischt, dann bringt dir das im günstigsten Fall nichts, im
schlechtesten Fall allerdings baust du damit schwerwiegende Fehler ein.
Also: Finger weg - lass dem Compiler was des Compilers ist.
1 | ISR(TIMER0_OVF_vect)
|
2 | {
|
3 | PORTC |= (1<<PC7); // Testpin an ausgeben
|
4 | GV_NMRA_OV++; // Erhöhe Zeitwert (Overflow) um 1
|
5 | }
|
Du verwendest GV_NMRA_0V zwar noch nirgendwo, aber in dem Fall wird es
dann volatile sein müssen
FAQ: Was hat es mit volatile auf sich