Forum: Compiler & IDEs avrgcc printf "width" Option ?


von Ja mann (Gast)


Lesenswert?

Moin!

ich versuche gerade einen signed long so auszugeben:
1
sprintf(temp, "%010ld", value);

Es wird aber weder mit Nullen noch mit Leerzeichen aufgefüllt, sondern 
"ganz normal" gewandelt (z.b. 23 -> "23" anstatt "0000000023"). 
Vermutlich ist das in der printf Funktion im AVRGCC nicht enthalten, 
aber wie könnte ich soetwas am einfachsten nachrüsten ?

von Jörg X. (Gast)


Lesenswert?

Bei mir gehts!

OK, mal ernsthaft:
WinAVR20071221 mit AVR-Studio 4.14 und dessen Makefile + Atmega8 zeigt, 
dass folgendes im Simulator funktioniert (ich habe nicht weiter 
getestet, weil ich dein Problem scheinbar nicht nachstellen kann).
1
char temp[20];
2
sprintf(temp, "%010ld", 23L);
3
// temp enthaelt dann
4
// {'0', '0', '0', '0', '0', '0', '0', '0', '2', '3', 0}
Verrat' mehr details!

hth, Jörg

von Andreas K. (a-k)


Lesenswert?

Richtige Lib verwenden. Eine der Versionen ist etwas eingedampft um 
Platz zu sparen. Steht in der Doku vom avr-libc: 
http://www.nongnu.org/avr-libc/user-manual/group__avr__stdio.html

von Ja mann (Gast)


Lesenswert?

Ok, ich habe die hier, vor einigen Tagen erst heruntergeladen und 
installiert:

avr-gcc (WinAVR 20080610) 4.3.0

In die libc Doku hatte ich schon geschaut, aber leider falsch 
verstanden. Ich dachte es gibt nur MIN und FLT, aber die dazwischen ist 
die Richtige, Danke!

Dann für alle die das gleiche Problem haben und auf diesen Beitrag 
stoßen, hier ist der entsprechende Teil im makefile:
1
#---------------- Library Options ----------------
2
# Minimalistic printf version
3
PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
4
5
# Floating point printf version (requires MATH_LIB = -lm below)
6
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
7
8
# If this is left blank, then it will use the Standard printf version.
9
PRINTF_LIB = 
10
#PRINTF_LIB = $(PRINTF_LIB_MIN)
11
#PRINTF_LIB = $(PRINTF_LIB_FLOAT)

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.