тут очень надо.
Есть структура
typedef struct crsf_channels_s
{
unsigned ch0 : 11;
unsigned ch1 : 11;
unsigned ch2 : 11;
unsigned ch3 : 11;
unsigned ch4 : 11;
unsigned ch5 : 11;
unsigned ch6 : 11;
unsigned ch7 : 11;
unsigned ch8 : 11;
unsigned ch9 : 11;
unsigned ch10 : 11;
unsigned ch11 : 11;
unsigned ch12 : 11;
unsigned ch13 : 11;
unsigned ch14 : 11;
unsigned ch15 : 11;
} PACKED crsf_channels_t;
Хочется к этим chN обращаться по их номеру. Как я понимаю, я мог бы этого достигнуть, использовав UNION с массивом unsigned[16]
Вопросы:
1. Можно ли обойтись без юниона?
2. Смущает слово PACKED - что оно делает и не сместятся ли данные структуры относительно массива?
3. Смущает тип unsigned. Обычно привык задавать строгую длину. Есть ли гарантия что массив и структура будут действительно наложены друг на друга?
Не надо по номеру
Значит придется писать мегасвитч. От него хотел уйти
Это не массив это набор битовых полей. Никак к ним по номеру не обратиться
Там что, данные лежат не в упорядоченном виде?
Нет. Это если коротко
Что такое упорядоченный вид у тебя?
Тем не менее ты можешь написать функцию с индексом на входе и значением поля на выходе, которая будет выдавать по индексу нужное поле. Внутри естественно будет switch
Обсуждают сегодня