sprintf und float. Probleme

OP #2379435
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
#2379453
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/
#2379651
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren