Hallo C-Freund, eigentlich müsste ich mich für diese Frage schämen. Aber hier habe ich einen Blackout. Es soll die Bitvariable 'GOK' auf '0' getestet werden. 1. if (!(GOK == 1)) { bei GOK == 0 geht's hier weiter } oder 2. if (GOK != 1) { bei GOK == 0 geht's hier weiter } oder 3. if (GOK == 0) { bei GOK == 0 geht's hier weiter } Vielleicht kann man mir die Lösung schonend beibringen, vielen Dank! Norbert
Die ANSI Methode Bits zu testen oder zu setzen ist mittels Maskierung. Wenn der MC Bitadressierung unterstützt, optimiert er das auch meistens zu dem entsprechenden Bitbefehl: #define BIT_NR 7 //Nummer des Bits im Register (0..7) #define BIT_REGISTER 0xAA //Adresse des Registers BIT_REGISTER != 1<<BIT_NR; // setzen BIT_REGISTER &= ~(1<<BIT_NR); // löschen if( BIT_REGISTER & (1<<BIT_NR) ){ // testen ; // tue was } Peter
Wenn GOK bereits als Bitvariable definiert ist, dann ist Dein Vorschlag Nr. 3 ausreichend (alle anderen stimmen übrigens auch!), oder noch kürzer: if (!GOK) { //bei GOK == 0 geht's hier weiter }
Kleiner schreibfehler bei Peter... Das setzen müsste wie Folgt aussehen: BIT_REGISTER |= (1<<BIT_NR);
und andersrum gehts natürlich genauso if (GOK) { } Und wenn wir einmal beim Thema sind: hat jemand eine Idee, wie man Bitfelder anlegen kann? Konkret gehts um ein Projekt, bei dem 4 gleichartige Kanäle bedient werden sollen, und da die Verarbeitung für alle 4 Kanäle gleich ist, sind die entsprechenden Variablen natürlich als Arrays abgelegt. Zu jedem Kanal gehören auch 3 Statusbits. Im Moment habe ich char-Variablen für die Statusinformationen genommen, funktioniert auch. Aber jetzt kommen noch Erweiterungen hinzu, und der RAM ist ausgelutscht. Wenn ich die Statusinformationen als bit speichern könnte, hätte ich 10 byte gewonnen, das würde genügen.
Das mit den Bitfeldern ist schnell erledigt... typedef struct { unsigned char Kanal_1:1; unsigned char Kanal_2:1; unsigned char Kanal_3:1; unsigned char Kanal_4:1; } Status;
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.