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.