ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
5 июля
1527593 Топик полностью
Nikolay_Po (01.07.2025 13:52 - 13:59, просмотров: 116) ответил IBAH на Как изящней преобразовать битовое поле в битовую маску?
Может, Compound literal? 
uint16_t Mask = (uint16_t)(RegSost_t){0,0,0,0,0,1,0,1,0}; //Подготовка маски для En и Reset
*((uint16_t*)&RegSost) &= ~Mask | ModBusOutReg[0]; //Сброс и
*((uint16_t*)&RegSost) |= Mask & ModBusOutReg[0];//установка выбранных бит согласно маске

Чем больше параметров за раз, тем выгоднее.
Не уверен, что пример рабочий.


P.S. Обычно, я, так же, вставляю:

static_assert (sizeof(RegSost)=sizeof(ModBusOutReg[0]),"Размер структуры должен совпадать с размером слова Modbus");
static_assert (sizeof(RegSost)=sizeof(uint16_t),"Размер Mask должен совпадать с размером структуры RegSost");

Чисто для подстраховки на время развития проекта. В релизе можно выключить ассерты.