Peter II schrieb:
> Aber du solltest beachten, das ein Funktionsaufruf in der ISR dafür
> sorgt, dann alle Register gesichert werden müssen, das macht das ganze
> etwas langsamer (ob es stört musst du wissen)
Das betrifft nur die Scratch-Register, also jene, die von einer
aufgerufenen Funktion verändert werden dürfen. Bei AVRs sind das recht
viele, daher fällt das bei denen auf.
Wenn es sich allerdings um einen Cortex M handelt, dann werden diese
Register sowieso schon vollständig als Teil des Interrupt-Verfahrens von
der Hardware gesichert. Bei den Cortex M ergibt sich also durch
Funktionsaufrufe innerhalb einer ISR keinerlei Nachteil.
Hintergrund: Bei den Cortex M sind ISRs normale Funktionen mit normalem
ABI, keine speziellen Exception-Handler. Folglich sichern sie weder
Scratch- noch Status-Register. Das geschieht automatisch als Teil des
Interrupt-Ablaufs des Cores. Es gibt daher auch keinen "Return from
Interrupt" Befehl, sondern eine spezielle Return-Adresse signalisiert
einen anderen Ablauf.
Da diese 5 Store-Operationen parallel zum Vektor- und Code-Zugriff auf
das Flash-ROM erfolgen, hat das in der üblichen Konfiguration auch kaum
Folgen für die Interrupt-Latenz. Zudem entfallen sie, wenn ein
Return-From-Interrupt gleich in den nächsten Handler springt.