Aus RN-Wissen.de
Wechseln zu: Navigation, Suche
Rasenmaehroboter Test

K
Zeile 1: Zeile 1:
''Interrupt Request''
+
===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 [http://de.wikipedia.org/wiki/Interrupt_Request 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 [http://de.wikipedia.org/wiki/Interrupt_Request Interrupt Request])
Zeile 11: Zeile 11:
 
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.  
 
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. 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 mehr Hardwareaufwand bei den Geräten notwendig, da diese in der Lage sein müssen, auf das Auftreten einer Änderung mit einer Interrupt-Anfrage zu reagieren. (so braucht z.B. ein Temperatursensor für Polling im einfachsten Fall nur einen A/D-Wandler, für die Verwendung von Interrupts muss er auf die Änderung der Temperatur zusätzlich mit einer Interruptanfrage reagieren können)
 +
 +
'''Vorteile von Interrupts gegenüber Polling:'''
 +
* 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.
 +
 +
<div style="border:2px solid #ffd700; margin-left:auto; margin-right:auto; padding:0.3em; text-align:left; ">
 +
In den allermeisten Fällen überwiegen die Vorteile der Verwendung von Interrupts deutlich!
 +
</div>
 +
 +
===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 [[ISR|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==
 
==Siehe auch==
 
* [[ISR]]  
 
* [[ISR]]  
  
 
[[Kategorie:Microcontroller]]
 
[[Kategorie:Microcontroller]]

Version vom 23. April 2006, 12:27 Uhr

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)

Man unterscheidet 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. 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 mehr Hardwareaufwand bei den Geräten notwendig, da diese in der Lage sein müssen, auf das Auftreten einer Änderung mit einer Interrupt-Anfrage zu reagieren. (so braucht z.B. ein Temperatursensor für Polling im einfachsten Fall nur einen A/D-Wandler, für die Verwendung von Interrupts muss er auf die Änderung der Temperatur zusätzlich mit einer Interruptanfrage reagieren können)

Vorteile von Interrupts gegenüber Polling:

  • 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