在阅读代码时看到有以下代码:
struct {
//按照位数来赋值
uint64_t RadarCfg_MaxDistance_valid:1;
uint64_t RadarCfg_SensorID_valid:1;
uint64_t RadarCfg_RadarPower_valid:1;
uint64_t RadarCfg_OutputType_valid:1;
uint64_t RadarCfg_SendQuality_valid:1;
uint64_t RadarCfg_SendExtInfo_valid:1;
uint64_t RadarCfg_SortIndex_valid:1;
uint64_t RadarCfg_StoreInNVM_valid:1;
uint64_t RadarCfg_MaxDistance1:8;//设置最大最小距离
uint64_t Reserved:6;
uint64_t RadarCfg_MaxDistance2:2;
uint64_t Reserved2:8;
uint64_t RadarCfg_SensorID:3;
uint64_t RadarCfg_OutputType:2;
uint64_t RadarCfg_RadarPower:3;
uint64_t RadarCfg_CtrlRelay_valid:1;
uint64_t RadarCfg_CtrlRelay:1;
uint64_t RadarCfg_SendQuality:1;
uint64_t RadarCfg_SendExtInfo:1;
uint64_t RadarCfg_SortIndex:3;
uint64_t RadarCfg_StoreInNVM:1;//这个设置是否永久保存上次的雷达设置,如果为1则为是
uint64_t RadarCfg_RCS_Threshold_valid:1;
uint64_t RadarCfg_RCS_Threshold:3;
uint64_t Reserved3:4;
uint64_t Reserved4:8;
} data = {};
通过查阅可知,这是位域操作的表示方法,也就是说后面加上“:1”的意思是这个成员的大小占所定义类型的1 bit,“:2”占2 bit,依次类推。当然大小不能超过所定义类型包含的总bit数。
一个bytes(字节)是8 bit(bit)。例如你的结构中定义的类型是uint64_t,8个字节,共64bit,最大就不能超过64。short是2字节,共16bit,最大就不能超过16。int是4字节,共32bit,最大就不能超过32。
PS:按照posix标准,一般整形对应的*_t类型为:
1字节 uint8_t
2字节 uint16_t
4字节 uint32_t
8字节 uint64_t