Как определить struct с союз внутри, так что он занимает всего 1 байт? Я пытался добавить __attribute__((packed))
всюду, но это не помогло.Форсирование выравнивания соединения внутри структуры
Вот члены структуры:
struct
{
int blockNumber: 1 __attribute__((packed));
int shallBe1: 1 __attribute__((packed)); // should be set to 1 per ISO 14443-4
int nadFollowing: 1 __attribute__((packed)); // always 0 in our software
int cidFollowing: 1 __attribute__((packed)); // always 0 in our software
union
{
int chaining: 2 __attribute__((packed)); // i-block
int ackNak: 2 __attribute__((packed)); // r-block
int deselectOrWtx: 2 __attribute__((packed)); // s-block
} __attribute__((packed));
int blockType: 2 __attribute__((packed));
} pcb __attribute__((packed));
SizeOf (печатной платы) возвращает более чем на 1, в то время как мне это нужно занимать ровно один байт.
Вот как я проверить размер структуры:
BYTE testpcb[sizeof(pcb) == 1 ? 0 : -1];
Если я получаю сообщение об ошибке во время сборки, то структура не 1 байт.
попробуйте сделать базовый тип битовых полей 'uint8_t' вместо (или' unsigned char', если он недоступен). –
Не повезло, размер все еще не 1 байт. –
Каждый 'int' - это два байта, и у вас есть пять из них в' struct' даже без 'union'. Я не вижу, как вы можете ожидать, что все это будет всего лишь одним байтом. –