Aus RN-Wissen.de
Version vom 21. Juni 2009, 20:21 Uhr von Besserwessi (Diskussion | Beiträge) (Unterschiede zum Polling)

Wechseln zu: Navigation, Suche
Rasenmaehroboter Test

Interrupt Request

"Ein Interrupt ist ein Signal, meist von einem externen Gerät, mit dem der Prozessor aufgefordert wird, den aktuellen Programmablauf anzuhalten (zu unterbrechen) und eine sog. Unterbrechungsroutine (ISR) aufzurufen." (Zitat aus der Wikipedia Interrupt Request)

Es wird unterschieden zwischen maskierbaren (d.h. Interrupts, die man unterdrücken kann) und nicht maskierbaren Interrupts.

Sind die Interrupts nicht unterdrückt, wird der normale Programmfluss unterbrochen, sobald ein externes Signal an einer von mehreren Interrupt-Eingängen anliegt. Es wird eine spezielle Unterroutine abgearbeitet (ISR), die auf das externe Signal reagieren und es ggf. abschalten muss (um erneute Interrupt Requests und damit Endlosschleifen zu vermeiden).

Nicht maskierbare Interrupts werden vor allem für besonders schwerwiegende Ereignisse (z.B. zu hohe Umgebungstemperatur) verwendet, da hier das Steuerprogramm immer unmittelbar reagieren muss, um Schaden vom System abwenden zu können (z.B. indem es eine Kühlung aktiviert).

Da die Anzahl der Interrupt-Leitungen bei Microprozessoren meist begrenzt sind, werden oft Interrupt-Controller vorgeschaltet, die auch kaskadiert (in Serie geschaltet) werden können. Um in solch einem System die Interrupt-Quelle eindeutig identifizieren zu können, muss diese dem Microcontroller über den normalen Datenbus z.B. eine Kennung übermitteln können. Die dazu nötige Kommunikation zwischen Microcontroller und Interrupt-Quelle findet in der Interrupt Service Routine statt.

Unterschiede zum Polling

Alternativ zur Verwendung von Interrupts lässt sich das Auftreten eines externes Ereignisses auch durch das regelmäßige Abfragen des externen Gerätes erkennen. Diese Technik nennt sich Polling (der Prozessor frägt das externe Gerät).

Vorteile des Pollings gegenüber der Verwendung von Interrupts:

  • Es ist einfacher zu implementieren, da die Abfrage des Geräts im Hauptprogramm erfolgen kann.
  • Es reagiert meist schneller auf das externe Ereignis, sofern nur auf ein Ereigniss gewartet wird. Bei Interrupts wird der aktuelle Befehl des Hauptprogramms noch fertig ausgeführt, dann wird die Rücksprungadresse gesichert und in die ISR verzweigt. Diese wiederrum muss die zu benutzenden Register auf dem Stack sichern, bevor sie mit der eigentlichen Reaktion auf das externe Ereignis beginnen kann. Beim Polling kann nach Erkennung des Ereignisses sofort reagiert werden.
  • Es ist weniger Hardwareaufwand bei den Geräten notwendig, da diese nicht in der Lage sein müssen, auf das Auftreten eines Ereignisses mit einer Interrupt-Anfrage zu reagieren. So braucht z.B. ein Temperatursensor für Polling im einfachsten Fall nur einen A/D-Wandler. Bei der Verwendung von Interrupts muss er jedoch neben der Möglichkeit, die Temperatur zu messen, zusätzlich auf die Änderung der Temperatur mit einer Interruptanfrage reagieren können.
  • Man ist nicht an Eingänge gebunden die einen Interrupt auslösen können.

Vorteile von Interrupts gegenüber Polling:

  • Das Hauptprogramm wird u.U deutlich einfacher und besser verständlich, weil es sich auf das Wesentliche konzentriert, ohne ständig oder von unterschiedlichen Codestellen aus Ereignisse abzufragen zu müssen.
  • Es können leicht mehrere mögliche Signale Überwacht werden.
  • Das Auftreten des externen Ereignisses wird immer überwacht. Beim Polling geschieht dies nur zu den Zeiten, zu denen das Hauptprogramm danach frägt.
  • Das Hauptprogramm kann andere Aufgaben übernehmen als das externe Gerät zu überwachen. Beim Polling wird häufig sämtliche Rechenleistung für die Abfrage der Geräte aufgewendet.
  • Die Kommunikationsleitungen, Datenbusse und externen Geräte werden entlastet. Im Gegensatz zum Polling wird nur mit dem Gerät kommuniziert, wenn tatsächlich ein externes Ereigniss stattfindet.
  • Es ist oft stromsparender. Hat das Hauptprogramm keine Aufgaben mehr zu erledigen, so kann es Teile der CPU bis zum nächsten Auftreten eines Interrupts in einen stromsparenden Sleep-Mode versetzen. In diesem Modus wird die CPU angehalten und beim nächsten Interrupt wieder aktiviert. Fast alle modernen, interruptfähigen Prozessoren unterstützen einen solchen Modus.

In den allermeisten Fällen überwiegen die Vorteile der Verwendung von Interrupts deutlich!

Interrupt-Sharing

Stehen auf dem Controller weniger Interruptleitungen zur Verfügung, als interruptfähige Geräte angeschlossen werden sollen, so ist es notwendig, dass sich mehrere Geräte eine Interruptleitung teilen (Interrupt-Sharing). Bei einfachen Controllern kann es sogar vorkommen, dass nur eine einzige ISR definiert werden kann, die bei jeder Art von Ereignis aufgerufen wird. In diesem Fall muss die durch den Interrupt aufgerufene Interrupt Service Routine prüfen, bei welchem Gerät das Ereignis aufgetreten ist. Das geschieht wiederrum durch Abfrage jedes in Frage kommenden Geräts (also Polling).

Siehe auch


LiFePO4 Speicher Test