我目前正在为PIC微控制器编写代码,我想使用uint8_t
作为"状态计数器"来构建我的一些代码。我的代码的一部分。这涉及许多按位操作。我想要做的是为这个uint8_t
创建一个结构,类似于标题苍蝇内的SFR位结构,我已经在头文件中包含了一个例子,我和# 39; m在下面使用。
头文件允许使用类似于访问结构中元素的表示法来访问SFR中的位,例如U1STAbits.UTXBF
和uint16_t
这是我想要实现的在我的代码中,因为它允许我使用switch语句作为我的代码的主要结构。
#define U1STA U1STA
extern volatile unsigned int U1STA __attribute__((__sfr__));
__extension__ typedef struct tagU1STABITS {
union {
struct {
unsigned URXDA:1;
unsigned OERR:1;
unsigned FERR:1;
unsigned PERR:1;
unsigned RIDLE:1;
unsigned ADDEN:1;
unsigned URXISEL:2;
unsigned TRMT:1;
unsigned UTXBF:1;
unsigned UTXEN:1;
unsigned UTXBRK:1;
unsigned :1;
unsigned UTXISEL0:1;
unsigned UTXINV:1;
unsigned UTXISEL1:1;
};
struct {
unsigned :6;
unsigned URXISEL0:1;
unsigned URXISEL1:1;
};
};
} U1STABITS;
extern volatile U1STABITS U1STAbits __attribute__((__sfr__));
更新: 我已经根据这个做出了一个潜在的解决方案:
typedef struct {
union {
struct{
unsigned breakDetected :1;
unsigned overrunError :1;
unsigned framingError :1;
unsigned startDetected :1;
unsigned dmxMode :1;
unsigned rdmMode :1;
};
uint8_t UartFlags;
};
} UartFlagsBits;
UartFlagsBits uartFlags;
答案 0 :(得分:0)
通过定义位域结构和uint8_t之间的联合,我能够访问位域作为数字,以按照Alex的建议对整个位域执行操作。
typedef struct {
union {
struct{
uint8_t breakDetected :1;
uint8_t overrunError :1;
uint8_t framingError :1;
uint8_t startDetected :1;
uint8_t dmxMode :1;
uint8_t rdmMode :1;
};
uint8_t UartFlags;
};
} UartFlagsBits;
UartFlagsBits uartFlags;