|
我的系统是2410+vxworks,最近有个应用问题想使用位域来解决,我定义了如下结构体:
typedef union
{
struct
{
unsigned char Type : 3;
unsigned char Char_1 : 7;
unsigned char Char_2 : 7;
unsigned char Char_3 : 7;
} Field;
unsigned char Frame[3];
} TypeHelloStruct;
TypeHelloStruct MyHello;
我希望先通过位域对MyHello进行赋值,然后按字节输出,例如:
MyHello.Field.Type = 4;
MyHello.Field.Char_1 = 5;
MyHello.Field.Char_2 = 6;
MyHello.Field.Char_3 = 7;
printf("My Hello: %x%x%x\n", MyHello.Frame[0], MyHello.Frame[1], MyHello.Frame[2]);
输出结果不是我所希望的值,查看MyHello存放的内存,发现MyHello.Field的每个成员都占用了一整个字节的存储空间,并不是按定义的bit数连续存储的,导致最后MyHello按字节输出的异常。后来查看了vxworks帮助文档,在工程编译选项中增加了“位域压缩存储”条件后,执行结果仍然不对。在帮助文档中还提到了关于位域编译时的其它相关选项,考虑到修改这些选项后可能导致出现其它异常情况,所以没有试。
大家有没有碰到类似的问题,这是由什么引起的,编译选项、体系结构或是别的原因?如何得到我所需要的结果?
|
|