Hallo,
ich habe eine Funktion geschrieben, der man die Anzahl der zu
erwartenden Zeichen/Ziffern, die ueber UART reinkommen, mit gibt und die
so lang darauf wartet, bis genug Zeichen eingetroffen sind und danach
dann eine Zahl daraus machen soll.
Das Ganze sieht so aus:
1 | int expectNumber(int digits) {
|
2 | char input;
|
3 | int r = 0;
|
4 | int i;
|
5 |
|
6 | for (i=1; i<=digits; i++)
|
7 | {
|
8 | input = UARTReceive();
|
9 | while (!characterIsNumber(input)) {
|
10 | input = UARTReceive();
|
11 | }
|
12 |
|
13 | int n = atoi(&input);
|
14 |
|
15 | r += (10^(digits-i)) * n;
|
16 |
|
17 | char buf[50];
|
18 | sprintf(buf, "\n\n Char is: %c, n is: %d, r is now: %d\n", input,n,r);
|
19 | UARTPuts(buf);
|
20 | }
|
21 | return r;
|
22 | }
|
Das rufe ich nun zum Beispiel mit expectNumber(2) auf, um 2 Ziffern zu
erwarten.
Nun wuerde ich erwarten, dass, wenn ich z.B. als erstes Zeichen 1
uebermittle, r im ersten Schleifendurchlauf dann den Wert (10^1)*1=10
annimmt. Tatsaechlich kommt aber 11 raus. Was ich mir nicht wirklich
erklaeren kann.
Uebersehe ich was?
Viele Gruesse,
Martin