Я пишу код C ++ для MCU ESP8266 на платформе Arduino и пытаюсь сделать свой код максимально эффективным.
Чтобы управлять другим MCU через I2C, мне нужно настроить его внутренние компонентырегистры, которые хранят 8 бит.Чтобы установить бит вкл / выкл, я использую и битовую маску.
Один из способов сделать это - сдвинуть биты и применить битовую маску и (и) таким образом Установить i-й битв ноль? .
Но я также могу сохранить все 8 возможных значений сдвига в массиве, получить к ним прямой доступ и исключить выполнение сдвига битов.
Примерно так:
const unsigned int PINS[8] = {0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80};
...
pt = pt & ~(PINS[i]);
Вместо:
pt = pt & ~(1 << i);
Я думаю, что это может быть хуже в зависимости от того, как компилятор MCU будет работать над этим.Доступ к массивам через индекс стоит больше?Значения массива будут в регистрах процессора?Я переигрываю оптимизацию?Есть еще один вариант?
Можете ли вы помочь мне с пониманием этого вопроса?