Verständnisfrage zu Ringpuffer von P. Fleury

Gast #2134004
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ß!
Moderator (Firma: Titel) Persönliche Seite #2134018
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... 
:-/
Gast #2134180
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ß

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren