Priorität der Interrupts

OP #808277
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
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...
Gast
>> 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
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.
Persönliche Seite
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.