www.mikrocontroller.net

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


Autor: XyZ (Gast)
Datum:

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

Autor: yalu (Gast)
Datum:

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

Autor: gast (Gast)
Datum:

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

Autor: Stefan Ernst (sternst)
Datum:

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

Autor: Ooohhh (Gast)
Datum:

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

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Mapfile gibt Auskunft darüber, was alles dazu gelinkt wird.

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.