mein Problem ist folgendes ich versuche über eine union direkt auf die von WINAVR definierten Controller Register zuzugreifen und bekomme immer die Warnung: Warning:typecast makes Pointer from integer with different types mein Code sieht folgendermaßen aus: struct bits { unsigned char bit0:1; unsigned char bit1:1; unsigned char bit2:1; unsigned char bit3:1; unsigned char bit4:1; unsigned char bit5:1; unsigned char bit6:1; unsigned char bit7:1; }; typedef union { unsigned int byte1; /* 1 Byte */ struct bits bit; /* bitweise */ }char_8_bit; #define L_IFC0_STOPBIT_LENGHT_BIT ((volatile struct bits *)UCSRC)->bit3 #define L_IFC0_CARACTER_LENGHT_BIT_0 ((volatile struct bits *) UCSRC)->bit1 #define L_IFC0_CARACTER_LENGHT_BIT_1 ((volatile struct bits *) UCSRC)->bit2 #define L_IFC0_PARITY0_BIT ((volatile struct bits *) UCSRC)->bit4 #define L_IFC0_PARITY1_BIT ((volatile struct bits *) UCSRC)->bit5 Kann mir da jemand weiterhelfen ?
und der zugriff dann so : L_IFC0_CARACTER_LENGHT_BIT_0 = 1
Ich denke, da fehlt das Adress &, um aus UCSRC einen Ptr zu mchen: #define L_IFC0_PARITY1_BIT (((volatile struct bits *) &UCSRC)->bit5) Ausserdem würde ich unbedingt den kompletten Ausdruck zusätzlich klammern, sonst kannst Du in bestimmten Fällen ganz böse Effekte bekommen. Aber warum so kompliziert? Vor kurzem wurde hier doch eine sehr hübsche Methode diskutiert, um Bits anzusprechen (im gcc-Forum)? Stefan
Warum nimmst du überhaupt eine Union, wenn auf byte1 gar nicht zugegriffen wird? Zudem sollte byte1 ein 8-Bit-Typ sein, also z. B. uint8_t. Das Thema Einzelbitzugriffe auf I/O-Register wurde übrigens hier vor Kurzem schon nahezu erschöpfend behandelt: Beitrag "sbit macro für avr-gcc"
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.