Все ли эти битовые настройки означают одно и то же?

ADMUX  = ADMUX | _BV(REFS);  // несоставное побитовое ИЛИ
ADMUX |= _BV(REFS0);         // #define _BV(бит) (1 << (бит))
ADMUX |= bit(REFS0);         // # определить бит(b) (1UL << (b))
bitSet(ADMUX, REFS0);        // #define bitSet(значение, бит) ((значение) |= (1UL << (бит)))
sbi(ADMUX, REFS0);           // устаревшая сборка?
ADMUX |= (1 << REFS0);       // оператор сдвига
ADMUX |= (1 << 7);           // бит 7 называется REFS0
ADMUX |= 0b10000000;         // корзина
ADMUX |= 0x80;               // шестнадцатеричный
ADMUX |= 128;                // уб

*в нормальных условиях 8-битной Arduino?

, 👍1

Обсуждение

Комментарии не для расширенного обсуждения; этот разговор был [перемещен в чат](https://chat.stackexchange.com/rooms/139514/discussion-on-question-by-gaai-do-these-bit-settings-all-mean-the-same) ., @Nick Gammon


1 ответ


Лучший ответ:

2

Вы уже получили ответ в комментариях, но, чтобы еще раз убедиться, Я попытался скомпилировать все эти заявления для Uno, и они получили все переведены в точно такой же машинный код. Ну, почти: я должен был сделать некоторые мелкие корректировки, которые, как мне кажется, не имеют отношения к сути ваш вопрос. Для полноты картины я изменил следующее:

  1. Я заменил REFS0 на REFS1: на Uno REFS0 — это бит 6, а REFS1 бит 7.

  2. Я заменил REFS на REFS1, так как первый не определен.

  3. Я #включил <compat/deprecated.h>, иначе я получаю сообщение об ошибке «'sbi' не был объявлен в этой области».

,