Was bedeutet "Variable | Variable" in C ++?

7

Ich habe diesen ITE8712 Watchdog-Timer-Demo-Code untersucht, als ich folgendes gesehen habe:

%Vor%

und ich frage mich, was mit dieser Zeile gemeint ist:

%Vor%

, weil die WriteIoCR-Funktion wie folgt aussieht:

%Vor%

Also sollte cIndex 0x72 sein, aber was ist mit den cDaten? Ich bekomme wirklich nicht das "|" Ding, wie ich es nur für OR ("||") in einer bedingten Aussage verwendet habe.

    
IBG 23.05.2011, 04:32
quelle

5 Antworten

14

Es ist ein bitweises or , im Unterschied zu Ihrem normalen logischen or . Es setzt grundsätzlich die Bits in der Zielvariablen, wenn das entsprechende Bit in einer der Quellvariablen gesetzt wurde.

Zum Beispiel kann der Ausdruck 43 | 17 wie folgt berechnet werden:

%Vor%

Siehe diese Antwort für eine genauere Untersuchung der verschiedenen bitweisen Operatoren .

Wird normalerweise verwendet, wenn Sie bestimmte Bits innerhalb eines Datentyps manipulieren möchten, z. B. die Steuerung eines Watchdog-Timers in einem eingebetteten System (Ihr bestimmter Anwendungsfall).

Sie können or (|) verwenden, um Bits einzuschalten und and (&) , um sie auszuschalten (mit der Umkehrung der Bitmaske, mit der sie aktiviert werden.)

Um das b3 -Bit einzuschalten, verwenden Sie:

%Vor%

Um es auszuschalten, verwenden Sie:

%Vor%

Um festzustellen, ob b3 aktuell gesetzt ist, verwenden Sie:

%Vor%

Normalerweise werden die Bitmasken wie folgt definiert:

%Vor%

oder:

%Vor%

Was das bedeutet:

%Vor%

Wahrscheinlich ist 0x72 ein E / A-Port irgendeiner Art, in den Sie schreiben, und cSetWatchDogUnit und cSetTriggerSignal werden Bitmasken sein, die Sie kombinieren, um den Befehl auszugeben (setzen Sie das Triggersignal und Verwenden Sie einen Einheitswert für den Watchdog). Was dieser Befehl in der Praxis bedeutet, kann abgeleitet werden, aber Sie sind sicherer in Bezug auf die Dokumentation für die Watchdog-Schaltung selbst.

Und wenn Sie nicht wissen, wofür eine Watchdog-Schaltung ist, ist es eine einfache Schaltung, die, wenn Sie nicht oft genug treten (mit anderen) Befehl, wird es Ihr System zurücksetzen, wahrscheinlich durch Aktivieren der Reset-Pin auf jedem Prozessor, den Sie verwenden.

Es ist eine Möglichkeit, sich schlecht verhaltende Software automatisch zu erkennen und ein Gerät in einen bekannten Anfangszustand zurückzuversetzen. Dabei wird der Theorie gefolgt, dass es besser ist, einen Neustart durchzuführen, als schlecht weiter zu arbeiten.

    
paxdiablo 23.05.2011, 04:36
quelle
8

Das ist eine bitweise oder . Hier werden Flags kombiniert.

    
Simon 23.05.2011 04:35
quelle
1

x | y wird normalerweise mit einfachen alten Daten in C / C ++ verwendet. Es bedeutet bitweises ODER .

z.B.

%Vor%

[Hinweis: operator | kann je nach Bedarf für class/struct überladen werden.]

    
iammilind 23.05.2011 04:37
quelle
1

| ist ein bitweise oder. Es schaltet die Bits ein (1 statt 0), wenn ein ODER das andere Bit derselben Ganzzahl eingeschaltet ist.

|| ist das logische oder. Es gibt TRUE zurück, wenn das eine ODER das andere wahr ist.

    
Marlon 23.05.2011 04:38
quelle
0

OK, hier ist warum Sie in dieser Situation eine bitweise oder, oder sehen Sie, sie verwenden.

Diese Variablen sind oft Flags, die zum Packen mehrerer Daten in ein char

verwendet werden

Wenn cSetWatchDogUnit und cSetTriggerSignal

haben nicht überlappende Bits (stellen Sie sich cSetWatchDogUnit = 1 << 0 und cSetTriggerSignal = 1 << 1 vor, die Sie später überprüfen können, um zu sehen, ob sie bitweise gesetzt sind und wie dieses erfundene Beispiel:

%Vor%

Die ganze Zeit können diese beiden Flags in einem einzigen Char verpackt und weitergegeben werden. Auf diese Weise übergeben Sie nicht ein Array von Bools, Sie können neue Konstanten cSetSomeOtherDamnfoolThing = 1 << 2 hinzufügen und Sie können Flags als Variablen in Ihrem Code bezeichnen.

    
Matt 23.05.2011 04:39
quelle

Tags und Links