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

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.