mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ARM Cortex M4 Interrupt Synchronisation


Autor: MicroFrickler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Jim M. (turboj)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gib dem Händler höchste Priorität und fertig.

Autor: MicroFrickler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: m.n. (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
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.

Autor: MicroFrickler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Dr. Sommer (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.