电控&视觉小知识
发布于 2024-04-05 2108 次阅读
发布于 2024-04-05 2108 次阅读
在定义结构体的时候,变量最后加上:length,可指定该变量的长度,即在内存中存放为几个位。定义位域可以起到减少内存占用的作用,在单片机编程中比较有用。
教材里没有的:【位域】结构体里后缀“: 1”或者“: 4”_c语言结构体中用:1-CSDN博客
例如:
struct ReceivePacket
{
uint8_t header = 0x5A;
uint8_t detect_color : 1; // 0-red 1-blue
bool reset_tracker : 1; //bool -> uint8_t
uint8_t reserved : 6;
float roll;
float pitch;
float yaw;
float aim_x;
float aim_y;
float aim_z;
uint16_t checksum = 0;
} __attribute__((packed));
在这段代码中:
uint8_t detect_color : 1;
uint8_t reset_tracker : 1;
将其位域定义为1个位
uint8_t reserved : 6;
将其位域定义为6个位
所以,以上3个变量总共占用8个位(即1个字节),将存储空间从3字节减少至1字节。
在C语言中,attribute((packed))是一种编译器特性,用于告诉编译器取消结构体成员的对齐。
Comments | NOTHING