Eine sichere ISR schreiben
Halten Sie Interrupt-Handler kurz und verwenden Sie volatile.
Eine sichere ISR schreiben ist eine kostenlose Arduino & IoT Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Arduino & IoT Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Arduino & IoT Academy-Kurs umfasst insgesamt 4 Lektionen.
Eine besondere Funktion
Eine ISR, also eine Interrupt Service Routine, ist die Funktion, die ausgeführt wird, wenn ein Interrupt ausgelöst wird. Für sie gelten Regeln, die für gewöhnliche Funktionen nicht gelten.
Halten Sie sie kurz
Die wichtigste Regel lautet: Halten Sie Ihre ISR so kurz wie möglich. Das Hauptprogramm ist während ihrer Ausführung angehalten. Beenden Sie sie daher schnell wieder.
Aufwendige Arbeit später erledigen
Setzen Sie innerhalb der ISR lediglich ein Flag oder erhöhen Sie einen Zähler. Überlassen Sie langsame Aufgaben wie Ausgaben oder Berechnungen der loop, sobald diese das Flag erkennt.
void myISR() {
pressed = true;
}Gemeinsam verwendete Variablen
Eine ISR und Ihre loop greifen auf dieselbe Variable zu. Der Compiler rechnet möglicherweise nicht damit, dass sie sich unbemerkt ändert, was schwer erkennbare Fehler verursacht. 🐞
Das Schlüsselwort volatile
Kennzeichnen Sie jede Variable, die gemeinsam mit einer ISR verwendet wird, als volatile. Dadurch weiß der Compiler, dass sich der Wert jederzeit ändern kann und immer erneut gelesen werden muss.
volatile bool pressed = false;Kein delay innerhalb der ISR
Rufen Sie niemals delay in einer ISR auf. Die Zeitmessung, die delay benötigt, ist während eines Interrupts selbst angehalten und funktioniert daher nicht.
Auch Serial ist riskant
Vermeiden Sie Serial.print innerhalb einer ISR. Die Funktion ist auf Interrupts angewiesen, die während der Ausführung des Handlers blockiert sind. Dadurch kann die Ausgabe ins Stocken geraten oder fehlerhaft erscheinen.
millis bleibt stehen
Innerhalb einer ISR schreitet millis nicht weiter fort, weil die Zählung im Hintergrund angehalten wird. Lesen Sie die verstrichene Zeit in der loop und nicht im Handler aus.
Das Flag in der loop verarbeiten
Prüfen Sie zurück in der loop das Flag, reagieren Sie darauf und setzen Sie es anschließend zurück. Hier findet die eigentliche Reaktion sicher statt.
if (pressed) {
pressed = false;
handlePress();
}Mehrbytewerte lesen
Wenn die loop einen Mehrbytewert vom Typ volatile liest, den eine ISR aktualisiert, deaktivieren Sie Interrupts kurzzeitig. So erhalten Sie eine vollständige, ungeteilte Zahl.
noInterrupts();
long c = count;
interrupts();Warum diese Regeln wichtig sind
Befolgen Sie diese Regeln, bleibt Ihre ISR schnell und zuverlässig. Missachten Sie sie, kann es zu eingefrorenen Abläufen, verlorenen Daten oder Werten kommen, die scheinbar nie aktualisiert werden.
Kurze Überprüfung
Warum muss eine Variable, die zwischen einer ISR und der loop gemeinsam verwendet wird, als volatile gekennzeichnet werden?
Zusammenfassung
Sie haben gelernt, eine ISR kurz zu halten, gemeinsam verwendete Daten als volatile zu kennzeichnen, delay und Serial zu vermeiden und die eigentliche Arbeit wieder in der loop zu erledigen. 🎉
Häufig gestellte Fragen
Ist die Lektion „Eine sichere ISR schreiben“ kostenlos?
Ja — der vollständige Text von „Eine sichere ISR schreiben“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Arduino & IoT Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Arduino & IoT Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Eine sichere ISR schreiben“?
Halten Sie Interrupt-Handler kurz und verwenden Sie volatile. Du übst Arduino & IoT Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Arduino & IoT Academy zu starten?
Keine Vorkenntnisse erforderlich. Arduino & IoT Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Eine sichere ISR schreiben“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Arduino & IoT Academy-Lektion Code schreiben und ausführen?
Ja. Jede Arduino & IoT Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Polling vs. Interrupts
- attachInterrupt an einem Pin
- Eine sichere ISR schreiben
- Impulse eines Encoders zählen