Gast
#4612464
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
|
Anzeige
|
Interrupt mit Call und ohne Call aufrufen
Gast
#4612464
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 Was verleitet Dich zur Ansicht, Interrupts wären etwas, was man mit "Call befehlen" aufrufen könnte? Erklär mal, was du wirklich willst. A. K. schrieb: > Erklär mal, was du wirklich willst. Daß jemand anderer seine Hausaufgaben für ihn macht :) 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 ? 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 Wobei ein "Return from Interrupt" Nebenwirkungen haben kann, die man bei Aufruf als Unterprogramm ohne HW-Beteilugung nicht haben will.
Gast
#4612557
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. 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... 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
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... Wie bereits gesagt, es ist so einfach das Problem zu umgehen, dass es
schon fast lächerlich ist.
ISR(Vectorname) {
HauRein ();
}
void HauRein (void) {
}
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 schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|