Hallo,
Ich arbeite an einem kleinen Projekt, in dem ich mit einem Attiny817
eine 25 Byte lange UART-Nachricht lese und diese anschließend mit
Bit-Verschiebungen weiterverarbeite (es handelt sich um ein SBUS Signal
eines RC Empfängers).
Wenn ich jedoch mein rec[] Array auslese, verändert dieses sich ganz
komisch.
Mein Array ist so definiert:
1 | volatile uint8_t rec[48]; //(habs auch schon als uint16_t probiert)
|
(es ist extra groß, um einen Überlauf bei verpassen des Nachricht-endes
zu vermeiden)
Zum testen habe ich nach dem vollständigen Empfang jede Stelle des
Arrays auf 1 gesetzt und die stelle 0 ausgegeben. Vor dem erneuten auf 1
schreiben habe ich die stelle 0 auch ausgegeben um zu sehen, was für ein
Wert sie hatte.
1 |
|
2 | char strr[20];
|
3 | sprintf(strr,"=%d \r\n", (int)rec[0]);
|
4 | printString(strr);
|
5 | for (int i = 0; i < 25; i++)
|
6 | {
|
7 | rec[i] = 1;
|
8 | }
|
9 | char strrr[20];
|
10 | sprintf(strrr,"-%d \r\n", (int)rec[0]);
|
11 | printString(strrr);
|
Aus dem zweiten print kommt wie zu erwarten "1", aus dem ersten kommt
jedoch abhängig von meinem restlichen Programm was ganz anders raus,
obwohl ich nie in das Array schreibe. Ich habe zuerst besagte
Weiterverarbeitung auskommentiert und aus beiden prints eine "1"
bekommen. Wenn ich nun aber eine beliebige Zeile einkommentiere, selbst
wenn diese überhaupt nichts mit der stelle 0 zu tun hat, wird diese
trotzdem verändert.
Mit
1 | channels[15] = (uint16_t) ((rec[21]>>5|rec[22]>>3) & 0x07FF);
|
kommt aus dem ersten print eine "0" raus.
Mit
1 | channels[15] = (uint16_t) ((rec[21]>>5|rec[22]) & 0x07FF);
|
oder
1 | channels[15] = (uint16_t) ((rec[21]|rec[22]>>3) & 0x07FF);
|
kommt aus dem ersten print eine "1" raus, obwohl ich an der 0. stelle
gar nichts verändere.
Teilweise ist auch, mit klammern um den Verschiebungen, eine "8" oder
"9" gekommen. Ich habe es auch schon mit mehr als nur dem einen
(uint16_t) cast probiert, da es ja scheinbar etwas damit zu tun haben
muss, aber funktioniert hat es danach auch nicht. Hat hier vielleicht
jemand eine Idee, warum sich das Array so komisch verhält, bzw. warum
ich eine stelle am fast anderen ende des Arrays beeinflusse?
Danke und Gruß,
Nils