Forum: Mikrocontroller und Digitale Elektronik 32-Bit-Variable zusammenstellen


von Norbert (Gast)


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

von Oliver (Gast)


Lesenswert?

Hallo Norbert,

versuch mal

vErgebniss = ((unsigned long)vLow |
                      (unsigned long)vMid<<16 |
                              (unsigned long)vHigh<<24);

Grüße
Oliver

von Mark de Jong (Gast)


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.

von Norbert (Gast)


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

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.