Forum: Mikrocontroller und Digitale Elektronik Verständnisfrage zu Ringpuffer von P. Fleury


von Vali (Gast)


Lesenswert?

Hallo ich,

ich lerne mich gerade in die UART Programmierung ein und habe eine Frage 
zur UART Library von Peter Fleury.

Hierzu habe ich eine Frage zu den Fehlerzuständen.

#define UART_FRAME_ERROR      0x0800       /* Framing Error by UART 
*/
#define UART_OVERRUN_ERROR    0x0400       /* Overrun condition by UART 
*/
#define UART_BUFFER_OVERFLOW  0x0200       /* receive ringbuffer 
overflow */
#define UART_NO_DATA          0x0100       /* no receive data available 
*/

Das Programm bzw. DEMO an für sich ist ja repräsentativ um das 
Verständnis für den FIFO zu erleichtern.

Muss man in der Realität wirklich all diese Vorsichtsmaßnahmen 
berücksichtigen? Ein Bufferoverflow tritt ja so oder auf, wenn mein 
Programm zu langsam ist, die Daten aus dem Buffer zu holen.

UART_NO_DATA ist ja eigentlich auch nur da, um beim sofortigen Versenden 
der empfangenen Zeichen zu zeigen, das mein uC schneller sendet, als das 
die Daten vom Gerät etc empfangen werden.

Bei UART_FRAME_ERROR und UART_OVERRRUN_ERROR kann ich ja 
programmtechnisch eh nicht eingreifen, oder? Das ist ja im Grunde ein 
Fehler das vom Gerät, dass die Daten sendet, verursacht wird.

IM Grunde bräuchte ich diese ganze Rückgabewerte, die mich auf eine 
Fehlermeldung hinweisen gar nicht, oder?! Ein FIFO soll ja nur meinem 
Programm die Möglichkeit geben gemütlich die Daten abzuholen un dzu 
speichen. in meinem Hauptprogramm kann ich dann auf ein Startzeichen 
warten und dann die Zeichenkette je nach Bedarf bearbeiten.

Gruß!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Vali schrieb:
> IM Grunde bräuchte ich diese ganze Rückgabewerte, die mich auf eine
> Fehlermeldung hinweisen gar nicht, oder?!
Richtig: im fehlerfreien Fall brauchst du keine Fehler bearbeiten...

Diese Fehlerbits sind ja nur interessant, wenn sie mal gesetzt werden. 
Denn dann sind die Daten im FIFO eigentlich wertlos, weil irgendwie 
korrupt! Und du machst nur Folgefehler, wenn du damit arbeitest... 
:-/

von Vali (Gast)


Lesenswert?

Hallo Lothar,
vielen Dank für die Antwort...OK, also sollte man sie auf jeden Fall im 
Programm berücksichtigen und nicht einfach weglassen. Sprich, tritt eine 
dieser Meldungen auf, so sind die Daten Müll.

if( !( getc & UART_NO_DATA )     &&
    !( getc & UART_FRAME_ERROR )  &&
    !( getc & UART_OVERRUN_ERROR )  &&
    !( getc & UART_BUFFER_OVERFLOW ) )

    uart0_putc( (unsigned char)c );

Sie sollen also nicht zu weiteren Verarbeitung/Versendung verwendet 
werden.
Gruß

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
Noch kein Account? Hier anmelden.