Forum: Mikrocontroller und Digitale Elektronik [S] "selfmade" sprintf()- Funktion:)


von Alex (Gast)


Lesenswert?

Schönen guten Abend,

ich programmiere gerade ein LPC2478 mit WinARM und mir ist aufgefallen, 
dass die sprintf()-Funktion zusammen mit den Routinen aus der newlib-lpc 
eine Größe von 36kB !! einnehmen. Eindeutig zuviel nach meinem 
Verständnis. Habe mich deshalb entschlossen die Funktion selbst zu 
schreiben, doch bevor ich damit anfange, dachte ich mir, fragst du hier 
freundlich nach, ob die selbsgeschriebene Variante bei jemandem schon 
auf der Festplatte irgendwo rumoxidiert.
Wenn nicht ist auch nicht schlimm, wie gesagt dann schreibe ich meine 
eigene und werde diese bei Interesse hier publik machen.

Gruß
Alex

von Peter II (Gast)


Lesenswert?

wenn sie das selbe kann wie die Version aus newlib-lpc dann wird sie 
auch genauso gross werden. Wenn sie weniger können muss, dann solltst du 
sagen auf was du verzichten kannst.

von Roland P. (pram)


Lesenswert?

schau mal hier:

http://code.google.com/p/format/

Gruß
Roland

von Alex (Gast)


Lesenswert?

> dann solltst du sagen auf was du verzichten kannst

ich möchte nur integer- und float-Zahlen in einen String wandeln. Bei 
integer max 5 Stellig und bei float max 3 stellig vor und 2 stellig nach 
dem Komma. Auf alles andere kann ich verzichten.

von Alex (Gast)


Lesenswert?

@Roland
Danke für den Link, das sieht schon mal gut aus, kann zwar kein float 
aber man kann da gut was reinbauen.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Alex schrieb:
>> dann solltst du sagen auf was du verzichten kannst
>
> ich möchte nur integer- und float-Zahlen in einen String wandeln. Bei
> integer max 5 Stellig und bei float max 3 stellig vor und 2 stellig nach
> dem Komma. Auf alles andere kann ich verzichten.
int number = 12345; char sign = '+';
if (number < 0) { number *= -1; sign = '-'; }
char text [6]; int i;
for (i = 5; i >= 1 && number != 0; i--) {
  text [i] = (number % 10) + '0';
  number /= 10;
}
text[i]=sign;

von Uwe (de0508)


Lesenswert?

Hier ist noch eine Lib von Chan.

"Embedded printf module for AVR" :
http://elm-chan.org/docs/avrlib/xitoa.zip

von Alex (Gast)


Lesenswert?

@All:

Wow, vielen Dank für die Codes und Links, dann muss ich nur noch was für 
die float-Wandlung schreiben und dann hat sichs..

von Alex (Gast)


Angehängte Dateien:

Lesenswert?

@ Niklas Gürtler:

Ich muss schon sagen!Raffiniert! Sind die paar Zeilen Code einfach so 
mal aus dem Kopf geschossen oder hast du den schon irgendwo gehabt? Bin 
zwar auch etwas bewandert in der Materie aber so schnell hätte ich den 
nicht einmal reinpasten können.
Bisher ist dein Code zumindest für die integer-Wandlung am kürzesten und 
funktioniert ohne auch nur ein Pünktchen zu ändern (siehe Bild rote 
Zahlen)

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Haha, großartig, habe den Code gerade eben zusammengetippt und ihn noch 
nicht einmal getestet :D Dafür klappt er auch nur bis 5 Ziffern ;-) 
Sieht doch schonmal hübsch aus.

von kubik (Gast)


Lesenswert?

Some libraries have simplified versions of printf, like dprintf or 
iprintf - could be that there's also dsprintf and alike in your newlib?

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.