pointer globales c++ io watchdog

c++ - globales - pointer to pointer



¿Qué significa "variable | variable" en C++? (5)

Estaba viendo el código de demostración del temporizador de vigilancia ITE8712 cuando vi esto:

void InitWD(char cSetWatchDogUnit, char cSetTriggerSignal) { OpenIoConfig(); //open super IO of configuration for Super I/O SelectIoDevice(0x07); //select device7 //set watch dog counter of unit WriteIoCR(0x72, cSetWatchDogUnit|cSetTriggerSignal); //CloseIoConfig(); //close super IO of configuration for Super I/O }

y, me pregunto qué significa esta línea:

cSetWatchDogUnit|cSetTriggerSignal

porque la función WriteIoCR se ve así:

void WriteIoCR(char cIndex, char cData) { //super IO of index port for Super I/O //select super IO of index register for Super I/O outportb(equIndexPort,cIndex); //super IO of data for Super I/O //write data to data register outportb(equDataPort,cData); }

Entonces cIndex debería ser 0x72, pero ¿qué pasa con cData? Realmente no entiendo el "|" ya que solo lo he usado para O ("||") en una declaración condicional.


Bien, aquí está el porqué utilizas un bitwise o, o los ves usados, en este tipo de situación.

Muchas veces, esas variables son banderas que se usan para empaquetar varias piezas de datos en un char

Si cSetWatchDogUnit y cSetTriggerSignal

tiene bits que no se superponen (imagine cSetWatchDogUnit = 1 << 0 y cSetTriggerSignal = 1 << 1 puede verificar más adelante para ver si están configurados con un bit y, como este ejemplo artificial:

if cData & cSetWatchDogUnit do something if cData & cSetTriggerSignal do something else

Todo el tiempo, ambos indicadores se pueden empaquetar y pasar en un solo char. De esta forma, no termina pasando una matriz de bools, puede agregar nuevas constantes cSetSomeOtherDamnfoolThing = 1 << 2 y puede hacer referencia a indicadores como variables en su código.


Es un bitwise or , a diferencia de su lógica or normal. Básicamente establece los bits en la variable objetivo si se estableció el bit correspondiente en cualquiera de las variables de origen.

Por ejemplo, la expresión 43 | 17 43 | 17 se puede calcular como:

43 = 0x2b = binary 0010 1011 17 = 0x11 = binary 0001 0001 ==== ==== "or" them: 0011 1011 = 0x3b = 59

Vea esta respuesta para un examen más completo de los diversos operadores bit a bit.

Normalmente se usa cuando se desea manipular bits específicos dentro de un tipo de datos, como el control de un temporizador de vigilancia en un sistema integrado (su caso de uso particular).

Puede usar or (|) para activar bits y and (&) para desactivarlos (con la inversión de la máscara de bits que se usa para activarlos).

Entonces, para encender el bit b3 , use:

val = val | 0x08; // 0000 1000

Para apagarlo, usa:

val = val & 0xf7; // 1111 0111

Para detectar si b3 está actualmente configurado, use:

if ((val & 0x08) != 0) { // it is set. }

Por lo general, verá las máscaras de bits definidas de la siguiente manera:

#define B0 0x01 #define B1 0x02 #define B2 0x04 #define B3 0x08 #define B4 0x10

o:

enum BitMask { B0 = 0x01, B1 = 0x02, B2 = 0x04, B3 = 0x08, B4 = 0x10 };

En cuanto a lo que esto significa:

WriteIoCR (0x72, cSetWatchDogUnit|cSetTriggerSignal);

Lo más probable es que 0x72 sea ​​un puerto de E / S de algún tipo en el que esté escribiendo y cSetWatchDogUnit y cSetTriggerSignal serán máscaras de bits que combine para generar el comando (configure la señal de disparo y use un valor unitario para el perro guardián). Lo que ese comando significa en la práctica puede inferirse, pero es más seguro al referirse a la documentación del circuito de vigilancia.

Y, en caso de que no sepa para qué es un circuito de vigilancia, es un circuito simple que, si no lo patea con la frecuencia suficiente (con otro comando), reiniciará su sistema, probablemente activando el reinicie pin en cualquier procesador que esté usando.

Es una forma de detectar automáticamente el comportamiento incorrecto del software y devolver un dispositivo a un estado inicial conocido, suscribiéndose a la teoría de que es mejor reiniciar que continuar ejecutándose mal.


Eso es un bitwise o . Se usa aquí para combinar banderas.


x | y x | y generalmente se usa con datos antiguos simples en C / C ++. Significa O a nivel de bit .

p.ej

char x = 0x1, y = 0x2; x | y ==> 0x3

[Nota: operator | puede estar sobrecargado para class/struct acuerdo a su necesidad.]


| es un bitwise o. Activa o desactiva los bits (1 en lugar de 0) si uno u otro del mismo bit en cualquiera de los enteros está activado.

|| es el o lógico . Devuelve verdadero si uno u otro son verdaderos.