Frage zu folgendem Code



  • Hallo Forum,

    irgendwie versteh ich nicht so richtig folgende Code-Ausschnitte:

    struct test_struct {
    	union {
    		unsigned char SegmentsOctet;
    	};
    };
    
    test_struct * test;
    
    test->SegmentsOctet = 0xB3;
    

    (Funktioniert)

    Bedeutet die Zuweisung des Hex-Wertes, dass hier sozusagen einzele Bits in SegmentsOctet gesetzt werden können? Wie lang wäre das Bitfeld?

    Sollte also auch sowas funktionieren...?

    test->SegmentsOcted = 10110011;
    

    (Funktioniert nicht richtig. Ein Segment wird falsch gesetzt).

    Ich brauche das ganze zur Ansteuerung einer 7-Segment-Anzeige. Die einzelnen Segmente können durch setzen von entsprechenden Bits angesteuert werden. Die Hardware verlangt dabei einen uchar.

    Wie kann ich in einem uchar sozusagen Bits setzen?

    Danke und Tschau!
    Sandro



  • skummy schrieb:

    struct test_struct {
    	union {
    		unsigned char SegmentsOctet;
    	};
    };
    
    test_struct * test;
    
    test->SegmentsOctet = 0xB3;
    

    (Funktioniert)

    niemals. der pointer hat keinen sinnvollen inhalt.

    skummy schrieb:

    Sollte also auch sowas funktionieren...?

    test->SegmentsOcted = 10110011;
    

    nein, der wert ist zu gross für einen 'char' (das ist ein int und kein bitmuster).

    skummy schrieb:

    Wie kann ich in einem uchar sozusagen Bits setzen?

    #define SETBIT(dest,bit) ((dest) |= (1<<(bit)))
    ...
    uchar c = 0;
    SETBIT (c, 0);  // setzt das niederwertigste bit
    SETBIT (c, 1);  // setzt  bit #1
    ...
    SETBIT (c, 7);  // setzt das höchstwertigste bit
    

Anmelden zum Antworten