Hallo zusammen,
ich habe folgendes Problem:
Ich möchte ein 8x8 Array direkt mit Werten initialisieren:
1 | int main (void)
| 2 | {
| 3 |
| 4 | uint8_t test[8][8] = {
| 5 | {24,60,126,219,255,255,66,36},
| 6 | {12,30,63,109,127,127,33,64},
| 7 | {6,15,31,182,191,191,16,9},
| 8 | {3,7,143,219,223,223,136,80},
| 9 | {1,131,199,109,239,239,68,130},
| 10 | {128,193,227,182,247,247,34,20},
| 11 | {192,224,241,219,251,251,17,32},
| 12 | {96,240,248,109,253,253,8,4}};
|
Wenn ich nach der Initialisierung nun meinen Speicherbereich überprüfe,
stelle ich fest, dass ab Zeile 5, Spalte 6, alle Werte falsch
gespeichert werden. Siehe Speicherüberwachung im Anhang.
Füge ich hinter der Initialisierung nochmal eine erneute Definition der
fehlerhaften Werte an, wie hier dargestellt:
1 | test[5][0]=128;
| 2 | test[5][1]=193;
| 3 | test[5][2]=227;
| 4 | test[5][3]=182;
| 5 | test[5][4]=247;
| 6 | test[5][5]=247;
| 7 | test[5][6]=34;
| 8 | test[5][7]=20;
| 9 | test[6][0]=192;
| 10 | test[6][1]=224;
| 11 | test[6][2]=241;
| 12 | test[6][3]=219;
| 13 | test[6][4]=251;
| 14 | test[6][5]=251;
| 15 | test[6][6]=17;
| 16 | test[6][7]=32;
| 17 | test[7][0]=96;
| 18 | test[7][1]=240;
| 19 | test[7][2]=248;
| 20 | test[7][3]=109;
| 21 | test[7][4]=253;
| 22 | test[7][5]=253;
| 23 | test[7][6]=8;
| 24 | test[7][7]=4;
|
so stimmen die Werte dann alle.
Wo liegt das Problem der ursprünglichen Initialisierung?
Viele Grüße
fredel007
Die Daten werden im RAM abgelegt.
Dieser µC hat davon 128 Bytes, wenn ich mich net irre.
Wenn du's im Flash haben willst
static const uint8_t test[8][8] PROGMEM = {...
und schau dir die zugehörigen pgm_* Makros aus der avr-libc an.
Johann L. schrieb:
> Die Daten werden im RAM abgelegt.
>
> Dieser µC hat davon 128 Bytes, wenn ich mich net irre.
Ich sollte so spät nichts mehr schreiben, meine ALU dachte, 8*8 sei 256
;-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
|