在keil C51里怎么实现该结构体
本帖最后由 funnybow 于 2014-5-31 00:14 编辑typedef struct KEY_struct{
union{
uint8_t Flags;
struct{
uint8_t ShortDownEvent : 1; //Key1短按
uint8_t LongDownEvent : 1; //Key1长按
uint8_t LongDown3SEvent : 1; //Key1长按3秒
uint8_t LongDown6SEvent : 1; //Key1长按6秒
uint8_t ScanEvent : 1; //有按键事件,需要按键扫描
uint8_t UpEvent : 1;
uint8_t DblDownEvent : 1;
uint8_t : 1;
};
};
union{
uint8_t KeyStatus;
struct{
uint8_t bKeyCurr : 1; //存储按键IO消抖后的状态
uint8_t bKeyLast : 1;
uint8_t : 6;
};
};
__IO uint8_t *IDR;
uint8_t PIN; //存储当前按键在哪个IO口
uint8_t Buffer; //存储按键IO消抖前的状态
uint8_t Number;
uint16_t Timer; //按键计时变量
}KEY_TypeDef;
这个结构体在STVD里能编译通过,但是在Keil C51里编译不通过,有什么办法可以再Keil里编译通过,
本帖最后由 hithms 于 2014-5-31 00:51 编辑
联合体里的结构体是声明还是定义?声明或者定义都不是这样写的吧。
union{
uint8_t KeyStatus;
struct{
uint8_t bKeyCurr : 1; //存储按键IO消抖后的状态
uint8_t bKeyLast : 1;
uint8_t : 6;
};
};
试一试在在结构体大括号后加一个该结构体的实体变量。
struct{
uint8_t bKeyCurr : 1; //存储按键IO消抖后的状态
uint8_t bKeyLast : 1;
uint8_t : 6;
}Struct_bit;
应该是因为编译器不支持匿名结构体联合体,可以加个名字试试,不过代码里面都要加比较麻烦 内部的结构体没名字以后咋访问呢 看看加--c99选项能行不 为了增强程序的移植性和可读性,建议楼主还是先在外部声明机构体,用实体结构体来声明联合体,看着有舒服,又方便修改! Keil C51暂不支持匿名结构/联合体吧
页:
[1]