Hi, eine ganz grundsätzliche Frage möchte ich gerne stellen. Ich frage mich, was eigentlich der Sinn von sog. Interrupts ist. Im Wikipedia-Artikel steht dazu, dass der Sinn eines Interrupts darin bestehen würde, dass dadurch die CPU auf äußere Ergeignisse schneller reagieren kann. Warum ist das so? Aus dem Wikipedia-Artikel werde ich da nicht richtig schlau. http://de.wikipedia.org/wiki/Interrupt Gruß Basti
Folgende Analogie: Stell dir eine Arzt vor. Der arbeitet in seinem Zimmer und regelmäßig, so alle halbe Stunde, öffnet er mal die Tür um Nachzusehen ob nicht eventuell ein Patient auf Behandlung wartet. In Computer-Speak würde man sagen: "Er pollt das Wartezimmer". Solange du mit einem Schnupfen im Wartezimmer sitzt, ist die Wartezeit auch kein Problem. Aber, jetzt fehlt dir etwas Gröberes, dein Anliegen ist wichtig genug, daß du an die Tür klopfst und zum Arzt reingehts. Du machst einen Interrupt und unterbrichst den Arzt bei seiner momentanen Tätigkeit, weil du sonst die nächste halbe Stunde nicht überleben würdest. Polling: Der Computer sieht regelmässig nach, ob es etwas zu tun gibt und bearbeitet das dann. Folge: Durch das Zeitraster gibt es möglicherweise eine Wartezeit. Das Zeitraster kann sich auch mal verlängern, wenn der Computer gerade beschäftigt ist. Interrupt: Ein Ereignis unterbricht den Computer bei seiner momentanen Tätigkeit. Die Unterbrechung wird sofort bearbeitet.
Man kann beim Polling das Zeitraster minimieren, so daß die Reaktion unter Umständen schneller ist als bei einem Interrupt. Allerdings kann der Prozessor während der Wartezeit dann nichts anderes machen. Das warten lastet ihn schon voll aus. Bei der obigen Analogie wäre das so, als ob der Arzt sich ins Wartezimmer setzt und da wartet, bis ein Patient kommt. Wenn er zwei Wartezimmer hat, kann es dann sein, daß er ewig wartet, obwohl im anderen Wartezimmer schon die ersten Verluste zu vermelden sind.
Neben der Reaktion auf äußere Ereignisse dient der Interrupt häufig auch der Erfüllung präziser Timing-Aufgaben (Timer-Interrupt). Hier kommt es weniger auch die schnelle Reaktion als vielmehr auf auf eine genau definierte Reaktionszeit an. Das ist dann wichtig, wenn die CPU neben ihren Rechenarbeit noch streng regelmäßige Sequenzen wie z.B. Softwareuhr, Displayausgabe und/oder Tonerzeugung ausführen muß. Jörg
Vielleicht ist auch noch wichtig zu erwähnen, wenn wir mal bei dem Analogon mit der Arztpraxis bleiben, daß der Arzt bei der Unterbrechung seiner Tätigkeit sein momentanes Arbeitsumfeld gegen ein neues austauscht, er also seine Geräte beiseite legt, und einen neuen Satz Geräte (Spritzen, Skalpell) benutzt und nach der Unterbrechung - die im allgemeinen kurz sein sollte (insofern hinkt der Vergleich etwas) - wieder an dem Punkt fortfährt, an dem er unterbrochen wurde. Das bedeutet, bei einer CPU mit Stack-Architektur, daß die CPU ihre Register in der Interrupt-Routine auf den Stack sichert und nach Verlassen wieder vom Stack restauriert. Die in einer Interruptroutine erforderliche Aktion sollte kurz sein im Vergleich zur Haupttätigkeit. Typisches Beispiel (stammt aus der Zeit der seriellen UARTs): Ein Ausgabeprozeß sendet Zeichen aus einem Ram-Puffer an den UART. Während das Zeichen am UART seriell ausgegeben wird, braucht die CPU nicht zu warten, sondern kann etwas anderes machen in den vielen Millisekunden. Ist der UART-Puffer leer, sendet er einen Interrupt an die CPU und diese kann das nächste Zeichen in den UART-Sendepuffer laden. usw.
Karl heinz Buchegger wrote: > Polling: Der Computer sieht regelmässig nach, ob es etwas zu > tun gibt und bearbeitet das dann. Folge: Durch das Zeitraster > gibt es möglicherweise eine Wartezeit. Das Zeitraster kann sich > auch mal verlängern, wenn der Computer gerade beschäftigt ist. Das Zeitraster kann sogar ein echtes Problem werden, wenn ein Ereignis kürzer als das Zeitraster ist: dann besteht die Gefahr, daß es nicht wahrgenommen wird. In der Analogie: Während der Arzt mit einem Patienten beschäftigt ist, kann er das Wartezimmer nicht pollen. Jetzt aber kommt der Pharmareferent rein und will Schmier^H^H^H^H^H^H Produktinformationen vorbeibringen, weil aber nur wenig Zeit hat geht er bald wieder, ohne den Arzt "informieren" zu können.
Und wenn der Arzt mal kurz ungestört mit seiner Sprechstundenhilfe ... äh, sagen wir mal, den weiteren Arbeitsablauf besprechen möchte, dann kann er das Behandlungszimmer abschließen, so dass du auch als Schwerkranker keinen Zutritt hast. Sobald er fertig ist, lässt er dich aber sofort herein, da er dein Klopfen trotz abgeschlossener Tür gehört und noch in Erinnerung hat. Das nennt sich dann Interruptsperre (Abschließen der Tür) und Zwischenspeichern oder Latchen des Interrupts (sich merken, wenn jemand bei abgeschlossener Tür anklopft). Interrupts sollten, wenn überhaupt, immer nur für sehr kurze Zeit gesperrt werden, sonst geht der Vorteil der kurzen Reaktionszeit verloren, und dem Arzt sterben die Notfallpatienten weg. Das Zwischenspeichern von kurzen Signalen wird oft auch im Pollingbetrieb praktiziert. Da die meisten µC dafür aber keine Hardwareunterstützung bieten, muss der Zwischenspeicher extern, bspw.in Form eines RS-Flipflops, angebaut werden.
Das RS-Flipflop entspricht dann den Helferinnen an der "Rezeption" .. die speichern Anfragen zwischen und sagen dem pollenden Arzt was er zu tun hat.. :D
Vielen Dank für die teils sehr originellen Erklärungen! Jörg R. hat darauf hingewiesen, dass Interrupts auch zu präzisen Timing-Aufgaben eingesetzt werden. So wie ich es bisher kennengelernt habe, zählt dabei ein Timer eine ganz bestimmte Zeit vor sich hin und verursacht nach Ablauf der Zeitspanne einen Interrupt. Inwiefern ist denn der Interrupt für die exakte Zeitmessung notwendig? Gruß Basti
>Inwiefern ist >denn der Interrupt für die exakte Zeitmessung notwendig? Was heißt "exakte Zeitmessung"? Der Interrupt ist nur die Aufforderung an die CPU, unmittelbar, in einer determinierten Zeitspanne, auf das Ereignis ,z.B. "Zählerunterlauf", zu reagieren. Der Programmierer kennt das Zeitintervall, das durch den Zählerablauf durchschritten wurde und kann entsprechend kalkulieren. Da es sich oft im periodische Prozesse handelt, subtrahiert sich die Interrupt-Latenzzeit heraus. Die Interrupt-Routine kann beispielsweise benutzt werden, um den Zähler neu zu initialisieren, auch mit einem anderen Wert (PWM) und so weiter und so fort.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.