关于位字段的C结构与联合
诚然,这是一个非常愚蠢的问题,但前几天我一直在思考这个问题。有时在源代码中,我看到寄存器的定义如下:关于位字段的C结构与联合,c,embedded,C,Embedded,诚然,这是一个非常愚蠢的问题,但前几天我一直在思考这个问题。有时在源代码中,我看到寄存器的定义如下: union { uint8_t byte; struct { uint8_t bit1 :1; uint8_t bit2 :1; uint8_t bit3_4 :2; uint8_t rsvd :4; } bitfield; } SomeReg_t; 其他时候,我只看到一个标准结构: struct { u
union
{
uint8_t byte;
struct
{
uint8_t bit1 :1;
uint8_t bit2 :1;
uint8_t bit3_4 :2;
uint8_t rsvd :4;
} bitfield;
} SomeReg_t;
其他时候,我只看到一个标准结构:
struct
{
uint8_t bit1 :1;
uint8_t bit2 :1;
uint8_t bit3_4 :2;
uint8_t rsvd :4;
} SomeReg_t;
我写了一个简单的例子来说明我的意思:
问题是,关于位字段,这两种定义有什么区别。什么时候可以将一个与另一个用于位字段。这很容易解释
如果您还想读取或分配整个字节,Union非常方便
比如说
typedef union
{
uint8_t byte;
struct
{
uint8_t bit1 :1;
uint8_t bit2 :1;
uint8_t bit3_4 :2;
uint8_t rsvd :4;
} bitfield;
} SomeReg_t;
SomeReg_t reg;
reg.bitfield.bit1 = 1;
/*...*/
printf("The reg value is %hhx\n", reg.byte);
reg.byte = ReadFormPeriph();
if(reg.bitfield.rsvd == 0b1011)
{
/* do something */
}
比特域?看到和