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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.