Bitoperationen mit Strukturen

Gast #302918
Lesenswert?
• ▲
▼
Hi,
mein Problem ist zwar nicht AVR-Speziell aber vielleicht kann mir ja
doch wer hier helfen.
Und zwar möchte ich zwei 16-Bit Strukturen mit einander vergleiche und
auswerten.
Dazu möchte ich sie gern zum Beispiel "verunden". Wie sieht dabei
meine Syntax aus ?
Wenn ich die komplette Struktur mit einem Hex Wert vergleichen will
mach ich es so, dass ich einen 16 Bit Zeiger darauf lege.

*((u16*)&Struktur_A) == 0x80

Die Bitstrukturen habe ich vorher definiert.

So, wie kann ich nun zb Struktur_A mit Struktur_B verunden und das
ergebnis dann einer Struktur_C zuweisen. Bzw, kann man überhaupt in
eine Bitstruktur direkt einen Wert einprägen ??

gruß Taylor
Gast #302919
Lesenswert?
• ▲
▼
Hallo Taylor!

Was ist eine 16-Bit Struktur bzw. was verstehst Du darunter?

also allgemein in C würde das für Variablen mit einem einfachen &
aussehen, also:

   VarC = VarA & VarB;

wobei VarA, VarB und VarC die Variablen sind.

Ich hoffe Dir damit weitergeholfen zu haben!

Stefan B.
Gast #302920
Lesenswert?
• ▲
▼
Hi, ja bei Variablen ist das klar, nur ich bruache das bezogen auf
Bitstrukturen.
Die Struktur sieht dann so aus:

typedef struct
{
 u16 Wert1: 1;
 u16 Wert2: 1;
 u16 Wert3: 1;
 u16 Wert4: 1;
 ... usw
}TypStruktur

Bei der Deklaration dann so:

Typstruktur Struktur_A, Struktur_B, Struktur_C;

Nun möchte ich die Strukturen_A und _B verunden und die dann Struktur_C
zuweisen.
Persönliche Seite #302921
Lesenswert?
• ▲
▼
Der einfachste Weg dazu wird die sogenannte 'union' sein.

Beispiel:
1
#include <stdio.h>
2

3
typedef struct bitfield_s
4
{
5
        unsigned flag1:1;
6
        unsigned flag2:1;
7
        unsigned flag3:1;
8
        unsigned flag4:1;
9
        unsigned flag5:1;
10
        unsigned flag6:1;
11
        unsigned flag7:1;
12
} bitfield_t;
13

14
typedef union bitsnbytes_u
15
{
16
        unsigned int val;
17
        bitfield_t bits;
18
} bitsnbytes_t;
19

20
bitsnbytes_t structA, structB, structC;
21

22
int
23
main(void)
24
{
25
        structA.bits.flag1 = 1;
26
        structB.bits.flag2 = 1;
27

28
        structC.val = structA.val | structB.val;
29

30
        printf("structC.val = %d\n", structC.val);
31

32
        return 0;
33
}
Gast #302922
Lesenswert?
• ▲
▼
stimmt... mit union legst du fest, das es entweder die eine, oder die
andere struktur sein kann (also der komplette wert der
struktur/variablen angesprochen wird oder halt eben bitweise).
so kannst du mit .val die komplette struktur vergleichen und mit .flagX
bitweise drauf zugreifen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren