我的github: https://github.com/WHJWNAVY

C语言 struct 位域

嵌入式编程 WHJWNAVY 69℃ 0评论






c语言 struct 位域

测试示例

#include <stdio.h>
#include <stdint.h>

typedef union phy_reg_s
{
    struct
    {
        uint16_t  :6;
        uint16_t  SpeedSelection1:1;
        uint16_t  CollisionTest:1;
        uint16_t  DuplexMode:1;
        uint16_t  RestartAutoNegotiation:1;
        uint16_t  Isolate:1;
        uint16_t  PowerDown:1;
        uint16_t  AutoNegotiationEnable:1;
        uint16_t  SpeedSelection0:1;
        uint16_t  Loopback:1;
        uint16_t  Reset:1;
    } phy_bit;

    uint16_t phy_reg;
} phy_reg_t;

int main(void)
{
    phy_reg_t phy;
    //unsigned* pphy = (unsigned*)&phy;
    //phy.phy_bit.Reserved = 0x0;
    phy.phy_bit.SpeedSelection1 = 1;
    phy.phy_bit.CollisionTest = 0;
    phy.phy_bit.DuplexMode = 1;
    phy.phy_bit.RestartAutoNegotiation = 0;
    phy.phy_bit.Isolate = 0;
    phy.phy_bit.PowerDown = 0;
    phy.phy_bit.AutoNegotiationEnable = 1;
    phy.phy_bit.SpeedSelection0 = 0;
    phy.phy_bit.Loopback = 0;
    phy.phy_bit.Reset = 0;
    
    printf("phyreg = 0x%04x,sizeof(phy_reg_t) = %d\n", /*(unsigned)(*pphy)*/phy.phy_reg, sizeof(phy_reg_t));
}

output

phyreg = 0x1140,sizeof(phy_reg_t) = 2

参考资料

C/C++位域知识小结
C语言中的位域


转载请注明:胡椒小兄弟 » C语言 struct 位域

喜欢 (0)or分享 (0)

您必须 登录 才能发表评论!