Как установить номер в поле адреса?
Я хочу построить структуру записи. Проблема в том, что я не могу правильно построить поле адреса. Кто-нибудь может мне помочь?
Ps: адрес [16:2] начинается с бита 61 до бита 47, поэтому, пожалуйста, вы не можете сказать, что вы должны сдвинуть его на 32.
@Mahmoud Elkout, 👍-2
1 ответ
▲ 2
Для этого я бы использовал битовые поля:
typedef union {
struct {
uint8_t raw[8]; // Необработанный доступ к байтам
};
struct {
unsigned data:32;
unsigned cs14:1;
unsigned cs13:1;
unsigned cs12:1;
unsigned cs11:1;
unsigned cs10:1;
unsigned cs9:1;
unsigned cs8:1;
unsigned cs7:1;
unsigned cs6:1;
unsigned cs5:1;
unsigned cs4:1;
unsigned cs3:1;
unsigned cs2:1;
unsigned cs1:1;
unsigned cs0:1;
unsigned address:15;
unsigned parity:1;
unsigned stop:1;
};
struct {
unsigned :32;
unsigned cs:15;
unsigned :17;
};
} Packet;
Тогда вы можете:
Packet p;
p.data = 0x493DE26CUL;
p.address = 0x13f3;
p.cs3 = 1;
// or
p.cs = 0x0080;
и т. д.
,
@Majenko
Смотрите также:
- Как объявить массив переменного размера (глобально)
- Программирование Arduino с использованием Python, а не C/C ++
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Как справиться с rollover millis()?
- Является ли использование malloc() и free() действительно плохой идеей для Arduino?
- Можно ли сделать несколько функций loop() с помощью Arduino Uno?
- Какие накладные расходы и другие соображения существуют при использовании структуры по сравнению с классом?
- устаревшее преобразование из строковой константы в 'char*'