Wer kann mir den nachfolgenden Code erklären was er macht, und warum das gerade so programmiert wurde.
der code stammt aus dem RN-Wissen bereichCode:do { uint8_t dummy; (void) (dummy = UDR); } while (UCSRA & (1 << RXC));
https://www.roboternetz.de/wissen/in...RT_mit_avr-gcc
Mfg
Daniel Fiedler
Der Code ist ein "Flush" des Empfangs-Puffers UDR. Wenn man den UART neu initialisiert kann es sein, daß er in einem undefinierten Zustand ist und seltsame Zeichen enthält. Daher wird der Puffer in der Initialisierung des UART erst mal leergeräumt wie im Handbuch empfohlen.
Um den Wert auszulesen wird die Variable dummy verwendet. Da diese nicht weiter verwendet wird und man dadurch evtl. eine Compiler-Warnung erhält, ist dem Ausdruck ein (void) vorgestellt (cast auf void).
Näheres zum Flush des Receive-Buffers findest du in den Manuals des jeweiligen AVRs unter UART bzw USART.
Mit Interrupts hat das nichts zu tun, weil UART-Interrupts an der Stelle nicht aktiviert sind (und auch später nicht verwendet werden.)
Disclaimer: none. Sue me.
Lesezeichen