hei, PIC32MX795F512L C32 Compiler Der µC hat gesamt 6 UART Wenn ich eine Anweisung mit printf absende, woher weis dann der µC welcher UART gemeint ist? schönen Abend wünsche ein frohes Weihnachtsfest und ein gutes neues Jahr
Das weiß er nicht. Und daher darfst du jetzt in das Compiler-Handbuch sehen, um herauszufinden wie man beim C32 einstellt wohin Standard-Output (printf) geht oder wie man andere *printf()-Varianten mit einem UART verbindet.
:
Bearbeitet durch User
hei, Habe heute weiter gesucht, wie man bei diesem µC den printf Befehl dem UART 3 zuordnet. Derzeitig kommt alles am UART 2 an. Ich habe davon keine Ahnung. schönen Abend
printf ist sowieso ganz falsch. Diese alleskoennende Funktion ist viel zu klotzig auf einem Controller. Dann ist printf blockierend, das ist ebenso ganz falsch. Man schreibt die Applikation immer nicht blockierend.
думлихер троль schrieb: > printf ist sowieso ganz falsch. Diese alleskoennende Funktion ist viel > zu klotzig auf einem Controller. Dann ist printf blockierend, das ist > ebenso ganz falsch. Man schreibt die Applikation immer nicht > blockierend. Auf einem Controller mit 512k Flash geht ein printf im Rauschen unter. Und was heißt blockierend? printf wird die auszugebenden Zeichen irgend einer Art von IO-Schicht übergeben. Diese kann durchaus gepuffert sein so das printf zurückkehrt noch bevor auch nur ein Zeichen die serielle Schnittstelle (oder ein Display, oder was auch immer) erreicht hat. Matthias
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. Die Cursor Position habe ich immer so gemacht.
1 | printf("\033[%u;%uH", zeile, spalte ); |
Dieses ist meine jetzige Version. Leider ist hier in der Zeile die Koordinaten fest vorgegeben. Ich möchte hier flexibel sein.
1 | *buf = "\033[25;30H\0"; // Zeichen Position |
2 | Uart3_WriteString(*buf); |
vielen Dank für jede Info/Hilfe schönen Tag
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.
:
Bearbeitet durch User
hei, passt, wackelt und hat Luft. Es funktioniert so wie ich möchte. Vielen Dank. schönen Tag wünsche allen ein frohes Weihnachtsfest und ein gutes neues Jahr
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.