Forum: Mikrocontroller und Digitale Elektronik Priorität der Interrupts


von Owen S. (senmeis)


Lesenswert?

Servus,

wenn zwei Interrupts gleichzeitig kommen, gewinnt der Interrupt höherer 
Priorität. Die Frage ist, geht der Interrupt niedrigerer Priorität 
verloren, wird dieser danach weiter bearbeitet oder es kommt darauf an, 
welcher MCU in Frage kommt?

Danke
Senmeis

von Johannes M. (johnny-m)


Lesenswert?

Wenn zwei Interrupts zeitgleich auftreten, dann wird der Handler des 
Interrupts, der die höhere Priorität besitzt, abgearbeitet und 
anschließend derjenige des Interrupts niederer Priorität. Ereignisse 
gehen nur dann verloren, wenn während der Abarbeitung des ersten 
Handlers weitere Ereignisse an dem Interrupt niederer Priorität 
auftreten. Wenn das betreffende Flag bereits gesetzt ist, kann es 
schließlich nicht noch einmal gesetzt werden...

von Lutz (Gast)


Lesenswert?

>> Wenn das betreffende Flag bereits gesetzt ist, kann es
>> schließlich nicht noch einmal gesetzt werden...

Genau das ist der Punkt: Nicht alle uC haben auch für wirklich jeden 
Interrupt ein Flag! Läßt sich noch steigern durch die Aussage eigenes 
Flag (z.B. Pinchangeinterrupt, 2 Pins triggern, einer nur kurz).

Weiterhin ist die Frage, ob bei Abarbeitung des ersten Interrupts 
weiterhin andere Interrupts freigegeben sind. Wenn ja, kann der erste 
unterbrochen und der zweite abgearbeitet werden.

Es kann somit (je nach beschriebener Konstellation) schon passieren, das 
ein nur kurz anliegender Interrupt "vergessen" wird, während ein anderer 
gerade ausgeführt wird.

Also: Datenblatt lesen

von Johannes M. (johnny-m)


Lesenswert?

Lutz wrote:
>>> Wenn das betreffende Flag bereits gesetzt ist, kann es
>>> schließlich nicht noch einmal gesetzt werden...
>
> Genau das ist der Punkt: Nicht alle uC haben auch für wirklich jeden
> Interrupt ein Flag! Läßt sich noch steigern durch die Aussage _eigenes_
> Flag (z.B. Pinchangeinterrupt, 2 Pins triggern, einer nur kurz).
Das ist (im Falle Pin Change Interrupt beim AVR) aber ein und derselbe 
Interrupt, und nicht "ein Flag für mehrere Interrupts"! Jeder Pin Change 
Interrupt hat eine gewisse Anzahl an möglichen Quellen, aber es bleibt 
ein Interrupt. Dass das nichts mit Prioritäten zu tun hat, dürfte klar 
sein. Ein Pin Change Interrupt an mehreren Pins macht nur Sinn, wenn man 
den Zustand aller aktivierten Pins im Handler einliest.

> Weiterhin ist die Frage, ob bei Abarbeitung des ersten Interrupts
> weiterhin andere Interrupts freigegeben sind. Wenn ja, kann der erste
> unterbrochen und der zweite abgearbeitet werden.
Dann spielen aber eventuelle Prioritäten eine Rolle, oder eben (wie z.B. 
beim AVR) gerade nicht, weil es keine echten Prioritäten gibt und in 
einem solchen Fall jeder andere Interrupt dazwischenhauen kann.

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Owen Senmeis wrote:
> Servus,
>
> wenn zwei Interrupts gleichzeitig kommen, gewinnt der Interrupt höherer
> Priorität. Die Frage ist, geht der Interrupt niedrigerer Priorität
> verloren, wird dieser danach weiter bearbeitet oder es kommt darauf an,
> welcher MCU in Frage kommt?
>
> Danke
> Senmeis

Von welcher MCU sprichst Du? Beim AVR duerfte es so sein, dass, falls 
wirklich zwei Interrupts zur bearbeitung gleichzeitig anstehen, der mit 
der kleineren Vektornummer siegt. Interrupts gehen nur dann verloren, 
wenn in der Zeit, in der sie deaktiviert sind mehr als zwei fuer einen 
Vektor auftreten, da der AVR dies nur mit einem Bitflag vormerkt.

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
Noch kein Account? Hier anmelden.