Это побитовое or
, в отличие от вашего обычного логического or
. Это в основном устанавливает биты в целевой переменной, если был установлен соответствующий бит в любой из исходных переменных.
Например, выражение 43 | 17
может быть вычислено как:
43 = 0x2b = binary 0010 1011
17 = 0x11 = binary 0001 0001
==== ====
"or" them: 0011 1011 = 0x3b = 59
См. этот ответ для более тщательного изучения различных побитовых операторов.
Обычно используется, когда вы хотите манипулировать определенными битами в типе данных, например, управлять сторожевым таймером во встроенной системе (ваш конкретный случай использования).
Вы можете использовать or (|)
для включения битов и and (&)
для их отключения (с инверсией битовой маски, которая используется для их включения.
Итак, чтобы включить бит b3
, используйте:
val = val | 0x08; // 0000 1000
Чтобы выключить его, используйте:
val = val & 0xf7; // 1111 0111
Чтобы определить, установлен ли b3
, используйте:
if ((val & 0x08) != 0) {
// it is set.
}
Обычно вы видите битовые маски, определенные как:
#define B0 0x01
#define B1 0x02
#define B2 0x04
#define B3 0x08
#define B4 0x10
или
enum BitMask {
B0 = 0x01,
B1 = 0x02,
B2 = 0x04,
B3 = 0x08,
B4 = 0x10
};
Что это значит:
WriteIoCR (0x72, cSetWatchDogUnit|cSetTriggerSignal);
Скорее всего, 0x72
будет портом ввода-вывода какого-либо типа, к которому вы пишете, а cSetWatchDogUnit
и cSetTriggerSignal
будут битовыми масками, которые вы комбинируете для вывода команды (установите сигнал триггера и используйте значение единицы для сторожевого таймера). То, что эта команда означает на практике, можно сделать вывод, но вы безопаснее, обращаясь к документации для самой схемы сторожевого таймера.
И, если вы не знаете, что такое схема сторожевого таймера , для это простая схема, которая, если вы не пинаете ее достаточно часто (с другой *) 1047 *), она перезагрузит вашу систему, возможно, активировав контакт сброса на любом процессоре, который вы используете.
Это способ автоматически обнаруживать плохое поведение программного обеспечения и возвращать устройство в известное начальное состояние, соглашаясь с теорией, что лучше перезагрузить компьютер, чем продолжать плохо работать.