"变量"在C++中意味着什么?

IBG*_*IBG 7 c++ io watchdog

当我看到这个时,我正在研究这个ITE8712看门狗定时器演示代码:

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
}
Run Code Online (Sandbox Code Playgroud)

而且,我想知道这条线是什么意思:

cSetWatchDogUnit|cSetTriggerSignal
Run Code Online (Sandbox Code Playgroud)

因为WriteIoCR函数看起来像这样:

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);
}
Run Code Online (Sandbox Code Playgroud)

所以cIndex应该是0x72,但是cData怎么样?我真的没有得到"|" 因为我只在条件语句中将它用于OR("||").

pax*_*blo 14

这是一个按位or,与你的正常逻辑截然不同or.如果设置了任一源变量中的相应位,它基本上设置目标变量中的位.

例如,表达式43 | 17可以计算为:

43 = 0x2b = binary 0010 1011
17 = 0x11 = binary 0001 0001
                   ==== ====
        "or" them: 0011 1011 = 0x3b = 59
Run Code Online (Sandbox Code Playgroud)

请参阅此答案以更全面地检查各种按位运算符.

它通常在您想要操纵数据类型中的特定位时使用,例如控制嵌入式系统中的监视程序计时器(您的特定用例).

您可以使用or (|)打开位并and (&)关闭它们(使用用于打开它们的位掩码的反转).

所以,要打开这个b3位,请使用:

val = val | 0x08; // 0000 1000
Run Code Online (Sandbox Code Playgroud)

要关闭它,请使用:

val = val & 0xf7; // 1111 0111
Run Code Online (Sandbox Code Playgroud)

要检测b3当前是否已设置,请使用:

if ((val & 0x08) != 0) {
    // it is set.
}
Run Code Online (Sandbox Code Playgroud)

您通常会看到位掩码定义如下:

#define B0 0x01
#define B1 0x02
#define B2 0x04
#define B3 0x08
#define B4 0x10
Run Code Online (Sandbox Code Playgroud)

要么:

enum BitMask {
    B0 = 0x01,
    B1 = 0x02,
    B2 = 0x04,
    B3 = 0x08,
    B4 = 0x10
};
Run Code Online (Sandbox Code Playgroud)

至于这意味着什么:

WriteIoCR (0x72, cSetWatchDogUnit|cSetTriggerSignal);
Run Code Online (Sandbox Code Playgroud)

很可能,0x72将是您正在写入的某种类型的I/O端口,cSetWatchDogUnit并且cSetTriggerSignal将结合输出命令的位掩码(设置触发信号并使用看门狗的单位值).可以推断出该命令在实践中意味着什么,但是您可以更安全地参考看门狗电路本身的文档.

而且,如果您不知道看门狗电路的用途,这是一个简单的电路,如果您不经常踢它(使用另一个命令),它将重置您的系统,可能是通过激活在你正在使用的任何处理器上重置引脚.

这是一种自动检测性能不佳的软件并将设备返回到已知初始状态的方法,订阅理论上最好重新启动而不是继续执行错误.


Sim*_*mon 8

这是一个有点或.它用于组合标志.