Запись в частично зарезервированные регистры датчиков

sensors bit registers

Я пытаюсь изменить диапазон гироскопа, который я использую, и есть следующее руководство:

рекомендуется маскировать (логические и с нулем) зарезервированные биты регистров, которые частично помечены как зарезервированные.

Я пробовал читать о битовой маскировке с помощью побитовых операторов и чувствую, что понимаю ее, пытаясь читать только определенные биты, но не для записи.

Например, как бы я записал в следующий регистр, маскируя 2 бита, которые зарезервированы?

, 👍1


1 ответ


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

2

Вы всегда пишете целый байт, когда устанавливаете регистр. Вам нужно только "замаскировать" эти биты, если есть опасность, что вы можете непреднамеренно установить их в 1, например, через некоторое значение над потоком из других битов при объединении значений вместе, чтобы сформировать этот байт.

Если вы этого не делаете, то вам нечего скрывать. Например, если вы просто хотите установить определенный набор битов, то просто установите это значение - 0b00101001 будет 0b00101001 независимо от того, маскируете вы его или нет.

Если вы решите, что действительно хотите замаскировать значение, например, если вы пишете библиотеку и у вас нет контроля над тем, что конечный пользователь может решить передать функции, то & (или&=) - ваш друг:

uint8_t val = 0x55; // 0b01010101 in binary
val &= 0b00111111; // or 0x3F if you want to use HEX
// val is now 0x15 since bit 6 has been "masked" to 0.
,

Спасибо вам за подробный и информативный ответ. В вашем примере вы имеете в виду, что бит 7 и бит 8 замаскированы?, @Zhelyazko Grudov

6 и 7. Вы начинаете считать биты с 0., @Majenko

Еще раз спасибо :), @Zhelyazko Grudov