Forum: Mikrocontroller und Digitale Elektronik Byteshift µC<-->PC


von *GAST* (Gast)


Lesenswert?

Hallo,
habe im PC-Programm folgendes Byteshifting:
1
position=(d4 | d5<<8 | d6<<16 | d7<<24);
Das funktioniert am PC (Ansi C), nicht aber im Mikrocontroller Atmel 
AVR.

position ist ein long. d4...d7 habe ich mit integer, char etc. versucht. 
Funktioniert aber nicht. Es haben nur d4 und d5 Einfluss auf das 
Ergebnis. d6 und d7 haben im µC keinen Einfluss, wohl aber am PC, wo 
dieser Aufruf funktioniert.

Was ist hier falsch?

von chris (Gast)


Lesenswert?

auf deinem µC ist ein int nur 16bit groß.
D.h. du schiebst d6 und d7 nach links raus, da die Shiftoperationen mit 
int ausgeführt werden.
1
position= d4 | d5<<8 | (uint32_t)d6<<16 | (uint32_t)d7<<24 ;

bzw.
1
position= d4 | d5<<8 | (long)d6<<16 | (long)d7<<24 ;

lg
chris

von Leo B. (luigi)


Lesenswert?

Bedenke auch die vermutlich verdrehte Byteordnung (Big-Endian <-> 
Little-Endian)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.