Also das setzen einiger Pins ist im Normalfall kein Problem, ein guter Compiler verpackt das in ganz wenigen Assemblerbefehlen.
In ganz kritischen Fällen beschränke ich meine ISRs wirklich nur auf gaaanz wenige Befehle, nämlich:
- setzen eines Flags in irgendeiner Variable, um dann im Hauptprogramm ganz in Ruhe auf den Interrupt reagieren zu können
und falls nötig:
- speichern eines Wertes in einer Variable (z.B. Zählerstand, ADC-Wert etc.)
- setzen von interruptspezifischen Registern (bei Overflow-Interrupts z.B. das entsprechende TCNT Register)
Im Normalfall kann eine ISR aber auch deutlich länger ausfallen ohne daß Probleme entstehen.
was ich in einer ISR grundsätzlich niemals verwende sind Schleifen und Bibliotheksfunktionen (denn man weiss ja bei Funktionen die man nicht selbst geschrieben hat meist nicht wie lang sie wirklich sind). Und Sprünge aus einer ISR heraus an eine andere Stelle im Code sind sowieso verboten. (das kann nämlich dazu führen daß eine ISR zwar immer wieder neu aufgerufen wird aber niemals beendet, was dir deinen Stack überlaufen lässt)
Lesezeichen