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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.