ESP32: Warum werden Interrupts verwendet?
5 Antworten
Damit schnell auf einen Input reagiert werden kann. Das ist aber keine Eigenheit des ESP32, sondern findet in praktisch allen Prozessoren Anwendung.
Um Ressourcen zu sparen und u.a. die Reaktionszeit zu erhöhen.
Computerprogramme arbeiten i.d.R. in Schleifen und springen von Schritten zu Schritten. Wenn nun ein wichtiges Ereignis stattfinden oder berücksichtigt werden soll, müsste das Rechenwerk erst an die Stelle, an der die Abarbeitung dieses Ereignisses stattfindet, ankommen. Bis dahin vergeht Zeit. Außerdem muss im Rechenwerk in Zyklen Daten für dieses Ereignis abgefragt werden, um überhaupt festzustellen, ob eine Änderung stattgefunden hat (polling).
Stell dir dazu vereinfacht eine fiktive Tagesroutine einer Sicherheitsfachkraft vor, die jede Stunde alle 250 Türen eines Gebäudes auf (offen? geschlossen?) kontrolliert. Jetzt kann es sein, dass die Fachkraft bei Tür 37 angekommen ist und dabei Tür 3 sich geöffnet hat. Bis sie das mitbekommt, geht sie aber zuerst die restlichen Türen ab, bis sie wieder am Anfang landet und dann bei 37 die Änderung feststellt.
Jetzt beschleunigen wir den Vorgang und machen statt jede Stunde fiktiv 10 ms daraus. Jetzt ist die Feststellung einer Änderung zwar nicht mehr so träge, dafür aber noch ressourcenfressender, weil in sehr kurzer Zeit sehr viele Schritte getan werden müssen.
Was wäre aber, wenn die Fachkraft anstatt alle Türen immer wieder durchzugehen sich mit anderen, wichtigeren Dingen beschäftigen könnte, weil eine sich schließende oder sich öffnende Tür sich bei dir schön melden würde? Nicht die Fachkraft würde nun die Türen anklopfen, sondern die Tür bei der Fachkraft. Erst dann würde sie anfangen, darauf einzugehen und gewisse Schritte abarbeiten.
Das entspricht sinngemäß einem Interrupt. Die Programmschleife (es gibt verschiedene auf verschiedenen Ebenen) wird bei einem Ereignis, dass ein Interrupt ausüben soll, unterbrochen. Der Prozessor reagiert darauf und springt dabei in eine sog. Service Routine. D.h. der "Bittsteller" (das unterbrechende Ereignis) wird bedient, indem eine hierauf festgelegte Arbeit errichtet wird.
Beispiele: Du tippst auf deine Tastatur und löst dabei einen Interrupt aus.
Interrupts sind nützlich, um auf Ereignisse sofort zu reagieren, ohne dass das Hauptprogramm ständig auf diese Ereignisse warten muss. Dies spart Rechenleistung und ermöglicht es dem Mikrocontroller, andere Aufgaben zu erledigen, während er gleichzeitig auf äußere Ereignisse, wie das Drücken eines Tasters, reagieren kann.
Der Prozessor wartet, dass was passiert. Wie merkt er das? In dem ein Interupt kommt und dem Prozessor das mitteilt.
Übersetzt heißt „Interrupt“ „Unterbrechung“. Genau darum geht es bei der Programmierung.
Das Hauptprogramm werkelt so vor sich und kümmert sich nicht um seine Umgebung.
Nun kommt ein Ereignis, auf das geachet werden sollte. Ein Taster wird betätigt, eine Lichtschranke unterbrochen oder ein Bewegungssensor meldet eine Bewegung.
Ohne Interrupts könnte das Hauptprogramm vielleicht gar nicht mitbekommen, dass etwas beachtet werden muss.
Wenn ich aber dem Mikrocontroller sage „Lasse alles stehen und liegen, wenn ein bestimmtes Ereignis eintritt!“, dann kann es auch nicht mehr übersehen werden. Dieses kleine Unterbrechungs- oder Interruptrogramm sollte nun so schnell wie möglich sein, da wärenddessen keine anderen Programmteile weitergeführt werden.
Ist nichts ESP32 spezifisches.
Interrupt werden benötigt, damit der Prozessor unterbrochen werden kann um wichtiger Aufgaben zu erfüllen.
Bloßes tippen auf die Tastatur kann schon ein Interrupt sein.