- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 5 von 5

Thema: Binary C operations...

  1. #1

    Binary C operations...

    Anzeige

    Powerstation Test
    Hallo zusammen,

    ich steuere Hardware, die 24-bit-Register beinhaltet. Um die Bits bequem hindrehen zu können, habe ich mir folgendes definiert:

    union PLL_Register
    {
    unsigned char b[3];
    } N_PLL_Reg;

    Also ein 24 Bit großes Datenfeld, wobei ich per Indizierung auf jedes einzelne der 3 Bytes zugreifen kann
    (z.B. N_PLL_Reg.b[1] = 0xAB).
    Es funktioniert aber leider nicht alles wie gewünscht:

    N_PLL_Reg.b = (N_PLL_Reg.b << 2);
    // alle 24 Bits um 2 Bits nach links schieben, die obersten fallen raus

    oder auch

    if (N_PLL_Reg.b & 0x800000) // wenn Bit 23 = 1 ...
    ....

    bewegen den Compiler nur zu einem müden
    error: invalid operands to binary << (bzw. &)

    Wenn ich N_PLL_Reg als long definiere, geht das Ganze, aber das ist erstens nicht 24 Bits lang und zweitens ist der schöne Zugriff auf die einzelnen Bytes weg...

    Hat jemand 'ne Idee?

    KP

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Du solltest in der union ein in32 dazudefinieren.

    union {
    int12 LANG;
    char bB[3];
    } mixit;

    mixit.bB[0] = LSB
    mixit.bB[2] = MSB

    if (mixit.LANG & 0x800000) .,.....
    oder mixit.LANG <<= 12;

    das eigentliche MSB des int32 kannst du ignorieren.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    68
    Beiträge
    531
    union {
    int12 LANG;
    char bB[3];
    } mixit;

    gibt compiler fehler bei mir

    union {
    long LANG;
    char bB[3];
    } mixit;

    scheint okay

    gruss

    Henk

  4. #4
    @ beide

    Danke für den Tip, ich werd's mal probieren!

    KP

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    @Arexx : logo, int12 ist eine legasthenische Erfindung von mir.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen