Forum: Compiler & IDEs snprintf avr


von Ralf Rosche (Gast)


Lesenswert?

hallo,
ich habe ein problem mit der funktion snprintf.
bisher habe ich auf mein lcd nur ints ausgegeben so:
snprintf(s,6,"%u",counter) wobei counter int s car[8] ist
funktioniert einwandfrei.
nun wollte ich eine double/float variable ausgeben.
laut doku sollte es so gehen:
snprintf(s,8,"%4.2f",f) f ist float und s char[8] wie oben.
geht aber nicht. gibt ? aus oder unsinn wenn ich sprintf verwende.
habe auch alsformatstring %u und %d probiert hilft nix,
kann mir jemand mit dieser funktion helfen oder mir sagen wie ich ein
float auf dem lcd ausgeben kann?
gruss ralf

von Andreas W. (Gast)


Lesenswert?

Du musst noch die Float-Version von printf im Makefile aktivieren:

...
#---------------- Library Options ----------------
# Minimalistic printf version
PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min

# Floating point printf version (requires MATH_LIB = -lm below)
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt

# If this is left blank, then it will use the Standard printf version.
#PRINTF_LIB =
#PRINTF_LIB = $(PRINTF_LIB_MIN)
PRINTF_LIB = $(PRINTF_LIB_FLOAT)
...

von Ralf Rosche (Gast)


Lesenswert?

hallo,
danke für den tip,
ich habe die schon eingebunden. ändert allerdings nichts,
möglicherweise liegts an meinen lcd routinen, wobei ich keinen fehler
sehe. wenn jemand noch einne anderen tipp hat, würde ich mich freuen.
zur zeit habe ich mir damit beholfen, dass ich die funktion dtostrf
verwende. hiermit gehts:
  dtostrf(f,6,2,s);
   display_string(s);
wobei s char[10] und f double ist. 6,2 ist die precision.
ich verwende gcc.
gruss

von Andreas W. (Gast)


Lesenswert?

Ist deine Zahl möglicherweise zu lang?
Wenn die Zahl mehr als 8 Stellen (mit Komma) hat, dann schreibt
snprintf() keine NULL ans Ende des Strings bzw. sprintf über den String
hinaus.

von Ralf Rosche (Gast)


Lesenswert?

hi ,
danke
habe ich auch schon gedacht , aber ich habe für das \0 extra noch eine
stelle reserviert.
gruss ralf

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.