mikrocontroller.net

Forum: PC-Programmierung return in ISR. Was bedeutet das?


Autor: Fragender (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Fragender (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist ein AT90CAN und der Compiler ist WinAVR.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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-Tu...
(2) AT90CAN... Manual Abschnitt 3.8.1 Interrupt behavior
http://www.atmel.com/dyn/resources/prod_documents/...

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.