Может, 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");
Чисто для подстраховки на время развития проекта. В релизе можно выключить ассерты.