Forum: Mikrocontroller und Digitale Elektronik itoa und sprintf - Rechenaufwendig?


von XyZ (Gast)


Lesenswert?

Hallo,

Ich habe einen ATMEGA8 und gebe dort auf einem Display etwas aus.
Nun hat mich irgendwie im AVRStudio mit WinAVR die Meldung:


>Program:    3236 bytes (39.5% Full)
>(.text + .data + .bootloader)

>Data:        328 bytes (32.0% Full)
>(.data + .bss + .noinit)

stutzig gemacht, dachte mir das kann doch nicht sein...
und schwups den übeltäter gefunden :

>char buffer[5];
>itoa(result,buffer,5);

Wenn ich itoa auskommentiere, verringert sich der Datenbedarf auf:

>Program:     644 bytes (7.9% Full)
>(.text + .data + .bootloader)

>Data:         64 bytes (6.3% Full)
>(.data + .bss + .noinit)

also um ein gewaltiges Stück, wollte nun erfahren warum dies so ist ?
Bzw. obs eine schonende Variante gibt ?
Im grunde wird doch mit itoa nur jede Ziffer in ein ASCII Zeichen 
umgewandelt und in den benötigten Buffer geschrieben ?

von yalu (Gast)


Lesenswert?

Die itoa-Funktion braucht mit allen Abhängigkeiten etwa 170 Bytes. Dass
bei dir der Unterschied viel größer ist, könnte damit zusammenhängen,
dass durch das Weglassen des Aufrufs ein großer Teil des nachfolgenden
Codes trivial und dadurch vom Compiler stark zusammenoptimiert wird.

von gast (Gast)


Lesenswert?

da wird halt mit einem schlag die komplette bibliothek dazugelinkt...
alle funktionen die da drin sind, ob du sie brauchst oder nicht, aber 
itoa ist teil der bibliothek, und wenn du es verwendest, musst du alles 
nehmen, ob du willst oder nicht...

wenn du wirklich nur eine funktion aus einer bibliothek brauchst, dann 
schreib itoa selbst...

von Stefan E. (sternst)


Lesenswert?

gast wrote:
> da wird halt mit einem schlag die komplette bibliothek dazugelinkt...
> alle funktionen die da drin sind, ob du sie brauchst oder nicht, aber
> itoa ist teil der bibliothek, und wenn du es verwendest, musst du alles
> nehmen, ob du willst oder nicht...

Das ist schlicht Unfug.

von Ooohhh (Gast)


Lesenswert?

Itoa wuerd ich so nicht verwenden. Zuerst sollte man schauen, ob man mit 
Hex nicht auch durchkommt. Von Fachleuten kann man in-hex-denken 
erwarten, von Laien nicht. Printf sollte man seinlassen ausser man ist 
sich sicher, dass float sein muss. Man kommt meist um float herum.

von (prx) A. K. (prx)


Lesenswert?

Das Mapfile gibt Auskunft darüber, was alles dazu gelinkt wird.

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.