知识点
#pragma pack(1) 和 #pragma pack() 是用于控制结构体在内存中对齐方式的预处理指令。
#pragma pack(1):这个指令告诉编译器以一个字节对齐结构体成员。也就是说,结构体的每个成员都会按照其自身大小占据内存空间,不会被填充字节。
#pragma pack():这个指令会取消之前设置的对齐方式,恢复编译器默认的对齐方式。
在一些特殊情况下,比如需要与硬件进行直接交互或者进行网络数据传输时,控制结构体的对齐方式可以确保数据在内存中的布局和传输的一致性。
但是,要注意使用这些指令可能会导致性能上的损失,因为非默认的对齐方式可能会增加内存访问的开销。
因此,应该在确实需要的情况下使用这些指令,并在使用后及时取消以避免意外影响其他部分代码的行为。
应用
#pragma pack(1)
/**
* @brief 电机设置角度
*/
typedef struct {
uint8_t reaction; //转动方向 设置为0x00 固定顺时针
uint16_t motor_angle; //电机角度
uint8_t null_use; //电机协议里边为null,值为0x00
} MotorProtocolMotorSetAngle_t, *pMotorProtocolMotorSetAngle_t;
/**
* @brief 电机设置角度
*/
typedef struct {
uint32_t motor_angle; //电机角度
} MotorProtocolMotorDataInfo_t, *pMotorProtocolMotorDataInfo_t;
#pragma pack()
``