mikrocontroller.net

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


Autor: Norbert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Norbert,

versuch mal

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

Grüße
Oliver

Autor: Mark de Jong (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Norbert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.