最近我偶然发现了这样的代码:
typedef struct
{
uint8_t TC0_WG0 :2;
uint8_t TC0_CS :3;
} Timer0;
我想知道的是:2;
& :3;
具体是什么意思?是仅访问位0,1,2还是0,1,2和2; 3只有8位无符号字符还是什么?
答案 0 :(得分:1)
这些基本上是位域明确告诉TC0_CS
将是3位。
这些可用于节省空间。在嵌入式系统中,我在设计中断系统时遇到过这种用法。使用位域指定特定位置作为激活停用中断的方法。
他没有访问0,1或第2位,但OP可以使用适当的位屏蔽。
答案 1 :(得分:1)
它被称为位字段成员。
位字段
声明具有显式宽度的成员,以位为单位。相邻位域 成员可能被打包以共享和跨越各个字节。
位字段声明是结构或联合成员声明 使用以下声明符:
identifier(optional) : width
标识符 - 正在声明的位字段的名称。名称是可选的:无名的位域引入指定的数量 填充位
width - 一个整数常量表达式,其值大于或等于零且小于或等于底层中的位数 类型。当大于零时,这是该位的位数 场将占据。零值仅允许无名 bitfields并具有特殊含义:它指定下一位 类定义中的字段将从分配单元开始 边界。