打印
[PIC®/AVR®/dsPIC®产品]

这样的结构是什么意思?

[复制链接]
1691|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liuyanlbg|  楼主 | 2014-7-10 09:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天看到一个这样的结构体定义:
struct tagFlag{
                          unchar bAlarmPIR :1;
                          unchar bAlarmMW :1;
                          unchar bAlarmStaus :1;
                          unchar bNONCFirstStatus :1;
                          unchar bAntimask :1;
                          unchar bOR :1;
                          unchar bLED :1;

                 }Flag = 0;

结构体内的成员后面的“:1”是指什么?“Flag=0”能这样赋值吗?居然编译能够通得过,不解。
沙发
yewuyi| | 2014-7-10 09:59 | 只看该作者
1---》1bit

例如bAlarmPIR相当于Flag的一个bit

使用特权

评论回复
板凳
msblast| | 2014-7-10 09:59 | 只看该作者
位域,:1表示占用1bit
Flag = 0;表示在定义结构体的同时声明变量Flag,且对Flag进行初始化。初始值为0

使用特权

评论回复
地板
ayb_ice| | 2014-7-10 10:58 | 只看该作者
标准的位域

使用特权

评论回复
5
liuyanlbg|  楼主 | 2014-7-10 11:03 | 只看该作者
yewuyi 发表于 2014-7-10 09:59
1---》1bit

例如bAlarmPIR相当于Flag的一个bit

如果只有1bit的话,为什么不直接用bit来定义,而要用unchar(unsigned char)来定义?他占用8bit,那么其他7bit的资源不浪费掉了吗?

使用特权

评论回复
6
yewuyi| | 2014-7-10 11:54 | 只看该作者
liuyanlbg 发表于 2014-7-10 11:03
如果只有1bit的话,为什么不直接用bit来定义,而要用unchar(unsigned char)来定义?他占用8bit,那么其他 ...

1、不是所有的MCU都支持bit定义,这么写首先偏于代码的移植。
2、汇总在一起便于阅读和查看,也偏于整体赋值操作
3、在PIC中定位bit变量时,但实际上也还是占用了一个字节,当有多个bit变量时,编译器会自动整合到一个字节中,实质上和当前的这种结构方式一样。

使用特权

评论回复
7
liuyanlbg|  楼主 | 2014-7-10 13:31 | 只看该作者
yewuyi 发表于 2014-7-10 11:54
1、不是所有的MCU都支持bit定义,这么写首先偏于代码的移植。
2、汇总在一起便于阅读和查看,也偏于整体 ...

刚仔细看了一下位域的定义,明白了,谢谢!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

59

帖子

0

粉丝