打印
[PIC®/AVR®/dsPIC®产品]

C语言自带头文件中位域定义的疑问

[复制链接]
2301|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xxqg1|  楼主 | 2015-9-11 09:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 xxqg1 于 2015-9-11 14:47 编辑

本人刚刚接触PIC,用的是MAPLAB X IDE V3.05开发环境,XC8编译器。
头文件<PIC16F616.H>中有这么一段定义:
typedef union {
    struct {
        unsigned RA0                    :1;
        unsigned RA1                    :1;
        unsigned RA2                    :1;
        unsigned RA3                    :1;
        unsigned RA4                    :1;
        unsigned RA5                    :1;
    };
} PORTAbits_t;
extern volatile PORTAbits_t PORTAbits @ 0x005;
// bitfield macros
#define _PORTA_RA0_POSN                                     0x0
#define _PORTA_RA0_POSITION                                 0x0
#define _PORTA_RA0_SIZE                                     0x1
#define _PORTA_RA0_LENGTH                                   0x1
#define _PORTA_RA0_MASK                                     0x1

第一个问题:为什么联合体中的结构体不定义名字,使用方式PORTAbits.RA5=1;编译会有unable to resolve identifier RA5;“无法解析标识符RA5”的提示,但是下载使用没有异常。一旦给联合体中的结构体命名如PAA,使用方法PORTAbits.PAA.RA5=1;编译没有任何提示,使用正常。我的第一个用法是不是有问题?
第二个问题:在头文件中“#define _PORTA_RA0_POSN  0x0”这些define都是用来做什么的,什么时候使用?
麻烦大师们解惑,度娘表示无力。
沙发
xxqg1|  楼主 | 2015-9-11 12:55 | 只看该作者
各路大神呢。。新手求指导

使用特权

评论回复
板凳
hnkf118| | 2015-9-11 13:33 | 只看该作者
你明申明有限编译器不支持

使用特权

评论回复
地板
xxqg1|  楼主 | 2015-9-11 13:51 | 只看该作者
本帖最后由 xxqg1 于 2015-9-11 14:48 编辑

找到问题了,已经OK

使用特权

评论回复
5
hwt1990114| | 2015-9-11 16:48 | 只看该作者
既然问题找到了,说一下,让我们也了解一下

使用特权

评论回复
6
jianghuawz| | 2015-11-4 15:39 | 只看该作者
同样疑惑,能否分享下心得啊

使用特权

评论回复
7
gordon85| | 2016-7-1 10:26 | 只看该作者
为什么联合体中的结构体不定义名字,使用方式PORTAbits.RA5=1            

有没有定义名字都一样,如果定义了,反而编程时又要多写一个结构体名。联合体.结构体.位名。
PORTAbits.RA5=1 ;没有问题 。

使用特权

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

本版积分规则

15

主题

39

帖子

1

粉丝