www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frage bezüglich selbst geschriebener Funktion itoa()


Autor: B. B. (schwanzus_longus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo liebe Formumsmitglieder!

Ich hätte mal eine kleine Frage die ich mir bisher nicht erklären 
konnte.

Testweise habe ich mir die Funktion itoa() selber geschrieben (steht so 
in der Art auch glaube ich hier irgendwo im Forum) und mir anschließend 
in AVR-Simulator die Anzahl der Takte angesehen um eine 4-stelligen 
integer in eine ASCII-Darstellung umzuwandeln.
Nun meine Frage warum braucht die Funktion aus der stdlib wesentlich 
weniger als meine?

Hier meine Funktion:
void my_itoa(uint16_t zahl, char* buffer)  {
  int8_t k;
  buffer[5] = '\0';
  for (k=4; k>=0; k--)  {
      buffer[k] = (zahl % 10) + '0';
      zahl /= 10;
      }
  }

itoa() braucht dafür 940 Takte, my_itoa() braucht 2092 Takte, also mehr 
als doppelt soviel. Wo liegt hier mein Fehler?

Dankeschön schon mal.

Schöne Grüße,
Schwanzus Longus

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  schwanzus_longus

>itoa() braucht dafür 940 Takte, my_itoa() braucht 2092 Takte, also mehr
>als doppelt soviel. Wo liegt hier mein Fehler?

Möglicherweise ist GCC nicht schlau genug, die Division und 
Modulopoeration nur einmal auzuführen. Schau in das generierte *.lss 
File, dort sieht man das.
Liegt im gleichen Verzeichnis wie dei *.hex File.

MFG
Falk

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
B. B. schrieb:
> o liegt hier mein Fehler?

hast du die optimierung eingeschaltet?

Autor: Johann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du verwendest einmal tzahl % 10 und einmal zahl / 10. Das sind zwei 
Divisionen, dabei würde eine reichen, die Dir Quotient und Rest liefert: 
siehe div()

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.