FreeRtos中实现消息时用到一个类似下面的结构体:
typedef struct tag_MyMsg
{
uint8_t id; //消息ID
union
{
struct tagxxx
{
uint16_t x; //参数1
uint16_t y; //参数2
uint16_t z; //参数3
}Par;
uint8_t Buf[6];
};
}MSG,*PMSG;
问题出现在这个匿名的联合(union),编译器在默认情况下不承认这个联合,总是报出警告。
无奈只能给联合取一个名字,但结果是访问结构体中成员时就会啰嗦不少,如果支持匿名联合
那访问x成员的引用方式为o.Par.x 即可(o为结构体变量 )
但要是给联合取个名字,例如UN,那么访问x变量不得不写成o.UN.Par.x
搞的我很不爽。
问题解决了,原来RealView默认情况下匿名结构和联合的功能是关闭的
要想支持需要打开编译器一个开关,如下一条编译器指令便打开此开关:
#pragma anon_unions
将此声明在结构体定义之前即可!
|
|