Согласно стандарту C ++
Базовый тип перечисления является целочисленным типом, который может представлять все значения перечислителя, определенные в перечислении.
Теперь давайте посмотрим на первое определение
typedef enum {
E_1_DEFAULT = 0,
E_1_1,
E_1_2,
E_1_3,
E_1_4,
E_1_5,
E_1_255 = 255 //needs at least 8Bit
} APPLICATION_ENUM_1;
определение E_1_255 = 255
гарантирует, что все значения из 0 to 255
могут быть представлены этим типом перечисления, и вам нужно как минимум 8 бит для представления всех значений из 0 to 255
typedef struct {
APPLICATION_ENUM_3 var3:10; // 10Bit
APPLICATION_ENUM_1 var1:8; // 18Bit
APPLICATION_ENUM_2 var2:2; // 20Bit
uint8 unnused_1:4; // 24Bit = 3byte
} APPLICATION_RAM;
В приведенной выше структуре используется редко используемая конструкция bitfield . По сути, объявление APPLICATION_RAM
как структуры, которая имеет
var3
элемент, который составляет 10 бит
var1
элемент 8 бит
var2
элемент, который является 2 битами
unnused_1
элемент, который 4 бита