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