打印
[开发工具]

请教,头文件定义的联合体不能使用

[复制链接]
2478|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nemogg|  楼主 | 2014-11-9 22:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
感觉这是个很初级的问题,不知道为什么标准的头文件里定义的联合体根本不能使用。
比如我这样:
PSTR1CONbits_t.STR1A=1;

就会报“main.c:95: error: (285) no identifier in declaration” 这样的错误。
查了单片机的头文件p18lf46k22.h里明明是有PSTR1CONbits的定义,而且同是在p18lf46k22.h定义的PSTR1CON 直接用就一点问题都没有。

不知道是什么原因呢?高手请指点
沙发
wangch_sh| | 2014-11-10 12:44 | 只看该作者
PSTR1CONbits_t
一摸一样吗?
STR1A这一位有没有定义?

使用特权

评论回复
板凳
nemogg|  楼主 | 2014-11-10 14:11 | 只看该作者
// bitfield definitions
typedef union {
    struct {
        unsigned STR1A                  :1;
        unsigned STR1B                  :1;
        unsigned STR1C                  :1;
        unsigned STR1D                  :1;
        unsigned STR1SYNC               :1;
    };
    struct {
        unsigned STRA                   :1;
    };
    struct {
        unsigned                        :1;
        unsigned STRB                   :1;
    };
    struct {
        unsigned                        :2;
        unsigned STRC                   :1;
    };
    struct {
        unsigned                        :3;
        unsigned STRD                   :1;
    };
    struct {
        unsigned                        :4;
        unsigned STRSYNC                :1;
    };
} PSTR1CONbits_t;
extern volatile PSTR1CONbits_t PSTR1CONbits @ 0xFB9;
这是声明的地方。
后来发现PSTR1CONbits可以用了(就是把_t去掉)。
有谁知道最后一行是什么作用吗?

使用特权

评论回复
地板
nemogg|  楼主 | 2014-11-10 14:17 | 只看该作者
wangch_sh 发表于 2014-11-10 12:44
PSTR1CONbits_t
一摸一样吗?
STR1A这一位有没有定义?

STR1A有定义,不过这是单独的定义的。

extern volatile __bit                   STR1A               @ (((unsigned) &PSTR1CON)*8) + 0;

使用特权

评论回复
5
lanmp| | 2014-11-10 14:53 | 只看该作者
LIB_BUILD定义了么?

使用特权

评论回复
6
flylike| | 2014-11-10 14:59 | 只看该作者
本帖最后由 flylike 于 2014-11-10 15:13 编辑

初级问题,PSTR1CONbits_t是一个类型
PSTR1CONbits这个才是变量

这个说法好像也有点问题。:D

使用特权

评论回复
7
nemogg|  楼主 | 2014-11-10 15:35 | 只看该作者
lanmp 发表于 2014-11-10 14:53
LIB_BUILD定义了么?

这个定义有什么用的?

使用特权

评论回复
8
nemogg|  楼主 | 2014-11-10 15:37 | 只看该作者
flylike 发表于 2014-11-10 14:59
初级问题,PSTR1CONbits_t是一个类型
PSTR1CONbits这个才是变量

哦,终于明白了。。。。学习了,谢谢。

使用特权

评论回复
9
nemogg|  楼主 | 2014-11-10 15:38 | 只看该作者
本帖最后由 nemogg 于 2014-11-10 15:41 编辑
flylike 发表于 2014-11-10 14:59
初级问题,PSTR1CONbits_t是一个类型
PSTR1CONbits这个才是变量

其实定义那个类型有什么用处呢,为什么不直接定义变量。

使用特权

评论回复
10
flylike| | 2014-11-10 15:47 | 只看该作者
这个就是位域结构体,MCHP的有些编译器不支持直接的位定义。

另外我之前说的有点不太对,那个PSTR1CONbits_t是一个名字或者代号,代替那个共用体类型。
最有一句就是定义外部变量

使用特权

评论回复
11
flylike| | 2014-11-10 15:51 | 只看该作者
俺也是初学者,以后多多交流。

使用特权

评论回复
12
misra| | 2014-11-10 18:15 | 只看该作者
联合体不初级,

使用特权

评论回复
13
yewuyi| | 2014-11-11 10:05 | 只看该作者
PSTR1CONbits_t对应的是它定义的第一行中那个关键字typedef union 。

你知道typedef是干啥用的么?

使用特权

评论回复
14
nemogg|  楼主 | 2014-11-18 16:21 | 只看该作者
这没注意看前面用了TYPEDEF了,所以最后一行也没看懂。。。现在豁然开朗:lol

使用特权

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

本版积分规则

7

主题

48

帖子

0

粉丝