Hallo, Ich habe ein Interrupt bei einem xmega, dass durch CTC ausgelöst wird. Das Interrupt hat hohe Priorität. Das Interrupt wird sehr häufig ausgelöst, da der Zähler nicht weit zählt. Sagen wir, der Zähler zählt bis 1000 Systemtakte. Wenn ich nun beim Auslösen des Interrupts eine Routine starte (ISR), die mehr als 1000 Systemtakte benötigt, was passiert dann bei einem neuen Interrupt? Es ist eine Verständnisfrage darüber, wie ein mC arbeitet. Wird das neue Interrupt erst wieder ausgelöst, wenn die alte Routine fertig ist? Oder wird die alte unterbrochen? Mit ist bewusst, dass ein Interrupt nur sehr kurz sein soll. Aber mal angenommen man hat diesen Fall. Danke und Gruß
@ Highii H. (highii) >Das Interrupt wird sehr häufig ausgelöst, da der Zähler nicht weit >zählt. Sagen wir, der Zähler zählt bis 1000 Systemtakte. Wenn ich nun >beim Auslösen des Interrupts eine Routine starte (ISR), die mehr als >1000 Systemtakte benötigt, was passiert dann bei einem neuen Interrupt? https://www.mikrocontroller.net/articles/Interrupt#Zeitverhalten_eines_Timerinterrupts >Wird das neue Interrupt erst wieder ausgelöst, wenn die alte Routine >fertig ist? Ja. > Oder wird die alte unterbrochen? Ein Interrupt kann sich SELBER nicht unterbrechen (jaja, man kann es hintricksen, daber das ist keine Lösung, eher ein neues Problem).
>Mit ist bewusst, dass ein Interrupt nur sehr kurz sein soll. Aber mal >angenommen man hat diesen Fall. Wenn Dein Rechner nicht mal zwischendurch Einkaufen war, ist die Gefahr groß, dass der Interrupt sich nochmal unterbricht, und nochmal unterbricht, und... Dein PC würde in diesem Falle: Stack overflow sagen und einen Abstecher ins Nirwana machen. Ein µC macht zwar dasselbe, hüllt sich dabei aber in Schweigen
Falk B. schrieb: >>Wird das neue Interrupt erst wieder ausgelöst, wenn die alte Routine >>fertig ist? > > Ja. Wie ist das wenn ich unterschiedlich priorisierte Interruptroutinen habe. Wenn z.B. ein Interrupt gerade abgearbeitet wird, welches eine geringere Priorisierung besitzt als gerade ausgelöst wird? Wird dann die noch weniger priorisierte Interruptroutine zu ende bearbeitet oder an dem Punkt wo sie ist unterbrochen und zur wichtigen Interruptroutine springen?
Amateur schrieb: > Ein µC macht zwar dasselbe, hüllt sich dabei aber in Schweigen Kommt drauf an. Bei einem AVR sind die Interrupts während der Abarbeitung einer ISR automatisch gesperrt. Was nicht heisst, dass ein auftretender Interrupt nicht registriert wird - er wird registriert (genau einer). Nur kommt es nicht zu einer Unterbrechung der ISR und damit auch nicht zu einem Stack Overflow. Im schlimmsten Fall wird dann ein Interruptereignis übersprungen, was sich normalerweise dann in fehlerhaften Werten manifestiert. Ist es allerdings der Normalfall, dass Interrupts schneller auftreten als sie abgearbeitet werden können, dann hat man ein Problem. Das ist so, wie wenn du zur Bearbeitung einer Reperatur 20 Minuten brauchst, aber alle 10 Minuten kommt ein zu reparierendes Gerät herein. Die Situation kannst du logischweise alleine nicht mehr meistern, irgendwann ist die Werkstatt voll. Dann heisst es entweder schneller arbeiten oder keine neuen Aufträge mehr annehmen. Zaubern kann keiner, auch nicht ein AVR.
:
Bearbeitet durch User
@ Elektrotiger (Gast) >Wie ist das wenn ich unterschiedlich priorisierte Interruptroutinen >habe. Anders. >Wenn z.B. ein Interrupt gerade abgearbeitet wird, welches eine geringere >Priorisierung besitzt als gerade ausgelöst wird? >Wird dann die noch weniger priorisierte Interruptroutine zu ende >bearbeitet Nein, sie wird vom höher priorisierten Interrupt sofort unterbrochen. > oder an dem Punkt wo sie ist unterbrochen und zur wichtigen >Interruptroutine springen? Klar, sonst hätte das Konzept der Interruptprioritäten wenig Sinn.
Haben TC Handler automatisch höchste Priorität? Bei mir unterdrückt es Systick, also der wichtigsten Interruptroutine. Mein Button Handler ist brav an letzter Stelle, aber bei einem TC Handler kann ich keine Priorität einstellen?
Wer oder was ist ein TC Handler? Und wovon sprichst du konkret? NOrmalerweise kann man Interrupt Prioritäten immer einstellen. Wenn du ein Framework benutzt (wovon ich ausgehe - ARM - T(ouch)C(ontroller) - Systick), dann wird irgendwo in den Tiefen des Frameworks die NVIC Priorität eingestellt sein.
Highii H. schrieb: > Das Interrupt wird sehr häufig ausgelöst, da der Zähler nicht weit > zählt. Sagen wir, der Zähler zählt bis 1000 Systemtakte. Wenn ich nun > beim Auslösen des Interrupts eine Routine starte (ISR), die mehr als > 1000 Systemtakte benötigt, was passiert dann bei einem neuen Interrupt? Wenn ein Interrupt nach 1000 Taten ausgelöst wird und selbst mehr als 1000 Takte benötigt, dann ist der MC überlastet. Wie schon geschrieben wird die IRS danach direkt, aber zeitlich falsch, ausgeführt. Joe
@ Joe (Gast) >Wenn ein Interrupt nach 1000 Taten ausgelöst wird und selbst mehr als >1000 Takte benötigt, dann ist der MC überlastet. Ja. Aber es gibt manchmal auch verzeigte ISRs, wo ein Zweig nur 100 Takte, ab und an ein anderer Zweig aber 1500 Takte braucht. Siehe Interrupt.
Karl H. schrieb: > NOrmalerweise kann man Interrupt Prioritäten immer einstellen. Wenn du > ein Framework benutzt (wovon ich ausgehe - ARM - T(ouch)C(ontroller) - > Systick), dann wird irgendwo in den Tiefen des Frameworks die NVIC > Priorität eingestellt sein. -.- Richtig, danke. Arbeite mit der ASF von Atmel, deren Ordnung ist Teils sehr verwirrend. So stellt man die Priorisierung des Button Handlers über pio.h:
1 | pio_handler_set(PIOA, ID_PIOA, BUTTON_01_MASK, BUTTON_01_ATTR, BUTTON_Handler); |
Allerdings die TC wie es sein sollte dann über NVIC. Für nen Laien echt doof :(.
Amateur schrieb: > st die Gefahr > groß, dass der Interrupt sich nochmal unterbricht, und nochmal > unterbricht, und... Unsinn! Karl H. schrieb: > Wer oder was ist ein TC Handler? TC -> Timer/Counter
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.