当在watch窗口中观察如下定义的union变量时,当Cmd设置为设置为SPI_CMD_DC_STATE时(其值为8),可以看到,在图中①位置all的最高四位能正确的读到值为8,而查看成员Cmd的值时(图中②位置),错误的将其识别为一个有符号负数,无法正确的显示枚举值的名称,而③位置可以看到ide已经正确的识别了其为一个4bits的枚举类型
typedef enum
{
//28374->28384
SPI_CMD_RUNCMD,
SPI_CMD_POWER,
SPI_CMD_CPLD_ERROR_MODEL_L,
SPI_CMD_CPLD_ERROR_MODEL_H,
//28384->28374
SPI_CMD_DC_STATE=8,
SPI_CMD_DC_FAULT_STATE,
SPI_CMD_DC_ACTIVE_STATE_L,
SPI_CMD_DC_ACTIVE_STATE_H,
}SpiCmd_t;
typedef union
{
uint16_t all;
struct
{
int16_t :12;
SpiCmd_t Cmd:4;
};
struct
{
uint16_t runState : 12;
uint16_t :4;
}runState384_bits;
}SpiPackage_t;
