Hallo,
meine Frage bezieht sich auf das Tutorial zum UAART Interrupt auf
mikrocontroller.net
[[http://www.mikrocontroller.net/articles/Interrupt#UART_mit_Interrupts]]
Mir ist aufgefallen, wenn ich direkt hintereinander mehrere Strings mit
der Funktion put_string sende, dass dann einige Zeichen verschluckt
werden oder sich einfach misst ergibt.
Ich habe mir die Sache jetzt so erklährt:
Beim Übergeben des ersten Strings an put_string wird ja das
uart_tx_flag=0 gesetzt (nach dem motto bin jetzt am senden, bitte nix
neues mehr) und wenn die Senderoutine (welche über den UDRE Interrupt
läuft) mit dem ganzen String fertig ist wird uart_tx_flag=1 gesetzt -
also senden fertig.
Zwischen dem senden von zwei Zeichen des Strings - also zwischen zwei
UDRE Interrupts kehrt der Programmzähler wieder zum "Hauptprogramm"
zurück und dort soll schon gleich der nächste String losgeschickt
werden. Dieser kann aber nicht auf die Reise gehn, da uart_tx_flag noch
0 ist und somit die Funktion put_string ihren dienst verweigert.
Hab ich das so richtig verstanden ??
Ich habe das Problem so gelöst:
1 | put_string("\n");
|
2 |
|
3 | while(!uart_tx_flag)
|
4 | {
|
5 | }
|
6 |
|
7 |
|
8 | put_string(string); // Den String zurück zum Pc senden
|
9 |
|
10 | while(!uart_tx_flag)
|
11 | {
|
12 | }
|
13 |
|
14 |
|
15 | put_string("\n");
|
Aber die Lösung kommt mir ziemlich dämlich vor oder ?