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ß!
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... :-/
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.