2012-01-24 2 views
-1

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

+1

Что такое 'OCIE0A'? Имя переменной? – Mysticial

+0

@ Мистическое шествие. – mugetsu

+6

В гексагоне нет букв 'I'. Кроме того, он даже не будет близок к '0001'. – Mysticial

ответ

42

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

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

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

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

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

* допущений везде, я ничего не знаю

+2

+1 для исследовательских усилий. –

+3

Как встроенный программист, я полностью согласен. Я ненавижу читать старый код и нахожу 'config_reg = 0x051C'. «О, черт возьми, мне нужно снова найти справочное руководство». Гораздо лучше увидеть 'config_reg = EN_FIFO | EN_INT | WORD_SZ_8;» – AShelly

+1

Вы совершенно правы с вашими предположениями. Также смотрите здесь больше на эту тему: http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_use_bv –

Смежные вопросы