Forum: Mikrocontroller und Digitale Elektronik sprintf und float. Probleme


von Manuel S. (doc-snyder)


Lesenswert?

Hallo,

ich nutze für die LCDausgabe sprintf um Strings in ein gewisses Format 
zu bekommen. Funktioniert wunderbar nur mit den Floats gibts Probleme. 
Ich kann irgendwie keine richtige Referenz finden. Weiß somit auch nicht 
ob sprintf von sich aus 0 terminiert. Ich wäre superdankbar wenn mir 
jemand eine GUTE Referenz zeigen kann. Größtes Problem das ich bis jetz 
habe ist:
1
sprintf(str, "Feuchtigkeit:%6.1f%%",SHT_humi);

Hier gibt sprintf anstatt des Feuchtigkeitswertes (float) ein 
Fragezeichen aus. Aufgrund der Warnung "format '%5.1f' expects type 
'double', but argument 3 has type 'float'" hab den Wert mal explizit 
(double)gecastet. Hilft aber auch nicht. Fragezeichen bleibt.

Weiß hier jemand mehr als ich? Mach ich was falsch oder ist sprintf für 
µCs nicht geeignet?

Grüße

von holger (Gast)


Lesenswert?


von Tassilo B. (big_t)


Lesenswert?

Unter der Annahme, daß die avr-libc mit GCC zum Einsatz kommt, muß die 
'große' Variante (mit float-Unterstützung) dazugelinkt werden:
1
-Wl,-u,vfprintf -lprintf_flt -lm

siehe dazu auch die Einschränkungen, die unter
http://www.nongnu.org/avr-libc/user-manual/group__avr__stdio.html#ga4c04da4953607fa5fa4d3908fecde449
beschrieben sind.

Tassilo

PS:
http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/

von Manuel S. (doc-snyder)


Lesenswert?

Ja vielen Dank! Das wars!

Wenn ich euch nicht hätte...

Gruß Manuel

von Timmo H. (masterfx)


Lesenswert?

Ich würde trotzdem versuchen anstatt printf etc. selbst eine Funktion zu 
machen, das ist erheblich kleiner als der Printf-Kram der dazugelinkt 
wird bei %f und Konsorten. Wenn du einen "größeren" AVR hast ist das 
aber evtl. eher unkritisch.
Siehe auch Festkommaarithmetik
Ich habe bisher noch nie auf printf zurückgegriffen, sondern immer meine 
eigenen Funktionen für die Ausgabe von Dezimalzahlen geschrieben, was 
mit einem niedrigen Flash-Verbrauch belohnt wird.

Wenn du natürlich einen großen µC hast und viel FPs ausgeben 
willst/musst ist es hingegen teilweise praktischer die vorhandenen 
Funktionen zu verwenden

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.