牛卧堂MCU技术交流

标题: 结构体问题 [打印本页]

作者: wanga87    时间: 2015-12-17 16:04
标题: 结构体问题
typedef struct
{
    union
    {
        __IO uint32_t u32ISPCON;

        struct
        {
            __IO uint32_t  ISPEN:1;
            __IO uint32_t  BS:1;
                __I  uint32_t  RESERVE0:2;
            __IO uint32_t  CFGUEN:1;
                __IO uint32_t  LDUEN:1;
            __IO uint32_t  ISPFF:1;
            __IO uint32_t  SWRST:1;
            __IO uint32_t  PT:3;
                __I  uint32_t  RESERVE1:1;
                __IO uint32_t  ET:3;
            __I  uint32_t  RESERVE2:17;
        } ISPCON;
    };

    union
    {
        __IO uint32_t u32ISPADR;
        __IO uint32_t ISPADR;
    };

    union
    {
        __IO uint32_t u32ISPDAT;
        __IO uint32_t ISPDAT;
    };

    union
    {
        __IO uint32_t u32ISPCMD;

        struct
        {
            __IO uint32_t  FCTRL:4;
            __IO uint32_t  FCEN:1;
            __IO uint32_t  FOEN:1;
            __I  uint32_t  RESERVE:26;
        } ISPCMD;
    };

    union
    {
        __I uint32_t u32ISPTRG;

        struct
        {
            __IO uint32_t  ISPGO:1;
            __I  uint32_t  RESERVE:31;
        } ISPTRG;
    };

    union
    {
        __I uint32_t u32DFBADR;
        __I uint32_t DFBADR;
    };

    union
    {
        __IO uint32_t u32FATCON;

        struct
        {
            __IO uint32_t  FPSEN:1;
            __IO uint32_t  FATS:3;
            __IO uint32_t  LFOM:1;
            __I  uint32_t  RESERVE:27;
        } FATCON;
    };
} FMC_T;
结构体里面包含联合体,但是联合体却没有命名,后面就像下面一样引用了!if (FMC->ISPCON.ISPFF == 1)
    {
        FMC->ISPCON.ISPFF = 1;
        return E_DRVFMC_ERR_ISP_FAIL;
    }    以上都是新塘库内提供的程序!虽然我看着有问题,但是在库内编译确实是没有问题!

为什么我照着这种结构来编译器却让我给联合体取个名字?   我想知道源程序是怎么通过的!


作者: CHLIN55    时间: 2015-12-18 21:08
這種結構應該是舊版BSP使用的,
建議樓主參考BSP CMSIS 3.00以後版本的寫法比較好.
作者: wanga87    时间: 2015-12-23 10:07
我知道是旧版的,我就是想知道一开始他是怎么通过编译的,研究一下他的程序写法!
作者: szgaos    时间: 2016-3-2 09:13
这个是常规用法,不知你用iar还是mdk,在iar中好用一点
作者: andrewz    时间: 2016-3-2 15:45
没看过这样的结构体.
一般用我都会给它先取名字.
不然我自己会看不懂.




欢迎光临 牛卧堂MCU技术交流 (http://www.nuvoton-mcu.com/) Powered by Discuz! X3.2