mikrocontroller.net

Forum: Compiler & IDEs snprintf avr


Autor: Ralf Rosche (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)
...

Autor: Ralf Rosche (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ralf Rosche (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.