Forum: Compiler & IDEs AVR GCC BADISR_vect ?


von Patrick (Gast)


Lesenswert?

Hallo,

ich hab Problem mit sporadisch Abstürzen meines Programms. Ich hab nun 
die ISR Routine
1
ISR(BADISR_vect)
2
{
3
  PORTA |= (1 << PA5);    //ON
4
}
eingefügt und diese wird tatsächlich ausgelöst. Die Frage ist nun wie 
finde ich heraus welcher ISR es war? Komisch ist auch das die LED nicht 
mehr ausgeht obwohl ich diese in der Hauptschleife auf zwei Tastern 
liegen habe
1
if ( !(PINA & (1<<PA2)) ) {
2
3
 PORTA |= (1 << PA5); //blau
4
}
5
if ( !(PINA & (1<<PA3)) ) {
6
 PORTA &= ~(1 << PA5);
7
}

zurvor funktioniert das LED ein/aus schalten wenn aber die ISR 
BADISR_vect angesprochen wurde nicht mehr?? woran kann das liegen?

Gruss Patrick

von Carl D. (jcw2)


Lesenswert?

Indem du die richtigen ISR-Routinen (*XYZ_vect) genau so definierst.
Gibt es die beim Linken nicht, wird Badisr_vect statt dessen gerufen.

*XYZ ergeben sich aus dem Datenblatt des benutzten Chip.

: Bearbeitet durch User
von Peter II (Gast)


Lesenswert?

Patrick schrieb:
> Die Frage ist nun wie
> finde ich heraus welcher ISR es war?

im Notfall für jede ISR eine Funktion schreiben.

von Oliver S. (oliverso)


Lesenswert?

Wenn die LED nicht mehr ausgeht, obwohl deine Tastenbetätigung die 
ausschalten müsste, wird die ISR wiederholt aufgerufen. Schau dir halt 
im Daenblatt an, bei welchen Interrupts das Flag nicht automatisch 
zurückgesetzt wird, und schau dir in deinem Programm an, welche der 
Module du benutzt. Da sollte sich der Übeltäter finden lassen.

Oliver

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.