История изменений
Исправление alx777, (текущая версия) :
А можно пример проблемы?
typedef enum {
CMD_1=1,
CMD_2=2,
CMD_3=3
} CMD_t;
Видя только исходники, нельзя заранее сказать, что покажет sizeof(CMD_t), придется смотреть используемые опции компилятора (которые еще найти надо)
См. также тут
Тут, например, непонятно, как будет выравнен param_a. Это может быть медленнее или вообще запрещено на некоторых платформах
typedef struct {
CMD_t cmd;
uint8_t param_a;
uint32_t param_b;
} attribute((packed)) my_cmd_struct_t;
С эндианностью тоже возникают вопросы из-за неизвестного размера - какое значение должно быть у CMD_1 после конвертации - 0x1000000 или 0x0100 ?
По-моему, использование enum’ов для работы с железом - это лишний источник проблем, которых и так хватает в случае кросс-платформы
Вероятно, актуальные версии компиляторов справляются с этим, но к сожалению не всегда есть возможность ими воспользоваться
Исходная версия alx777, :
А можно пример проблемы?
typedef enum {
CMD_1=1,
CMD_2=2,
CMD_3=3
} CMD_t;
Видя только исходники, нельзя заранее сказать, что покажет sizeof(CMD_t), придется смотреть используемые опции компилятора (которые еще найти надо)
См. также тут
Тут, например, непонятно, как будет выравнен param_a. Это может быть медленнее или вообще запрещено на некоторых платформах
typedef struct {
CMD_t cmd;
uint8_t param_a;
uint32_t param_b;
} attribute((packed)) my_cmd_struct_t;
С эндианностью тоже возникают вопросы из-за неизвестного размера - какое значение должно быть у CMD_1 после конвертации - 0x1000000 или 0x0100 ?
По-моемому, использование enum’ов для работы с железом - это лишний источник проблем, которых и так хватает в случае кросс-платформы
Вероятно, актуальные версии компиляторов справляются с этим, но к сожалению не всегда есть возможность ими воспользоваться