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


von B. B. (schwanzus_longus)


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:
1
void my_itoa(uint16_t zahl, char* buffer)  {
2
  int8_t k;
3
  buffer[5] = '\0';
4
  for (k=4; k>=0; k--)  {
5
      buffer[k] = (zahl % 10) + '0';
6
      zahl /= 10;
7
      }
8
  }

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

von Falk B. (falk)


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

von Peter (Gast)


Lesenswert?

B. B. schrieb:
> o liegt hier mein Fehler?

hast du die optimierung eingeschaltet?

von Johann (Gast)


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()

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.