我经常使用这样的代码:
struct teststruct
{
uint8_t i1;
uint16_t i2;
uint32_t i4;
} __attribute__((__packed__));
struct teststruct *protocol = (struct teststruct *)buffer;
uint16_t var = protocol->i2;
以便通过结构访问协议数据。
该代码适用于AVR 4.6、4.7和Win32 4.6、4.7和Linux4.6,但现在(MingW) gcc 4.8的代码并不像预期的那样工作。sizeof()将返回8。
我没有找到任何提示,为什么它不再起作用。还是有其他方式来访问协议缓冲区,一种结构化的方式?
发布于 2013-09-06 12:03:30
似乎使用-mno-ms-bitfields
进行编译一定会有所帮助(请参阅extended 论GCC·布奇拉)。我没有交集,但我创造了简单的复制:
#include <stdint.h>
#include <stdio.h>
struct teststruct
{
uint8_t i1;
uint16_t i2;
uint32_t i4;
} __attribute__((__packed__));
int main(void)
{
fprintf(stderr, "size = %d\n", sizeof(struct teststruct));
return 0;
}
并在linux上用-mms-bitfields
编译它,所以它返回8。缺省值为7。我想,-mms-bitfields
是windows目标的缺省值。
https://stackoverflow.com/questions/18646087
复制相似问题