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
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.
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.
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 | }
|
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.
Danke, werd ich gleich mal probieren. Super Forum hier. Wahnsinn wie schnell man hier ne hilfreiche Antwort bekommt. gruß Taylor
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.