Interruptüberlauf?

#727998
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren