У меня есть структура, которая содержит битовые поля с разными размерами. Некоторые из битовых полей являются только 1-битными, а некоторые - 32-битными. Я заполню эту структуру буфером, полученным от последовательной связи. Поэтому я планировал определить их в битовых полях, а затем использовать memcpy
для заполнения буфера полученным пакетом.
Это мое определение структуры:
#pragma pack(push,1)
typedef struct{
uint32_t variable1; //32 bit
uint16_t variable2:16; //16 bit
uint32_t variable3:18; //18 bit
uint32_t variable4:10; //10 bit
uint32_t variable5:4; //4 bit
uint8_t variable6; //8 bit
uint8_t variable7:7; //7 bit
uint8_t variable8:1; //1 bit
uint8_t variable9:6; //6 bit
uint8_t variable10:6; //6 bit
uint8_t variable11:7; //7 bit
uint8_t variable12:5; //5 bit
}error_driver_t; //Total length should be 15 bytes (120 bit)
#pragma pack(pop)
printf("\r\nSize of error_driver_t: %d\r\n\r\n", sizeof(demoErrorDriver)); //Expected 15, Resulted 20
Последовательный пакет составляет 15 байтов, поэтомуЯ ожидаю, что эта структура будет иметь длину 15 байт, чтобы правильно использовать memcpy
. Но когда я получаю sizeof(error_driver_t)
, я получаю 20.
Я запутался в том, как использовать битовые поля, когда у меня есть и маленькие, и большие типы в одной и той же структуре.