Guck dir den Prototypen für itoa an. Vermutlich ist das erste Argument
ein int, und somit wird dein sorgfältig vorbereiteter uint32_t vom
Compiler implizit zu int gecastet. An der Stelle tritt der
Präzisionsverlust auf.
Zur Not mach es per Hand, ist so schwer auch nicht:
1 | int32_t num = 1234567;
|
2 | char buffer[16];
|
3 | buffer[15] = 0;
|
4 | int pos = 14;
|
5 | while (num != 0 && pos >= 0) {
|
6 | buffer[pos] = (num%10) + '0';
|
7 | num = num / 10;
|
8 | pos--;
|
9 | }
|
10 | pos++;
|
11 |
|
12 | lcd_puts(buffer+pos);
|
Für negative Zahlen muss man das noch etwas anpassen. buffer wird etwas
ungewöhnlich befüllt, aber dafür wird der Algorithmus einfacher.