32-Bit-Variable zusammenstellen

Gast #28686
Lesenswert?

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
Gast #28688
Lesenswert?

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.
Gast #28689
Lesenswert?

@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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren