Forum: Mikrocontroller und Digitale Elektronik Interruptüberlauf?


von Maxim (maxim) Benutzerseite


Lesenswert?

Was passiert, wenn der Timer überläuft und die ISR vom vorletzten 
Überlauf noch nicht abgearbeitet wurde? Wird der Interrupt verworfen 
oder geht es so weiter bis zum Stack-Overflow?

von Johannes M. (johnny-m)


Lesenswert?

Welcher µC?

von Maxim (maxim) Benutzerseite


Lesenswert?

Oh sorry, ATMega32

von Johannes M. (johnny-m)


Lesenswert?

Bei AVRs ist während der Bearbeitung einer ISR die Bearbeitung aller 
Interrupts automatisch gesperrt (dafür sorgt die Controller-Hardware). 
Außerdem wird beim Einsprung in den Interrupt-Vektor das auslösende Flag 
gelöscht (*). Wenn eine ISR noch nicht beendet ist und derselbe 
Interrupt erneut auftritt, dann wird das Flag wieder gesetzt und nach 
der Beendigung der ISR (nach dem Rücksprung ins Hauptprogramm) wird die 
ISR erneut aufgerufen, wenn nicht in der Zwischenzeit andere Interrupts 
mit einer niedrigeren Adresse aufgelaufen sind (die dann zuerst 
abgearbeitet werden). Einen Stack-Überlauf gibt es nur dann, wenn 
innerhalb einer ISR das I-Bit im SREG manuell wieder gesetzt wird (was 
die µC-Hardware normalerweise erst mit dem reti macht). In dem Fall wird 
die ISR unterbrochen, wenn das Flag erneut gesetzt wird (oder wenn ein 
anderer Interrupt auftritt).

(*) Ausnahme: Das USART-Receive-Interrupt-Flag wird erst gelöscht, wenn 
UDR gelesen wurde und kein Zeichen mehr im Empfangspuffer ist.

von Maxim (maxim) Benutzerseite


Lesenswert?

Danke

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.