Hallo Leute, habe folgendes Problem. Ich soll ein Programm Debuggen, wo vorher ein Entwickler das Kunststück vollbracht hat, das ganze Programm ohne Main-Schleife nur in Zeit- oder Nachrichtenereignis gesteuerte Interrupts auszuführen. Wenn alles per Interrupt gesteuert wird, dann gibt es im Grunde eigentlich gar kein richtiges Interrupt-Verhalten mehr in der Programmausführung, weil ein Interrupt ja eigentlich ein statisch ablaufendes Programm dynamisch unterbrechen soll. Ich benutze den Prozessor TM4C123AHP6M von TI, als Libraries die Routinen, die CSS und TIVAWARE zur Verfügung stellen. Ich will ein Verhalten erreichen, dass ein Interrupt, der den UART-ISR-Handler aufruft, alle anderen laufenden ISR-Handler unterbricht bei der Ausführung, wenn möglich. Oder wird das so oder so schon gemacht, dass ein ISR-Handler gestoppt wird und ein anderer ausgeführt wird? Und / oder will ich, dass der UART-ISR-Handler bei der Auführung dann nicht unterbrochen wird. Also soll folgendes passieren: - der UART-ISR-Handler soll sofort ausgeführt werden, auch wenn andere ISR-Handler laufen - wenn der ausgeführt wird, soll er nicht unterbrochen werden Ich hoffe und bin dankbar für hilfreiche Antworten, denn das ist zum Verzweifeln, wenn man ein Programm retten soll, dass schon von vornherein sämtliche Eigenarten eines Mikrocontrollers nicht berücksichtigt bezüglich Timing/Synchronisation von Interrupts und dass der Entwickler sich viel zu sehr auf die Korrektheit und Robustheit aller gelieferten Funktionen und deren Geschwindigkeit verlassen hat.
Schau Dir mal den NVIC genauer an. Du kannst obiges Problem lösen, indem Du dem Uart IRQ die Priorität 0 (NULL) und den restlichen eine höhere Nummer (=geringere Priorität) gibst.
Das mit der Priorität hat ein Kollege von mir so erklärt, dass der nur zum Tragen kommt, wenn zwei Interrupts extrem zeitnah auftreten und daher der NVIC (Interrupt Controller) nach der Priorität entscheiden soll, welcher ausgeführt wird. Könnt ihr garantieren, dass die Priorität auch dafür sorgt, dass der ISR des höher priorisierten Interrupts immer vorrang bei der Ausführung hat und nicht nur bei zeitlichen Kollisionen?
MicroFrickler schrieb: > Könnt ihr garantieren, dass die Priorität auch dafür sorgt, dass der ISR > des höher priorisierten Interrupts immer vorrang bei der Ausführung hat > und nicht nur bei zeitlichen Kollisionen? Ich kann Dir eine Versicherung anbieten. Mit € 499/Jahr garantiere ich es Dir.
m.n. schrieb: > MicroFrickler schrieb: >> Könnt ihr garantieren, dass die Priorität auch dafür sorgt, dass der ISR >> des höher priorisierten Interrupts immer vorrang bei der Ausführung hat >> und nicht nur bei zeitlichen Kollisionen? > > Ich kann Dir eine Versicherung anbieten. Mit € 499/Jahr garantiere ich > es Dir. Kein Thema, ich weiß um eure sichere Kompetenz. Ich habe es auch gerade im Dateblatt nachgelesen, was hier geschrieben wurde.
MicroFrickler schrieb: > Das mit der Priorität hat ein Kollege von mir so erklärt, dass der nur > zum Tragen kommt, wenn zwei Interrupts extrem zeitnah auftreten und > daher der NVIC (Interrupt Controller) nach der Priorität entscheiden > soll, welcher ausgeführt wird. Das gilt nur für die Subpriority. Die Preemption Priority erlaubt es dir, dass ein Interrupt einen anderen unterbrechen kann. Dafür steht das N in NVIC - Nested Vectored Interrupt Controller. Der ist explizit dafür ausgelegt, dass ein Interrupt einen anderen unterbrechen kann. Lies es doch einfach im ARMv7M Architecture Reference Manual nach, da steht das ganz genau beschrieben, ohne dass man sich auf vages Halbwissen von Kollegen verlassen müsste. MicroFrickler schrieb: > Ich soll ein Programm Debuggen, wo vorher ein Entwickler das Kunststück > vollbracht hat, das ganze Programm ohne Main-Schleife nur in Zeit- oder > Nachrichtenereignis gesteuerte Interrupts auszuführen. Also eine sehr elegante und (energie)effiziente asynchrone reaktive Programmierung.
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.