Forum: Mikrocontroller und Digitale Elektronik ESP8266 NONOS SDK: os_printf Prozentzeichen


von Hans (Gast)


Lesenswert?

Kann mal jemand kurz probieren, ob bei ihm das Prozentzeichen korrekt 
wiedergegeben wird? Also als einzelnes Zeichen ohne ein Leerzeichen 
danach!?

Zur Erklärung:
1
os_printf("100%% test");
führt bei mir zur Ausgabe von "100%  test". Da soll aber nur ein 
einzelnes Leerzeichen stehen!

Probiert habe ich auch
1
os_printf("100\% test");
und
1
os_printf("100% test");
Aber ohne Erfolg.

Ich wollte eigentlich nur schnell mal einen Prozentwert hübsch 
ausgeben...

von Hans (Gast)


Lesenswert?

Oh nein, sorry, was ich probiert habe, war:
1
os_printf("%d 100%% test\n", 1);
2
os_printf("%d 100\% test\n", 2);
3
os_printf("%d 100% test\n", 3);

Man erhält
1
1 100%  test
2
2 100%  test
3
3 100%  test

Aber warum ist das so?

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Ich halte es für einen Bug.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Wie sieht es aus bei:

os_printf("%d 100%c test\n", 1, '%');
bzw.
os_printf("%d 100%s test\n", 1, "%");

von Hans (Gast)


Lesenswert?

Naja, workarounds kann ich auch.
1
os_printf("%d 100%%test\n", 1);

Wirklich ein Bug? Kannst du es bei dir bestätigen?

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Hans schrieb:
> Naja, workarounds kann ich auch.

Das war oben eine Frage, keine Angabe eines Workarounds.

Deinen "Workaround" halte ich auch für ungünstig gewählt, denn es 
verändert das Verhalten, wenn der Bug später behoben wird. Dann fehlt 
Dir wieder das Leerzeichen. Das heißt, dieser "Workaround" ist 
inkompatibel.

> Wirklich ein Bug?

Da ich das Verhalten der Standard-Funktion printf() genau kenne, halte 
ich es für einen Bug, ja. Denn ich gehe davon aus, dass das von Dir 
verwendete os_printf sich an printf anlehnt.

Außer, es ist bei der von Dir verwendeten Lib ausdrücklich so 
dokumentiert. Ich kenne aber weder NONOS noch dieses os_printf. Was sagt 
denn die Dokumentation?

> Kannst du es bei dir bestätigen?

Nöö, wie gesagt: ich kenne weder NONOS noch benutze ich es.

: Bearbeitet durch Moderator
von A. S. (Gast)


Lesenswert?

Gibt es denn Doku oder Quelltext zu dieser Funktion?

Ggf hier Posten, die sind oft gut lesbar.

von Hans (Gast)


Lesenswert?

Nein, das SDK ist zu 99% closed source und die Doku eher dürftig. Ich 
wollte nur wissen, ob jemand den Fehler kennt oder ob ich den Fehler 
weiter bei mir suchen muss. Normalerweise landet alles am UART, aber ich 
habe die Ausgabe mittels os_install_putc1() in einen Puffer umgebogen. 
Und in dem Puffer kommt es eben so komisch an. Ist also nicht gerade 
Standard, daher die Frage.
Ich kann auch selbst am UART testen, aber das dauert ein paar Tage, weil 
es hardwaremäßig gerade nicht geht.

von S. R. (svenska)


Lesenswert?

Dann akzeptiere das als Bug, nutze den vorgeschlagenen Workaround (der 
mit und ohne Bug funktioniert) und schließe das Kapitel für dich ab.

von A. S. (Gast)


Lesenswert?

S. R. schrieb:
> Dann akzeptiere das als Bug, nutze den vorgeschlagenen Workaround (der
> mit und ohne Bug funktioniert) und schließe das Kapitel für dich ab.

Oder als Feature. Eine unbekannte Funktion mit fehlender Doku kann ja 
machen, was sie möchte. Wenn es ein printf sein soll, hätten sie es so 
genannt.

Und wenn der TO printf hätte haben wollen, könnte er ja auch sprintf 
nehmen und das Ergebnis per os_irgendwas Funktion rauspusten. Oder 
direkt printf und put entsprechend setzen...

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.