Forum: Mikrocontroller und Digitale Elektronik interrupt service routine


von Florian S. (sirius7)


Lesenswert?

Hallo,

Ich versuche mich gerade mit Interrupt Service Routine auseinander zu 
setzen und habe leider keine für mich verständliche Erklärung gefunden, 
was sie bewirken soll.
Dennoch habe ich mir Mühe gemacht und mit verschiedenen logischen 
Ansätzen eine für mich verständliche Definition herauskristallisiert.

ISR läuft parallel zu Hauptprogramm (main) und unterbricht sie und 
andere ISRs, falls die Überwachte Bedingung eintritt.

würde diese Definition so stimmen?

Danke für Ihre Hilfe

von Ulrich F. (Gast)


Lesenswert?

Alex S. schrieb:
> würde diese Definition so stimmen?
Eher nicht!
Entweder unterbricht etwas, oder es läuft parallel.
Beides geht irgendwie nicht.
(bei unseren µC)

Alex S. schrieb:
> und unterbricht ... ISRs,
So allgemein, ist das falsch.

von Matthias H. (h3inz3lmann)


Lesenswert?

Hi,

ich bin auch gerade dabei, sie zu verstehen(oder es zu versuchen).
Meine Erkenntnisse sind:
- Sie werden unabhängig von deinem Programm (quasi hardwareseitig) 
ausgelöst (wenn du es zulässt) und Unterbrechen dessen Ausführung dann 
um ihren Code auszuführen, danach läuft dein Programm (mit eventuell 
veränderten Registerzuständen)weiter.
- ISR's unterbrechen sich nicht gegenseitig, wenn während der Ausführung 
von ISR1 eine ISR2 ausgelöst wird, wird diese nach Beendigung von ISR1 
ausgeführt.

Ich hoffe das stimmt so, wenn nicht, bitte korrigieren.

Gruß Matthias

von Dieter F. (Gast)


Lesenswert?


von Olaf B. (Firma: OBUP) (obrecht)


Lesenswert?

Hallo Alex,

diese Definition stimmt so nicht.

Gem. Wikepdia - https://de.wikipedia.org/wiki/Unterbrechungsroutine:

> Eine Unterbrechungsroutine (auch Unterbrechungsbehandlung genannt, engl.
> interrupt handler, interrupt service routine oder kurz ISR) ist ein
> Programmstück, das von einem Hauptprozessor (CPU) ausgeführt wird, wenn er
> durch einen Softwareinterrupt oder Unterbrechungsanforderung (engl. Interrupt > 
Request) gezwungen wird, den gegenwärtigen Programmablauf zu unterbrechen und > 
einen Interrupt auszuführen.

Das bedeutet, tritt ein IRQ ein - SW oder HW - wird das notmal 
ablaufende Programm unterbrochen, der Stack gesichert, die ISR 
abgearbeitet, Stack wieder hergestellt, das unterbrochene Programm an 
der Stelle weiter abgearbeitet, an der es durch den IRQ unterbrochen 
wurde.

IRQs & IRS können auch verschachtelt - nested - sein.

mfg

Olaf

von Thomas H. (Firma: CIA) (apostel13)


Lesenswert?

Wie wäre es einmal damit ein gutes Buch zu kaufen und es dann zu lesen?

von Klaus (Gast)


Lesenswert?

Thomas H. schrieb:
> Wie wäre es einmal damit ein gutes Buch zu kaufen und es dann zu lesen?

Ja, genau. Platos "Staat" oder Christian Morgensterns "Galgenlieder".


@ Alex S. (sirius7)

Also das ist alles so ein bisschen richtig und ein bisschen falsch. Ist 
aber auch OK. Dauert ne halbe Stunde ehe man das kapiert hat.

1. Ein Prozessor führt, sobald er mit Strom und Takt versorgt wird immer 
ständig ein Programm aus.

2. Es kann immer nur ein Befehl gleichzeitig ausgeführt werden. Der 
gegenwärtig ausgeführte Befehl wird durch den Befehlszähler (auch 
Programmzähler oder ähnlich genannt) bestimmt.

3. Der nächste Befehl ist

3.a. der dem gegenwärtigen Befehl unmittelbar im Speicher nachfolgende 
Befehl
3.b. der durch einen Befehl, der den Programmzähler verändert, bestimmte 
Befehl
3.c. der durch einen Interrupt, der den Programmzähler verändert, 
bestimmte Befehl. Damit die unterbrochene Befehlssequenz später 
fortgesetzt werden kann, wird der Programmzähler auf einem Stack 
abgelegt und bei der Beendigung der ISR wieder von dort geladen.

4. Interrupts können sich oder können sich nicht gegenseitig 
unterbrechen. Das hängt von der Prozessorarchitektur ab. Dazu werden 
Begriffe wie "Priorität" und "Interrupt-Flag" definiert und verwendet.

5. Es gibt je nach Architektur gewisse quantitative und qualitative 
Variationen dieser Schemata. Abstrakt aber sind diese 4 Punkte immer 
gleich.

von Florian S. (sirius7)


Lesenswert?

Hallo, vielen Dank für eure Mühe! Ihr habt hat mir sehr weitergeholfen!

von Florian S. (sirius7)


Lesenswert?

Hallo Klaus, ganz besonderen Dank an Sie, habe nicht nur ISR verstanden, 
sondern darüber hinaus auch Stack und andere wichtige Sachen! Diese 
Erklärung könnte man glatt für Wikipedia und andere Medien übernehmen. 
Noch mal vielen Dank!

von Klaus (Gast)


Lesenswert?

Das ist ein nettes Lob. Dankeschön. Viel Erfolg.

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.