USART über DMA -> Daten verwerfen

OP #2747891
Hallo Leute,

ich habe meine UART auf einem STM32F100 auf DMA umgestellt und habe 
folgendes Problem:

Ich habe einen Puffer, der 16 Bytes aufnehmen kann und 4 Zeilen "tief" 
ist. Ich kann also max 4 Datensätze puffern, die dann abgearbeitet 
werden.
Kommt ein fünfter Satz rein, ohne dass Platz ist möchte ich, dass der 
aktuelle Datensatz (nicht der älteste à la Ringpuffer) verworfen wird. 
Die Frage: Wie mache ich das? Ich kann in der DMA ISR natürlich 
abfragen, ob der Puffer voll ist. Ist das der Fall, möchte ich, dass die 
Daten nicht mehr kopiert werden. Zum Beispiel indem ich den DMA 
ausschalte. Aber natürlich tritt dann ein Overrun an der UART auf, was 
ich nicht möchte, da zur Fehleranalyse der Overrun Interrupt der UART 
aktiviert ist.

Gibt es sowas, wie ein "schwarzes Loch", /dev/null, was auch immer, 
möglichst ohne Speicher zu verschwenden? Natürlich kann ich den circular 
Mode des DMA anmachen und irgendwo in den Speicher schreiben (natürlich 
in eine vorher definierte Variable), aber da brauche ich eben Speicher..

Danke + schöne Grüße!
OP
Danke für eure Antworten!

Rufus Τ. Firefly schrieb:
> Bei vollem "DMA-Puffer" auf UART-ISR umschalten und jedes empfangene
> Zeichen "von Hand" wegwerfen?
>
> Oder vielleicht bei so geringem Datenmengen gleich ganz auf DMA-Betrieb
> verzichten?

Wollte den DMA ausprobieren, und wenn man schon CPU Zeit sparen kann, 
was spricht dagegen (vorausgesetzt es funktioniert natürlich ;))
Im Moment verwerfe ich die Bytes, wenn der ORE Interrupt kommt, was ja 
in dem Fall das selbe ist, wie der RXNE Interrupt.

A. K. schrieb:
> Das DMA auf nicht-inkrementierend umstellen, wenn der DMA-Counter
> abgelaufen ist. Ein einziges Byte als Mülleimer geht ja wohl noch.

Ja klar, das geht :) Aber ich dachte eventuell gibt es da schon was 
eingebautes.

Ich denke, ich werde die Daten weiterhin in der UART ISR verwerfen, 
danke für eure Meinungen :)
OP
Okay, aber was würdest du sonst machen, wenn der Eingangspuffer voll 
ist, die Befehle aber noch nicht verarbeitet wurden? (Dieser Fall sollte 
eh nie auftreten, aber es hieß ich solle mir um den Fehlerfall Gedanken 
machen ;))
Ich kann natürlich auch im Kreis schreiben, aber dann werden unter 
Umständen noch nicht bearbeitete Befehle überschrieben, das kann auch 
nicht die Lösung sein

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 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.