а ежели так, то по любому не получится в исходном массиве
разбираться по отдельным кускам, ибо 3 не четное и через одно будет
залет на хард фаулт, только через копию. Завел локальную временную структуру, туда скопировал побайтно, поменял, сохранил обратно побайтно
typedef __packed struct{
uint8_t a;
uint8_t b;
uint8_t c :4;
uint8_t d :4;
}SomeType;
uint8_t arr[1024] ={0};
void foo(void){
SomeType data;
memcpy(&data, &arr[20], 3);
data.a = data.c + data.d;
memcpy(&arr[20], &data, 3);
}