Forum: Compiler & IDEs Was für Probleme können in dieser UART Funktion auftreten?


von Michael (Gast)


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?

von Guru (Gast)


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.

von Michael (Gast)


Lesenswert?

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


Danke für deine Antwort!

von Guru (Gast)


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.

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
Noch kein Account? Hier anmelden.