L. R. schrieb:
> hei,
>
> Den größten Teil mit " printf " habe ich bereits umgeschrieben.
> Möchte auch in Zukunft mich nach Möglichkeit von dieser Anweisung fern
> halten.
> Möchte auf einfache weise, den UART X zu wählen.
Ganz ehrlich.
Die einfachste Variante ist es, auf printf zu verzichten und statt
dessen über sprintf zu gehen.
Um das Schreiben von UART Funktionen kommst du sowieso nicht rum. Egal
für welche UART.
Und ob du
1 | printf("\033[%u;%uH", zeile, spalte );
|
schreibst, oder ob du
1 | char buffer[20];
|
2 | sprintf(buffer, "\033[%u;%uH", zeile, spalte );
|
3 | uart1_puts( buffer );
|
schreibst, ist im Grunde Jacke wie Hose. Denn wie gesagt, die uart
Funktionen, die eine bestimmte UART intialisiern bzw. 1 Zeichen auf der
UART ausgibt, bzw. darauf dann aufbauend eine Funktion die einen String
ausgibt (die uart1_puts) die wirst du sowieso schreiben müssen, wenn du
sie vom System nicht schon fertig zur Verfügung gekriegt hast.
Der einzige Unterschied ist, dass du in dem einen Fall die printf
benutzt und im anderen Fall du dir mit sprintf die Ausgabe in einen
String schreiben lässt(*) und du dann diesen String ausgibst. Aber
abgesehen davon kann sprintf genau dasselbe wie printf. Nur mit dem
Unterschied, dass du mit dem String, den dir sprintf generiert dann
machen kannst, was du willst. Sei es in einer Datenbank speichern, oder
auf einem LCD ausgeben, oder eine Laufschrift auf einer LED-Matrix
machen oder auch auf einer der zur Verfügung stehenden UARTs ausgeben.
Und wenn es sein muss, kann man das auch auf allen genannten Geräten
gleichzeitig tun.
Auf einem PC mit seinen komplexen I/O Strukturen würde ich dir nicht
dazu raten. Aber auf einem µC mit seinen vergleichsweise einfachen I/O
Strukturen ist das wesentlich einfacher, als zu ergründen, wie sich die
Macher der Lib das vorgestellt haben, dem printf unten rum die
Funktionalität unterzujubeln, auf bestimmten Geräten eine Ausgabe zu
machen.
(*) Das enstprechende Array muss natürlich gross genug dimensioniert
sein, damit der String auch hineinpasst.