KEIL C51中如何利用 联合定义位变量进行操作?

[复制链接]
ayb_ice 发表于 2011-10-13 14:18 | 显示全部楼层
18# ayb_ice  
奇怪的是,位段声明不是不能出现char int 吗? 编译还可通过。。 搞不懂呀 , 可能其他编译器就不行了吧 。。。
DownCloud 发表于 2011-10-13 13:52

谁说不可以出现 char int了,long都可以的
Cortex-M0 发表于 2011-10-13 14:28 | 显示全部楼层
LZ概念不清,Keil  C51的变量赋值,对隐性变量(指未定义变量类型)全部按 int 赋值。
因此,下列联合定义中,上半部分 bit位定义在 int类型中,下半部分LZ 定义了 char类型,你让 Keil  C51如何听你话?
union {
struct {
       unsigned Wind: 1; //
       unsigned JCQ: 1;
       unsigned Pump: 1;
       unsigned Intel: 1;
       unsigned Drain: 1;
       unsigned CCW_Flag: 1;////////////////////////////////
       unsigned Swing: 1;
       unsigned : 1;
}Bit;
       unsigned char All;
}QDP_State;

14楼 将下半部分 改为定义成 int类型,和上半部分 bit位定义在 int类型中相匹配,所以编译后运行正确。
15楼 将上半部分 改为定义成 char类型,和下半部分 char类型变量相匹配,所以编译后运行正确。

综上,还是LZ概念不清~~~

评分

参与人数 1威望 +1 收起 理由
highgear + 1

查看全部评分

刘前辈 发表于 2011-10-13 17:22 | 显示全部楼层
18# ayb_ice  正解。学习了。


//
jinyangland 发表于 2012-9-13 14:03 | 显示全部楼层
可以在别的文件中引用,定义的位变量吗?!
pkk1989 发表于 2013-10-22 16:53 | 显示全部楼层
if(QDP_State.Bit.Pump!=0)
怎么不用:if(!QDP_State.Bit.Pump) ??
lawdge 发表于 2013-10-24 14:05 | 显示全部楼层
我刚刚解决了位定义的问题,就是用bit 定义就好了!
51核的MCU限定位寻址区域20~2F.
amwito007 发表于 2014-8-21 14:17 | 显示全部楼层
个人感觉,AVR与51的定义位时有区别的,51有BIT来专门定义位,而AVR没有。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部