Forum: Mikrocontroller und Digitale Elektronik ESP32 stdio \n -> \r\n translation


von China Böller (Gast)


Lesenswert?

Ahoi,

beim ESP32 wird bei stdio Ausgaben (printf, putchar) "\n" nach "\r\n" 
übersetzt. Ich bin mir recht sicher, dass es da einen Switch gibt um das 
abzuschalten. Einige Sucherei in der stdio-lib war leider erfolglos.

https://github.com/espressif/newlib-esp32/tree/master/newlib/libc/stdio

Hat jemand eine Idee?

Danke,
 C.B.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Google spuckt so etwas aus:
1
make menuconfig
2
...
3
Component config -> ESP32-specific config -> Standard-out output adds carriage return before newline

von China Böller (Gast)


Lesenswert?

Frank, ich verneige mich vor Deinem Google-fu!
Ausprobiert - es geht.

Nach was hast Du gesucht?

von Timmo H. (masterfx)


Lesenswert?

"esp32 \r\n printf"
führ zu diesem Link: https://www.esp32.com/viewtopic.php?t=492

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Ja, der Link ist genau der, den ich auch gefunden hatte. Suchbegriffe 
waren: esp32 printf newline no carriage return

von China Böller (Gast)


Lesenswert?

Ah, ich hatte speziell nach einem Switch für stdio gesucht.
Nochmal Danke!

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Ich bin etwas neugierig geworden: Warum möchtest Du das \r unterdrücken?

Normalerweise ist es sinnvoll, dass bei einer Bildschirmausgabe 
(Unix/Linux: "tty") aus \n ein \r\n gemacht wird, damit der Cursor im 
Terminal tatsächlich durch das \r (Carriage Return) zunächst an den 
Anfang der Zeile geht und dann mit dem \n (Newline) eine Zeile tiefer 
rutscht. Ohne dieses Mapping fängt nämlich jede neue Zeile eingerückt an 
und der Output wandert immer weiter nach rechts.

Unter Unix kann man dieses Mapping durch diverse ioctls bzw. 
termio-Calls manipulieren, um volle Kontrolle über die Bildschirmausgabe 
zu bekommen und solche Mappings zu unterdrücken. Macht man aber 
eigentlich nur, wenn man eine Full-Screen-Anwendung baut wie einen 
Editor oder ein Menüsystem. In diesem Fall kann man dann auf curses 
(Unix) bzw. ncurses (Linux) bzw. mcurses (µCs) zurückgreifen, die so 
etwas verwalten.

Also: Was stört Dich an \r\n?

von China Böller (Gast)


Lesenswert?

Ursache ist der Wunsch nach Kompatibiltät zu einem bestehenden System.

Der ESP32 ist nur ein Nebenschauplatz in dem Projekt und soll ebenfalls 
ein seit 20 Jahren etabliertes, proprietäres Telegrammformat nutzen. 
Sowas wie "MU FO 0\n". Mangels Pins hängen ein paar Teilnehmer per 
wired-AND am Konsolen-UART.

Die Frage habe ich geschrieben, weil z.B. ein freopen zur Folge hatte, 
dass gar nichts mehr gesandt wurde.

Tatsächlicher Chip ist der ESP32-WROVER. Die entsprechende Baugruppe ist 
fertig zugelassen und im Markt, wir schrauben im Moment ein paar neue 
Features an die Firmware.

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
Noch kein Account? Hier anmelden.