请高手指点:gcc与mdk中程序转化
在gcc中有样一个定义:typedef struct _CRTPPacket
{
uint8_t size;
union {
struct {
union {
uint8_t header;
struct {
uint8_t channel : 2;
uint8_t reserved : 2;
uint8_t port : 4;
};
};
uint8_t data;
};
uint8_t raw;
};
} __attribute__((packed)) CRTPPacket;
定义好后,使用时只需要用
CRTPPacket mm;
mm.port =2;
mm.reserved = 3
但在mdk中就不行
struct ,union 必须实名化,这要就要写一大串了
请问在MDK中有没有简单的方法实现功能
keil里面应该支持这种嵌套了吧,
否则你试试下面的这种定义方式吧:
typdef union{
uint8_t header;
struct{
uint8_t channel:2;
uint8_t reserved:2;
uint8_t port:4;
}header_s;
}HEADER;
typdef struct{
uint8_t data;
HEADER header;
}DATA;
typdef union{
uint8_t raw;
DATA data;
}RAW;
typedef struct _CRTPPacket{
uint8_t size;
RAW raw;
} __attribute__((packed)) CRTPPacket;
CRTPPacket mm;
mm.raw.data.header_s.port = 2;
mm.raw.data.header_s.reserved = 3;
一般中间函数可以使用中间的一些结构体或者联合体,这样模块化更强一些。 学习了 會比較長. 以下是我的code, 作為例子.
#pragma anon_unions
typedef union
{
struct
{
s8 cIValue;
s8 cQValue;
} IQ;
s8 cValues;
u8 bValues;
u16 uIQValue;
} __attribute__ ((aligned(1))) IQValue_t;
页:
[1]