Frage zur Interrupt Service Routine



  • Eine ISR läuft ja exklusiv und ist nicht unterbrechbar. Dementsprechend ist die ISR zeitkritisch.
    Bei Wikipedia steht nun, dass langwierige Prozeduren ausgelagert werden sollen.
    Wie ist das zu verstehen? Wird praktisch eine ISR in mehrere ISRs aufgeteilt, so dass sie zwischen den Aufrufen wieder unterbrechbar ist?

    L. G.
    Steffo


  • Administrator

    Steffo schrieb:

    Eine ISR läuft ja exklusiv und ist nicht unterbrechbar.

    Kommt auf den Microcontroller an. Es kann zum Beispiel auch Prioritäten unter den ISR geben, wodurch eine ISR mit höherer Priorität eine mit niedriger unterbrechen kann. Aber das spielt bei deiner Frage keine Rolle und daher nur so als Anmerkung 🙂

    Steffo schrieb:

    Bei Wikipedia steht nun, dass langwierige Prozeduren ausgelagert werden sollen.
    Wie ist das zu verstehen? Wird praktisch eine ISR in mehrere ISRs aufgeteilt, so dass sie zwischen den Aufrufen wieder unterbrechbar ist?

    Die Idee ist, dass man ein Event an eine Nachrichtenschleife absetzt. Die Nachrichtenschleife läuft nicht als ISR sondern eben halt als "normale" Funktion. Diese Nachrichtenschleife oder auch die Behandlung des Events kann dann wieder von einer ISR unterbrochen werden.

    Grüssli



  • Von Nachrichtenschleife, höre ich jetzt das erste mal.

    Vielleicht sollte ich mich genauer ausdrücken.
    Ich habe hier eine Übungsfrage zu Betriebssysteme vorliegen:

    "Warum sollten ISRs sehr kurz sein? Wie kann man das in einem System mit Kernel-Threads realisieren?"

    Die Muster-Antwort darauf:

    "Möglichst kurz, da ISRs ALLES für die Dauer Ihrer Ausführungszeit unterbrechen!
    Realisierung: Verlagerung der Arbeit in einen entsprechend priorisierten Thread."

    Verstehe ich das richtig, dass man die Arbeit in einem neuem Thread mit höherer Priorität verlagert, so dass er dann durch andere ISRs nicht, oder nur schwer, unterbrechbar ist?

    L. G.
    Steffo


  • Administrator

    Steffo schrieb:

    Verstehe ich das richtig, dass man die Arbeit in einem neuem Thread mit höherer Priorität verlagert, so dass er dann durch andere ISRs nicht, oder nur schwer, unterbrechbar ist?

    Nein, ein Thread kann ja dann wieder von ISRs unterbrochen werden. Man möchte erlauben, dass andere ISRs aufgerufen werden und dies nicht durch eine lang laufende ISR verhindert wird.
    Der Thread muss auch nicht unbedingt mit hoher Priorität laufen, dass kommt ganz darauf an, was man verarbeiten möchte.

    Grüssli



  • Ah, jetzt versteh ichs! 🙂

    Danke! 👍

    L. G.
    Steffo


Anmelden zum Antworten