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
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.
> 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.
@Roland Danke für den Link, das sieht schon mal gut aus, kann zwar kein float aber man kann da gut was reinbauen.
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;
Hier ist noch eine Lib von Chan. "Embedded printf module for AVR" : http://elm-chan.org/docs/avrlib/xitoa.zip
@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..
@ 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)
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.