Hallo zusammen,
Vielleicht habe ich heute ein Brett vor
m Kopf, aber ich komme hier gerade nicht weiter.
Folgendes Beispiel:
-unsigned char command_value[] = {1,2,3,4};
-unsigned char idx = 0;
-
- idx++;
- if (idx > 3) { idx = 0; }
-idx=1; <<<< WIRD Überschreiben
-send_num(idx); uart_putc(58);
-send_num(command_value[idx]); uart_putc(58);
-uart_putc(13);uart_putc(10);
funktioniert einwandfrei und liefert:
000000:000004:
000000:000004:
..usw
Wenn ich das Überschreiben weglasse (idx wird nicht 1 gesetzt sondern
gerechnet) kommt folgendes raus:
000000:000032:
000001:000032:
000002:000032:
... usw.
Die komplette Funktion auf dem ATMEGA168 schaut so aus:
1 | int main (void) {
|
2 | unsigned char command_value[] = {4,7,8,9};
|
3 | unsigned char idx = 0;
|
4 |
|
5 | Init_UART(9600); // for DEBUG Purpose
|
6 | idx = 0;
|
7 | while (1) {
|
8 |
|
9 |
|
10 | send_num(idx); uart_putc(58);
|
11 | send_num(command_value[idx]); uart_putc(58);
|
12 | uart_putc(13);uart_putc(10);
|
13 |
|
14 |
|
15 | idx++;
|
16 | if (idx > 3) { idx = 0; }
|
17 | }
|
18 |
|
19 | }
|
Der Index (IDX) verlässt NICHT den Wertebereich - wie auch in der Debug
Anzeige zu sehen. Was übersehe ich gerade???
Danke und Gruß,
Adam