Forum: Mikrocontroller und Digitale Elektronik Interrupt mit Call und ohne Call aufrufen


von Mc52 (Gast)


Lesenswert?

Guten tag,

Ich würde gerne wissen wie man einen bestimmten Interrupt mit einem Call 
befehl und ohne Call befehl aufrufen kann.

Mit freundlichen grüßen

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Was verleitet Dich zur Ansicht, Interrupts wären etwas, was man mit 
"Call befehlen" aufrufen könnte?

von (prx) A. K. (prx)


Lesenswert?

Erklär mal, was du wirklich willst.

von Axel S. (a-za-z0-9)


Lesenswert?

A. K. schrieb:
> Erklär mal, was du wirklich willst.

Daß jemand anderer seine Hausaufgaben für ihn macht :)

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Rufus Τ. F. schrieb:
> Was verleitet Dich zur Ansicht, Interrupts wären etwas, was man mit
> "Call befehlen" aufrufen könnte?

 Man kann es, nur wozu ?

von Paul B. (paul_baumann)


Lesenswert?

Marc V. schrieb:
> Man kann es, nur wozu ?

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.

MfG Paul

von Carl D. (jcw2)


Lesenswert?

Wobei ein "Return from Interrupt" Nebenwirkungen haben kann, die man bei 
Aufruf als Unterprogramm ohne HW-Beteilugung nicht haben will.

von Noch einer (Gast)


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.

von H.Joachim S. (crazyhorse)


Lesenswert?

Und andersherum: sich in einer ISR befinden, ohne dass die anderen 
Interrupts das wissen/gesperrt sind. Beim AVR z.B. läuft im Normalfall 
nur eine einzige ISR, die nicht unterbrochen werden kann (kann 
theoretisch schon, wenn man es will). Gibt ganz schnell ziemliches 
Chaos...

von Marc V. (Firma: Vescomp) (logarithmus)


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.

von Jacko (Gast)


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...

von Sebastian S. (amateur)


Lesenswert?

Wie bereits gesagt, es ist so einfach das Problem zu umgehen, dass es 
schon fast lächerlich ist.


ISR(Vectorname) {
  HauRein ();
}

void HauRein (void) {
}

von Carl D. (jcw2)


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.

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
Noch kein Account? Hier anmelden.