mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Priorität der Interrupts


Autor: Owen Senmeis (senmeis)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Lutz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.