Hallo,
ich habe grade versucht den folgenden Code auf einem Mega168 zu benutzen
1 | #include "utils/strings.h"
|
2 |
|
3 | unsigned char itoa(unsigned int uiVal, char* pBuff)
|
4 | {
|
5 | unsigned char ucIndex = 0;
|
6 | unsigned char ucHelper = 0;
|
7 | unsigned char ucLenght = 0;
|
8 |
|
9 | char cDigit;
|
10 |
|
11 | do
|
12 | {
|
13 | cDigit = '0' + uiVal % 10;
|
14 | pBuff[ucIndex++] = cDigit;
|
15 | }
|
16 | while(uiVal /= 10);
|
17 |
|
18 | ucLenght = ucIndex;
|
19 | pBuff[ucIndex--] = 0;
|
20 |
|
21 | while(ucHelper < ucIndex)
|
22 | {
|
23 | cDigit = pBuff[ucIndex];
|
24 | pBuff[ucIndex--] = pBuff[ucHelper];
|
25 | pBuff[ucHelper++] = cDigit;
|
26 | }
|
27 |
|
28 | return ucLenght;
|
29 | }
|
Das Teil soll einfach einen Integer in einen ASCII String umwandeln. Das
hat auch mal funktioniert, als ich es in nem C++ Projekt benutzt habe.
Jetzt ist es in C-Projekt.
Allerdings bricht die obere while Schleife nicht ab. Ich hab mir per
UART mal uiVal ausgeben lassen und das ist irgendwann 0. Allerdings
scheint die Abbruchbedingung die Schleife absolut nicht zu kratzen. Der
rennt da fröhlich weiter drin rum und schreibt den RAM voll.
Ich bin langsam so durcheinander, dass ich vorne und hinten
verwechsel... Mal besser ne Pause machen.
Achso... Fragt mich nicht, warum ich nicht die stdlib.h nutze. Tu ich
gleich. Nur will ich jetzt einfach wissen, wieso der Scheiß da nicht
funktioniert grr