Das folgende Problem hatte ich schoneinmal in diesem Forum angesprochen. Damals konnte mir geholfen werden, es ging um die Zusammenstellung von 4 x 8-Bit Variablen zu einer 32-Bit-Variable.(für einen mega128). Jetzt habe ich das gleiche Problem für einen 16-Bit-Controller(XC161CJ). Der Unterschied ist, daß eine Variable 16-Bit groß ist. Hier das Beispiel: unsigned byte vLow = 21; 8-Bit-Variable unsigned word vMid = 6543; 16-Bit-Variable unsigned byte vHigh = 78; 8-Bit-Variable unsigned long vErgebniss; soll das 32-Bit-Ergebniss enthalten vErgebniss = ((unsigned byte)vLow | (unsigned word)vMid<<16 | (unsigned byte)vHigh<<24); Als Ergebniss möchte ich: vErgebniss = 87654321, erhalten. Mein C166-Compiler liefert jedoch nur Müll. Was mach' ich da falsch? Schönen Gruß Norbert
Hallo Norbert, versuch mal vErgebniss = ((unsigned long)vLow | (unsigned long)vMid<<16 | (unsigned long)vHigh<<24); Grüße Oliver
Hallo Norbert, Wenn Du die Tasking C166/ST10 V7.5 compiler benutzt gibt es noch eine möglichkeit: typedef _packed union { struct { unsigned char vHigh; unsigned int vMid; unsigned char vLow; } s; unsigned long vTotal; } vJoin; vJoin vHelp; unsigned int VErgebnis; vHelp.s.VHigh = 78; vHelp.s.Vmid = 6543; vHelp.s.VLow = 21; vErgebnis = vHelp.VTotal Grüße Mark.
@Oliver: Perfekt, funktioniert prima, besten Dank! @Mark: Ich arbeite mit Keil-µVision2. Werde mal die Manuals durchblättern ob da diese Möglichkeit beschrieben wird. Schönen Gruß Norbert
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.