что такое (1 << OCIE0A) в C? - PullRequest
       14

что такое (1 << OCIE0A) в C?

0 голосов
/ 24 января 2012

Я знаю, что OCIE0A=0001 в двоичном виде, поэтому (1<<OCIE0A) будет просто 0010? Я вижу, что это используется довольно часто, в чем причина установки регистра на (1<<OCIE0A), а не просто установки его на 0010 напрямую?

1 Ответ

42 голосов
/ 24 января 2012

Судя по результатам поиска в Google, оно представляется * именем бита, который управляет «Выходом таймера / счетчика Сравнение совпадений с прерыванием» * * в «Регистре маски прерывания таймера / счетчика» * из «8bit AVR Microcontroller "* Используется следующим образом *:

TIMSK0 |= _BV(OCIE0A);  // enable compare A interrupts 
TIMSK0 &= ~_BV(OCIE0A); // disable compare A interrupts 

Где TIMSK0 - * Регистр маски прерывания таймера *.OCIE0A - это идентификатор, который (для тех, кто знаком с кодом AVR *) более понятен *, чем TIMSK0 |= 2*.

Они используют битовые идентификаторы вместо масок, поскольку любой полу-коммутатор-компилятор может оптимизировать их до одного и того же для бит-> маска, но переход от маски-> бит сложнее *.Таким образом, оставляя его как битовый код, это легко и быстро для всех случаев использования. *.

На несвязанной ноте числа - это значения, которые хранятся в компьютере в двоичном виде.«Десятичные» и «шестнадцатеричные» являются представлениями этих значений.Так что нет, OCIE0A не является "шестнадцатеричным".Это символ, который представляет битовое смещение флага со значением 1.

* предположения везде, я ничего не знаю

...