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?
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.
Ok, also es nicht so, dass ich keine Interrupts verwende. Ich verwende sie z.B. beim UART Rx... Danke für deine Antwort!
>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.