Interrupt mit Call und ohne Call aufrufen

Gast #4612557
Lesenswert?
• ▲
▼
Am einfachsten du schreibst 2 Funktionen.

Eine ganz normale Funktion macht die ganze Arbeit.

Die Interrupt-Routine hat nur 2 Zeilen. Den Aufruf der normalen Funktion 
und das return-from-interrupt.
(Firma: Vescomp) #4612568
Lesenswert?
• ▲
▼
Paul B. schrieb:
> Vielleicht, um den Inhalt der Interruptroutine ausnahmsweise "außer der
> Reihe" auszuführen, indem man es durch einen eigenen Aufruf "mit Gewalt"
> erzwingt? Das ist eine Sache, die ich mir gut vorstellen kann.

 Und dabei von einem anderen Interrupt ( vielleicht noch von sich
 selbst) unterbrochen wird ?

 EDIT:
 Ansonsten gibt es natürlich noch die Möglichkeit, durch setzen der
 bits im entsprechenden IFR (Interrupt Flag Register) den Interrupt
 manuell zu triggern. Das ware dann wohl der zweite Fall, nämlich
 ohne CALL.
Gast #4612592
Lesenswert?
• ▲
▼
Ohne "CALL"? - Da erwartet man ein Ereignis. Zufälligerweise ist
das der eigentliche Sinn von Interrupts.

Mit "CALL"? - Ob das bei allen µCs geht, weiß ich nicht. Aber bei
AVRs sollte ein CALL kein Problem sein. Das RETI am Ende setzt
allerdings das globale Interrupt-Enable-Flag.
Will man das nicht haben, muss dem "CALL" ein DI folgen.
(Warum? Nützt das immer?)

Dritte Möglichkeit: Man PROVOZIERT (wenn möglich) im Programm,
dieses Ereignis.


Allerdings dürfte dies niemandem helfen, der hiermit
trotz Desinteresse Punkte holen möchte...
#4612624
Lesenswert?
• ▲
▼
Wobei der GCC entweder haurein() in die ISR inlined und dann 2x hat, 
denn ISR und Funktionsaufruf haben unterschiedliche Regeln für die 
Registersicherung, oder aber in der ISR wegen Funktionsaufruf alle 
Register sichert. Wenn die ISR also schnell sein muß, oder RAM/Stack 
knapp ist, keine gute Idee.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren