Hallo ,
ich bin gerade auf der suche nach einer eleganteren Möglichkeit
die Bits meines Structs mit einen Wert zu belegen
struct{
unsigned _1:1;
unsigned _2:1;
unsigned _3:1;
unsigned _4:1;
unsigned _5:1;
unsigned _6:1;
unsigned _7:1;
unsigned _8:1;
}volatile lamp;
lamp= 20;
bringt mir leider eine Fehlermeldung
geht es überhaupt so oder muss ich jedes bit einzeln setzen?
Danke im vorraus
Gast
#1273803
Nein, das geht so nicht. Die Größe deiner Struktur ist nicht definiert. Ansonsten könnte man mit Zeigern spielen:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
Gast
#1273807
versuch mal
union
{
unsigned char byte;
struct
{
unsigned _1:1;
unsigned _2:1;
unsigned _3:1;
unsigned _4:1;
unsigned _5:1;
unsigned _6:1;
unsigned _7:1;
unsigned _8:1;
};
}lamp;
entweder
lamp.byte = 0;
und alle bits sind wech oder einzeln setzen mit
lamp._8 = 1; und 8tes bit ist 1
byte und die _1 bis _8 belegen den selben speicherbereich
können sich also überschreiben
aber so kann man ein bitfeld komplet löschen
Gast
#1273810
Oder so.
Danke , genau was ich gesucht habe geht prima
gast schrieb: > versuch mal > ... > lamp.byte = 0; > und alle bits sind wech oder einzeln setzen mit > lamp._8 = 1; und 8tes bit ist 1 nö, das 7-te Bit ist dann 1. Bits beginnt man bei 0 zu zählen. Anonyme Strukturen sind eine Spezialität von GNU-C. Johann
Johann L. schrieb: > Anonyme Strukturen sind eine Spezialität von GNU-C. Der RealView Compiler (u.a. Keil MDK) unterstützt das ebenfalls, wenn man ein bestimmtes pragma verwendet: http://infocenter.arm.com/help/topic/com.arm.doc.kui0098a/armccref_ciajccbj.htm Gut möglich, dass die Kommandozeilenoption --gnu neben weiteren GCC features auch dieses aktiviert. Sicher bist Du auf jeden Fall, wenn Du das hier verwendest:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
Gruß Marcus http://www.doulos.com/arm/
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.