Hallo!
Ich habe in einem C-Programm einen komischen Fehler und wüsste gerne ob
jemand eine Idee hat wo er her rührt.
In meinem Code gebe ich die Daten eines empfangen Arrays aus. Da die
Daten 16 bit Werte sind muss ich sie vor der Ausgabe zusammenrechen.
Zwecks debugging habe ich jetzt auch einmal 8 bit Werte übertragen die
ich mir extra Ausgeben lassen wollte (payload[0] und payload[1]).
Dabei hab ich gemerkt dass die Werte vor der Schleife korrekt ausgegeben
werden danach aber nicht mehr.
1 | printf_fast_f("DEBUG:%d,%d",payload[0],payload[1]);
|
2 |
|
3 | for (i = 0; i < 27; i++)//for (i = 0; i < SIZE_PAYLOAD; i++)
|
4 | {
|
5 |
|
6 | sensor_data[i / 2] = (int16_t) ((payload[i] << 8) & 0xff00)
|
7 | | (0x00ff & (payload[i + 1]));
|
8 | printf_fast_f("%d,", sensor_data[i / 2]);
|
9 |
|
10 |
|
11 | i++;
|
12 |
|
13 | }
|
14 | printf_fast_f("DEBUG:%d,%d",payload[0],payload[1]);
|
15 | printf_fast_f("\r\n");
|
Ausgabe:
1 | DEBUG:170,0-22016,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,DEBUG:255,255
|
Hier sieht man das am Anfang 170 und 0 steht am Ende für die selben
Werte aber 255 und 255. Mir ist leider nicht ganz klar wodurch dass
entsteht? Durch die Typumwandlung oder das Shiften? Eigentlich werden
die Daten ja nur gelesen und nie aufs Array zurück geschrieben.
Es wird ein SDCC Compiler für einen 8051 verwendet aber daran sollte es
ja nicht liegen.
Martin