最近在项目的测试过程中,遇到了十分奇怪的事情。本来非常基本的串口操作,确总是执行不成功,或者发送接收都是乱码,后来经过仔细排查,发现原来是Makefile中编译选项指定了fpack-struct选项导致的。这才赶快对这个知识点恶补一番,经过查证,总结如下:
1 linux下gcc编译选项如果指定了fpack-struct,则是将所有的结构体都按照字节方式编译,可能会带来问题,也会降低程序的效率。
2 若不指定fpack-struct选项,则自定义的很多结构体可能执行过程中会出现错乱的情况。
3 综合上述2点,结合网上其它的资料,采用定义结构体时指定__attribute__((packed))即可。
用法举例:
struct score
{
char a;
int b;
}__attribute__((packed));
如果用了typedef,则需要注意其位置
typedef struct
{
char a;
int b;
}__attribute__((packed)) score;
阅读(901) | 评论(0) | 转发(1) |