mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bitvariable in C testen


Autor: Norbert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Jangomat (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
        }

Autor: Sascha Weitkunat (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kleiner schreibfehler bei Peter...
Das setzen müsste wie Folgt aussehen:

BIT_REGISTER |= (1<<BIT_NR);

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Sascha Weitkunat (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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;

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
werd ich morgen mal probieren.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.