Hallo. Ich habe einen Quelltext mit folgfender Zeile in der ISR: if ("Bedingung") return; Was bewirkt diese Zeile? Kann man so die ISR einfach verlassen, obwohl die Interrupt Bedingung noch aktiv ist? Danke!
Kann gehen. Wenn dem Compiler bekannt ist, dass es eine ISR ist, setzt er für das Return ein Return-from-Interrupt ein. Auf manchen µC-Familien löscht Return-from-Interrupt automatisch die Interruptbedingung und schaltet die Interrupts wieder ein. Hängt halt von deinem Target ab und wie der Rest um diese Zeile programmiert ist.
Im AVR-GCC-Tutorial (1) und im Manual (2) steht dazu, dass die Interrupts während der ISR gesperrt sind und durch das Return Interrupts wieder zugelassen werden. Der Auslöser des gerade behandelten Interrupts ist schon weg. Ein "einfaches" Verlassen ist grundsätzlich in Ordnung. Aber: In der Laufzeit des ISR aufgelaufende Interruptquellen werden gemerkt und entsprechend ihrer Priorität nach dem Return abgearbeitet. Es kann also sein, dass inzwischen die gleiche Interruptquelle für deine ISR wieder aktiv war und während der Interruptsperrung ein Folgeinterrupt (pending interrupt) gespeichert wurde, der nach dem Return (fast) als nächstes abgearbeitet wird. Wie das Timing hier genau ist, steht ausführlich im Manual. (1) http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Interrupts_mit_dem_AVR_GCC_Compiler_.28WinAVR.29 (2) AT90CAN... Manual Abschnitt 3.8.1 Interrupt behavior http://www.atmel.com/dyn/resources/prod_documents/doc7679.pdf
> if ("Bedingung") return; > > Was bewirkt diese Zeile? Die Funktion wird verlassen, wenn die Bedingung wahr ist. > Kann man so die ISR einfach verlassen, obwohl die Interrupt Bedingung > noch aktiv ist? Wie würdest du sonst eine ISR verlassen, außer "einfach so"? > Ist ein AT90CAN Das ist aber kein PC.
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.