Aliasing vermeiden bei ISR's

Gast #4512214
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
Gast #4512243
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.
Gast #4512250
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?
Gast #4512258
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.
Gast #4512507
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.