Forum: Mikrocontroller und Digitale Elektronik 8Bit Array (2 Elemente) in eine 16Bit Variable packen


von Hermann S. (Gast)


Lesenswert?

Hallo,

ich hab eine Funktion, der ich einen Zeiger übergebe!
"DeviceID"

nun möchte ich, dass die Werte, die im uint8_t Array "Receive_buf"
stehen, an die Adresse des Zeigers "DeviceID"
geschrieben werden,
dabei sollen oberes und unteres Byte miteinander vertauscht werden!!!


Das hier tut's leider nicht!!
Die letzte Zuweisung klappt nicht!
Steht immer 0 drin?!

void Function(uint16_t  *DeviceID)
{
    static uint8_t PtrReg[2];
    static uint8_t Receive_buf[2]; // 2 bytes are going to be received!
    static uint8_t DeviceID8_0;
    static uint8_t DeviceID8_1;
    PtrReg[0]= 0xFF;

    GetData(PtrReg,  Receive_buf, 1, 2);
    DeviceID8_0 =  Receive_buf[1];
    DeviceID8_1 =  Receive_buf[0];
    DeviceID =  ((uint16_t) DeviceID8_1 << 8 | DeviceID8_0);

}

von H.Joachim S. (crazyhorse)


Lesenswert?

ganz schön viele Ausrufezeichen...

von Peter II (Gast)


Lesenswert?

Hermann S. schrieb:
> DeviceID =  ((uint16_t) DeviceID8_1 << 8 | DeviceID8_0);

DeviceID  ist ein Zeiger!
1
*DeviceID =  ((uint16_t) DeviceID8_1 << 8 | DeviceID8_0);

von Hermann S. (Gast)


Lesenswert?

Peter II schrieb:
> DeviceID  ist ein Zeiger!
> *DeviceID =  ((uint16_t) DeviceID8_1 << 8 | DeviceID8_0);

oh ja danke

Das hat geholfen

von Peter II (Gast)


Lesenswert?

Hermann S. schrieb:
> Das hat geholfen

dein Compiler sollte auch eine Warnung angezeigt haben, die sollte man 
halt nicht ignorieren. Der Cast ist auch nicht notwendig.

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.