Sofort geht nicht, der AVR kann schließlich nicht einfach einen Maschinenbefehl abbrechen, den er gerade abarbeiten soll. Auf den Interrupt reagiert er also erst, wenn er mit seinem aktuellen Befehl fertig ist.Bei einem Interrupt (gut Deutsch Unterbruch) wird das aktuelle Programm SOFORT unterbrochen.
Das würde ich so jetzt nicht sagen...Darum ist es auch wichtig, die Variablen in einem Programm, die vom Interrupt tangiert werden könnten, am Anfang es Interruptes zu sichern und kurz vor Ende der Intertuptroutine diese wieder herstellen, damit das unterbrochene Programm mit den korrekten Werten weiteraufgeführt werden kann.
Bei Assembler muss man die im Interrupt genutzten Register erstmal sichern, damit das Programm später fehlerfrei fortgesetzt werden kann, bei C hingegen nimmt einem der Compiler diese Arbeit ab, es sei denn man verbietet es ihm explizit.
Und Variablen muss man im Normalfall sowieso nicht sichern, denn wenn ein Programm die Änderung einer Variable durch eine ISR nicht verkraftet, dann ist es meiner Meinung nach schlecht programmiert. Meist ist es ja sogar die einzige Aufgabe einer ISR irgendeinen Wert in irgendeine Variable zu schreiben, würde man diese dann vor dem Rücksprung wiederherstellen, hätte man sich den kompletten Interrupt sparen können.
Lesezeichen