uint8_t中的地址位作为struct的成员

时间:2015-01-27 15:31:49

标签: c struct bit-fields

我目前正在为PIC微控制器编写代码,我想使用uint8_t作为"状态计数器"来构建我的一些代码。我的代码的一部分。这涉及许多按位操作。我想要做的是为这个uint8_t创建一个结构,类似于标题苍蝇内的SFR位结构,我已经在头文件中包含了一个例子,我和# 39; m在下面使用。

头文件允许使用类似于访问结构中元素的表示法来访问SFR中的位,例如U1STAbits.UTXBFuint16_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;

1 个答案:

答案 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;