Hallo, ich habe den Fall, dass ich 5 Timer habe, die zylische Ints erzeugen. Die ISR sind über Semaphore auch im Eingriff miteiander und werkeln vor sich hin. Nun kann es ja sein, dass sich diese INTs so unglücklich aufteilen, da sie alle vom gleichen Takt erzeugt werden und in festgelegten Zeitabständen ab Start gestartet werden, dass 2.3.4...5 Ints gleichzeitig auftreten und es sich dann beim NVIC etwas "knubbelt." Die Ints sind nicht als nested interrupts ausgeführt, das soll auf jden Fall vermieden werden. 1s, 10s, 60s sind ja auch alles Vielfache voneinander. Gibt es Techniken sowas zu vermeiden, zb einen gewissen Jitter auf INTS aufzubringen, damit es eben vermieden wird, dass alle gleichzeitig aufgerufen werden sollen? Ob 1s oder 1,01s spielt keine Rolle. Gruss, Christian
Wo ist denn das Problem, wenn mehrere INTs direkt hintereinander ausgeführt werden? der Cortex-M kann das sehr effizient, indem redundantes Register-Sichern/Wiederherstellen vermieden wird, somit sparst du so sogar ein bisschen Rechenleistung.
Dr. Sommer schrieb: > Wo ist denn das Problem, wenn mehrere INTs direkt hintereinander > ausgeführt werden? Ich hatte das Problem mal bei zwei Funkmodulen, die sich "synchronisierten" und ständig in die Quere kamen, weil beide losfunkten und der Empfänger platt gemacht wurde. Ok, andere Sache. Wenn das kein Problem ist, dann lasse ich es so. Ich möchte aber trotzdem sicher sein, dass kein Int den anderen unterbricht, weil da ein paar atome Dinge drin sind. Ich habe mal abgedreht einen Fehler zu suchen, der nur alle paar Stunden auftrat. Weiss Du wie das geht dass keine nested ints passieren? Ich verwenden die Prio Group 4. Muss ich da explizit was machen oder ist das per default so?
Christian J. schrieb: > Weiss Du wie das geht dass keine nested ints passieren? Ja, einfach allen Interrupts exakt die gleiche Priorität geben. Es reicht schon, wenn die Preemption Priority gleich ist, dass die Interrupts sich nicht verschachteln. Im ARMv7M Architecture Reference Manual gibt's da ein schönes Kapitel zu, wo das genau erklärt wird.
Dr. Sommer schrieb: > Ja, einfach allen Interrupts exakt die gleiche Priorität geben. Ok. Ich habe bei der Init die Group 4 ausgewählt wo alle Bits dafür benutzt werde, also 1-15. Stelle ich die also zb alle auf 1 oder irgendeinen gleichen Wert (0 geht glaube ich nicht) dürfte das erledigt sein. Duie Sub Priority finde ich eher verwirrend.
Christian J. schrieb: > 1s, 10s, 60s sind ja auch alles Vielfache voneinander. Und dafür verschwendest du 5 Timer? Wie wäre es, in der ISR einfach einen Zähler zu inkrementieren?
Christian J. schrieb: > 0 geht glaube ich nicht Doch, 0 geht auch, ist die höchste Priorität. Christian J. schrieb: > Duie Sub Priority finde ich eher verwirrend. Lies das Manual, das wirkt Wunder, danach ist alles klar...
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.