STM32 GCC Buffer Interrupt Safe machen

Gast #3214400
Lesenswert?
• ▲
▼
Hallo,

ich habe ein kleines Problemchen mit meinen Ring Buffer.
Für die USB Schnittstelle habe ich jeweils für RX und TX einen Separaten 
Ring Buffer. Dabei sind RX und TX Interrupt gesteuert.

Das Problem tritt beim TX-Buffer auf, der Interrupt- und der 
Normale-Prozess greifen beide auf die gleiche Variable zu und es kommt 
zu Datenschrott. Tritt zwar selten auf, aber es kommt halt vor.

Beim AVR würde ich mit cli() sei() solange den Interrupt deaktivieren, 
wie macht man das am geschicktesten beim STM32?
#3214420
Lesenswert?
• ▲
▼
Innerhalb der kritischen Zone das BASEPRI-Register auf den Level des 
UART-Interrupts setzen (=> CMSIS Funktion). Sperrt alle Interrupts bis 
zu diesem Level, lässt höher priorisierte aber durch. Siehe dazu auch 
BASEPRI_MAX, falls sich sowas verschachteln sollte.

Alternativ lassen sich auch die jeweiligen Interrupts im NVIC sperren, 
und natürlich kann man mit der Holzhammer-Methode auch die Interrupts 
ganz abklemmen.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.