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