RoboterNetz.de Foren-Übersicht
 RN-Wissen Home  -  Community Home  -  Alle Artikel -  Mitglieder -  Moderatoren  -  Bilderliste  -  Letzte Änderungen
 Kategorien  -  Beliebte Seiten  -  Sackgassenartikel  -  Artikel ohne Kategorie  -  Neue Artikel  -  Anmelden

Interrupt

aus RN-Wissen, der freien Wissensdatenbank

Inhaltsverzeichnis

Interrupt Request

Normalerweise arbeitet ein Prozessor (”C oder CPU) ein Programm der Reihe nach ab. Prakisch alle CPUs und ”Cs haben aber die Möglichkeit unabhĂ€ngig vom normalen Programmfluss auf einige Ereignisse zu reagieren, die Interrupts. Typische Interruptquellen sind der Überlauf eines Timers, das Ende einer AD Wandlung und ein empfangenes Zeichen an einer Schnittstelle.

Wenn ein Interrupt Signal vorliegt, pausiert das normale Programm, und die ISR (Interrupt Service Routine) wird statt dessen aufgerufen und erst danach wieder das normale Programm fortgesetzt. Mit den Interrupts kann die CPU mehrere Dinge quasi gleichzeitig erledigen. In der ISR (je nach CPU auch direkt durch die Hardware), wird der Zustand der Register gesichert und am Ende der ISR wieder hergestellt. Das Hauptprogramm bemerkt so wenig von der ISR, außer der unvermeidlichen Verzögerung und den gewĂŒnschten Effekten in der ISR.

Weil die ISR eben doch machmal stört, erlauben es fast alle CPUs, dass das Programm den Aufruf der ISR durch ein Interruptflag unterbinden kann. Der Interrupt wird dann "maskiert". In der Regel wird das Signal, das den Interrupt ausgelöst hat, gespeichert und die ISR wird nachgeholt werden, wenn das Programm es wieder zulĂ€ĂŸt. FĂŒr wichtige Signale (z.B. Übertemperatur, Unterspannung), die nicht unterdrĂŒckt werden sollen gibt es teilweise nicht maskierbare Interrupts, die sich nicht so einfach abschalten lassen.

Bei Microcontrollern sind viele der Interruptquellen interne Module wie Timer, UART, I2C oder A/D. Je nach Prozessor gibt es je nach Interruptquelle eine eigene ISR (z.B. AVR) oder nur eine (z.B. PIC18) bzw. einige wenige.

Da die Anzahl der Interrupt-Leitungen bei Microprozessoren begrenzt ist, werden teils Interrupt-Controller vorgeschaltet (z.B. im PC). Die eigentliche Interruptquelle wird dann spÀter in der ISR ermittelt.


Anwendungen fĂŒr Interrupts

Die klassiche Anwendung fĂŒr Interupts ist die Reaktion auf IO-Ereigneisse. Die ISR zur UART kann z.B. die Daten von der RS232 Schnittstelle in einen Puffer speichern, oder aus einem Puffer senden.

FĂŒr VorgĂ€nge die in regelmĂ€ĂŸigen ZeitabstĂ€nden erledigt werden sollten, eignen sich Timer Interrupts. Der Timer kann z.B. alle 10 ms einen Interrupt auslösen in dem dann z.B. die Uhrzeit aktualisiert wird oder Tasten abgefragt werden.

Preemptives Multitasking wird auch per Interrupt realisiert: der Wechsel zu einem anderen Thread / Task beginnt mit einem Interrupt. Nach der ISR wird dann aber nicht wieder an die gleiche Stelle zurĂŒckgesprungen, sondern auf einen anderen Task gewechselt.

Wenn die CPU in einen Stromsparmodus versetz wird, dient zu Aufwachen in der Regel auch ein Interrupt. Dadurch kann man z.B. in der Zeit, die man auf eine AD Wandlung wartet, Strom sparen

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, vor allem fĂŒr AnfĂ€nger, 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.
  • Auch EingĂ€nge ohne Interruptfunktion können genutzt werden.

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).

Interrupt-PrioritÀten

Im einfachsten Fall sind wĂ€hrend der AusfĂŒhrung der ISR weitere Interrupts unterdrĂŒckt. Bei einigen Prozessoren gibt es Interrupts mit verschiedener PrioritĂ€t. Dann kann ein Interrupt eine ISR niedriegerer PrioritĂ€t unterbrechen. Davon zu unterscheiden sind PrioritĂ€ten bei der Signalisierung der Interrupts: Wenn mehrere Interrupts auf die AusfĂŒhrung warten (z.B. weil Interrupts vorher gesperrt waren), wird darĂŒber festgelegt welche ISR zuerst ausgefĂŒhrt wird, sofern es mehr als eine ISR gibt.

Siehe auch

'Persönliche Werkzeuge