Was für Probleme können in dieser UART Funktion auftreten?

Gast #2116472
Lesenswert?

Hi,

ich habe hier die UART Funktion aus dem Tutorial, welche Probleme können 
bei der Verwendung auftreten?


    while (!(UCSRA & (1<<UDRE)))
    {
    }

    UDR = 'x';

Gut, mit der While Schleife blockiere ich das Programm. Aber können 
Daten verloren gehen wenn ich die Funktion mehrmals hintereinander 
aufrufe (z.B. String senden)?
Oder können Daten überschrieben werden?

Betriebsmodus wäre ohne jeglichen Interrupts.

Ist die Verwendung eines FIFO's deutlich besser und sinnvoller?
Gast #2116490
Lesenswert?

Die Frage ist, mit welcher Häufigkeit pro Zeiteinheit (also 
Geschwindigkeit) die Daten erzeugt werden und wie diese Geschwindigkeit 
in Relation zur Baudrate steht.

Falls die Daten langsamer erzeugt als gesendet werden, ist diese 
einfache Funktion OK und es gehen keine Daten verloren.

Im umgekehrten Fall, wird zu beobachten sein, dass die Daten (falls das 
grundsätzlich der Fall ist) keinen Bezug zur Realzeit haben und immer 
weiter "hinterherhinken".

Falls aber die Daten nicht kontinuierlich so schnell erzeugt werden, 
also Pausen auftreten wäre ein FIFO nützlich. Den könnte man auch mit 
Polling aus der Hauptschleife betreiben (also abfragen ob er noch Daten 
enthält).

Langfristig (in Bezug auf die Entwicklung Deiner Fähigkeiten) wäre aber 
die Verwendung von Interrupts doch sinnvoll, da dies einiges einfacher 
macht.
Gast #2116575
Lesenswert?

>Ok, also es nicht so, dass ich keine Interrupts verwende.
>Ich verwende sie z.B. beim UART Rx...

Nun. Ich wollte darauf hinaus, dass Du Interrupts mit Gewinn auch beim 
Senden verwenden kannst, gerade wenn Du einen Buffer verwendest. Den Du 
kannst einen Interrupt immer dann auslösen, wenn das Senderegister 
wieder leer ist.

Viel Erfolg.

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