打印
[C语言]

在keil中使用结构体和联合体的问题.

[复制链接]
5451|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
原本的程序是在icc上写的,在avr单片机上使用无问题.但现在用其他芯片移植到keil里的时候发现结构体和联合体不能被其他的c文件使用.
我试了下在main.h里定义
typedef struct
{
  u8 Flag;
  u16 aa;
  u8 bb;
} aa_s;
typedef union
{
aa_s cc;
u8 dd[4];
}ee_u;
然后在man.c里定义 ee_u ee;时就出现如下的错误




然偶我又在main.c里定义上面的结构体和联合体,在main.c里能正常使用
但是我想被其他c文件使用时定义的时候就会出现如下错误,

请问下各位是什么问题引起的这个错误?要该如何解决呢?

相关帖子

沙发
heaven_xiyu|  楼主 | 2013-11-13 11:36 | 只看该作者
昨晚查了一晚上的资料 问题已解决

使用特权

评论回复
板凳
ayb_ice| | 2013-11-13 13:30 | 只看该作者
声明就可以了

使用特权

评论回复
地板
原野之狼| | 2013-11-13 13:43 | 只看该作者
heaven_xiyu 发表于 2013-11-13 11:36
昨晚查了一晚上的资料 问题已解决

也不讲讲是怎么解决的...

使用特权

评论回复
5
airwill| | 2013-11-13 20:57 | 只看该作者
是不是 main.c 里没有 include "main.h" 吧

使用特权

评论回复
6
伏尔加的鱼| | 2013-11-14 00:56 | 只看该作者
定义在头文件定义类型就行了

使用特权

评论回复
7
heaven_xiyu|  楼主 | 2013-11-14 16:10 | 只看该作者
原野之狼 发表于 2013-11-13 13:43
也不讲讲是怎么解决的...

是头文件的包含问题, 好像是重复包含了。

使用特权

评论回复
8
ballack_linux| | 2013-11-15 01:38 | 只看该作者
heaven_xiyu 发表于 2013-11-14 16:10
是头文件的包含问题, 好像是重复包含了。

不可能是重复包含的问题吧  重复包含报的错误不可能是未知的类型名

使用特权

评论回复
9
wanga87| | 2015-9-22 16:11 | 只看该作者
楼主我有个问题需要问一下:
下面程序是新塘提供的:
typedef 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;

} FMC_ISPCON_T;


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;
结构体是这样定义的,内部的union都没有名字,但是他是这样引用的:
    if (FMC->ISPCON.ISPFF == 1)
    {
        FMC->ISPCON.ISPFF = 1;
        return E_DRVFMC_ERR_ISP_FAIL;
    }
FMC的数据类型是(FMC_T *)
直接跳过寻找内部union的名字找到了内部的位域结构体,这是怎么个问题,我看不懂,求解答!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

144

主题

219

帖子

1

粉丝