https://catonmat.net/low-level-bit-hacks,
https://www.embeddedrelated.com/showcode/315.phpможно в класс обвернуть. ещё есть битовые поля и объединения, доустим так:
Код:
void setup()
{
Serial.begin(115200);
}
typedef struct
{
uint8_t b1 : 1;
uint8_t b2 : 1;
uint8_t b3 : 1;
uint8_t b4 : 1;
uint8_t b58 : 4;
} AdressBitStruct;
union AdressType
{
uint8_t asByte;
AdressBitStruct asBitField;
};
AdressType adress;
void loop()
{
adress.asByte = 0;
Serial.println(adress.asByte);
adress.asBitField.b1 = 1;
Serial.println(adress.asByte);
adress.asBitField.b1 = 0;
adress.asBitField.b2 = 1;
Serial.println(adress.asByte);
adress.asBitField.b1 = 1;
Serial.println(adress.asByte);
adress.asBitField.b3 = 1;
Serial.println(adress.asByte);
adress.asBitField.b4 = 1;
Serial.println(adress.asByte);
Serial.println("");
Serial.println("");
Serial.println("");
adress.asBitField.b58 = 1;
Serial.println(adress.asBitField.b58);
Serial.println(adress.asByte);
Serial.println("");
adress.asBitField.b58++;
Serial.println(adress.asBitField.b58);
Serial.println(adress.asByte);
Serial.println("");
adress.asBitField.b58 = 0xf;
Serial.println(adress.asBitField.b58);
Serial.println(adress.asByte);
while(true);
}
вывод:
Цитата:
0
1
2
3
7
15
1
31
2
47
15
255
структуру можно внутри объединения сделать. или вместо юниона сделать через указатель.
Цитата:
количество модулей может разростись вплоть до 125 как по даташиту
такого в даташите нет даже близко. не до 125, а до 126 ("задача про фонарные столбы"). и не модулей, а частотных каналов. количество каналов с количеством модулей никак не связано, от слова совсем. использование нескольких частотных каналов иногда полезно, но в данном случае без дополнительного обоснования эта затея выглядит крайне сомнительной.
при передаче в пакета есть поле адреса, это поле может быть от трёх до пяти байт. 5 байт это мягко говоря громадное количество адресов, в данном случае с ушами даже трёх байт хватит. даже если бы было сильно меньше, это не означает, что нельзя адресовать больше модулей. можно, вариантов много. допустим используя адрес не как адрес модуля, а как адрес сети и дополнительно передавать адрес устройства.
на один модуль можно и более одного адреса выделять. допустим, что бы выделить несколько бит или байт на указание сервиса, функции,...
создавать свой велосипед, когда полно готовых проектов/библиотек/..., затея сомнительная. это если попутно не ставится цель "прокачать навыки" или что-то глубже изучить.