Hallo,
bastel gerade an einem Projekt mit PIC18F4550. Dieser kommuniziert per
USB als HID-Device mit einem VC++ Programm. Die Kommunikation
funktioniert.
Da ich die Daten als Byte Array sende bzw. empfangen, muß ich unsigned
integer Werte wandeln bzw. zurückwandeln. Im PC Programm gehts tadellos.
Nur beim PIC hängt es.
1 | unsigned char low;
|
2 | unsigned char high;
|
3 | unsigned int tempx;
|
4 |
|
5 | low= ReceivedDataBuffer[2];
|
6 | high= ReceivedDataBuffer[3];
|
7 | tempx = ( unsigned int ) ( ( ( unsigned int )( high << 8 ) ) | low );
|
In diesem Beispiel hole ich mir Werte aus dem Empfangsbuffer des PIC's.
Sendet der PC den Wert 255, steht in low=255 und high=0, in tempx=255.
Bei 256 steht in low=0 und high=1, in tempx=0. So knapp gesagt, bei
Werten höher als 255 kommt Schwachsinn raus.
Der Witz an der Geschicht ist, das wenn ich unter den Compiler-Optionen
den von Microchip nicht empfohlenen Schalter für Enable integral
promotions aktiviere, funktioniert es. Aber, dadurch steigt der Code von
7,4k auf 9,6kb.
Gruß Sascha