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?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.