PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kann mir jemand den folgenden Code erklären?



FiTus
22.06.2006, 21:52
Wer kann mir den nachfolgenden Code erklären was er macht, und warum das gerade so programmiert wurde.



do
{
uint8_t dummy;
(void) (dummy = UDR);
}
while (UCSRA & (1 << RXC));


der code stammt aus dem rn-wissen bereich
https://www.roboternetz.de/wissen/index.php/UART_mit_avr-gcc


Mfg
Daniel Fiedler

BlueNature
22.06.2006, 22:15
Servus,

der Code macht nichts anderes als solange zu waren bis der UART ein RXD-Interrupt ausgelöst hat, also ein Byte empfangen hat. Danach mußt den UART lesen und das Byte eben selber verkuddeln.

Grüße Wolfgang

SprinterSB
23.06.2006, 08:18
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.)