В чем смысл этого кода? - PullRequest
       3

В чем смысл этого кода?

2 голосов
/ 17 января 2012

Пожалуйста, помогите мне понять значение этого кода. Я видел такое использование впервые

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;                           

typedef enum {

        E_2_DEFAULT = 0,
        E_2_1,
        E_2_2,
        E_2_3                   //needs at least 2Bit

} APPLICATION_ENUM_2;                           

typedef enum {

        E_3_DEFAULT = 0,
        E_3_1,
        E_3_2,
        E_3_3,
        E_3_4,
        E_3_5,
        E_3_666 = 666           //needs at least 10Bit

} APPLICATION_ENUM_3;



typedef struct {

        APPLICATION_ENUM_3      var3:10;                // 10Bit
        APPLICATION_ENUM_1      var1:8;         // 18Bit
        APPLICATION_ENUM_2      var2:2;         // 20Bit
        uint8                   unnused_1:4;   // fill up the last whole byte -> 24Bit = 3byte

} APPLICATION_RAM;;

1 Ответ

6 голосов
/ 17 января 2012

Согласно стандарту 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 бита
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...