打印

PICC18中定义一个即能按位使用又能字节使用的变量出现问题

[复制链接]
1698|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kknd1573|  楼主 | 2015-7-22 12:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在PICC18 9.60 中试图一定一个即能按位使用又能字节使用的变量,但是编译器提示错误。不知道为什么。
源代码是网上公开的程序段。如果没有最后两行变量赋值,编译器是能够通过的。但是赋值语句一出现,编译器就报错了。

typedef struct
{
   unsigned BIT0: 1;
   unsigned BIT1: 1;
   unsigned BIT2: 1;
   unsigned BIT3: 1;
   unsigned BIT4: 1;
   unsigned BIT5: 1;
   unsigned BIT6: 1;
   unsigned BIT7: 1;
}PICCBIT;//定义一个只能按位域寻址的新变量类型
typedef union
{
   PICCBIT BIT;//可以按位域寻址
   unsigned char BYTE;//可以按字节寻址
}PICCBITBYTE;//定义一个既能按位域寻址也可按字节寻址的新变量类型
    //定义任意寄存器位类型
PICCBIT myvarbit;
    //申请一个新变量类型PICCBIT名称为myvarbit,地址由PICC自动定位
PICCBITBYTE myvarbyte;
    //申请一个新变量类型PICCBITBYTE名称为myvarbyte,地址由PICC自动定位
myvarbyte.BYTE = 0x55;                            //76行
myvarbyte.BIT.BIT0 = PORTBbits.RB7;        //77行


编译器信息:
Warning at file ../main.c line 76 column 10: (374) missing basic type; int assumed
Error at file ../main.c line 76 column 10: (984) type redeclared
Error at file ../main.c line 76 column 10: (1098) conflicting declarations for variable "myvarbyte" (../main.c:74)
Error at file ../main.c line 76 column 10: (314) ";" expected
Warning at file ../main.c line 77 column 10: (374) missing basic type; int assumed
Error at file ../main.c line 77 column 10: (984) type redeclared
Error at file ../main.c line 77 column 10: (1098) conflicting declarations for variable "myvarbyte" (../main.c:76)
Error at file ../main.c line 77 column 10: (314) ";" expected
make: *** [main.p1] Error 1
Error code 2

沙发
kknd1573|  楼主 | 2015-7-24 22:18 | 只看该作者
有高手能告诉我是怎么回事情么?大侠们~~

使用特权

评论回复
板凳
moneng| | 2015-7-30 00:38 | 只看该作者

typedef union
{
    struct
    {
        uint8 Led0          :1;
        uint8 Led1          :1;
        uint8 Led2          :1;
        uint8 Led3          :1;
        
        uint8 Key0          :1;
        uint8 Key1          :1;
        uint8 Key2          :1;
        uint8 Key3          :1;
        
        uint8 KeyStatus0    :1;
        uint8 KeyStatus1    :1;
        uint8 KeyStatus2    :1;
        uint8 KeyStatus3    :1;

    } ;
    struct
    {
        uint8 Led           :4;
        uint8 Key           :4;
        uint8 KeyStatus     :4;
    } ;
} TouchKeyStruct;

TouchKeyStruct TouchKeyStatus;

extern TouchKeyStruct TouchKeyStatus;


我用这个能过!

使用特权

评论回复
地板
kknd1573|  楼主 | 2015-8-18 16:09 | 只看该作者
moneng 发表于 2015-7-30 00:38
我用这个能过!

不知道为啥,我的通过不了啊,怎么弄都不行。你用的是哪个版本的编译器?是PICC18 9.63 么?

使用特权

评论回复
5
millenniumm| | 2015-8-23 11:54 | 只看该作者
把那些大写的bit和byte用别的字代替试试看

使用特权

评论回复
6
兰天白云| | 2015-8-24 11:39 | 只看该作者
楼主,你写的与3楼的完全不同,你按他的试试?

使用特权

评论回复
7
moneng| | 2015-12-1 16:57 | 只看该作者
kknd1573 发表于 2015-8-18 16:09
不知道为啥,我的通过不了啊,怎么弄都不行。你用的是哪个版本的编译器?是PICC18 9.63 么? ...

MPLAB X IDE v3.05

使用特权

评论回复
8
moneng| | 2015-12-1 17:00 | 只看该作者
kknd1573 发表于 2015-8-18 16:09
不知道为啥,我的通过不了啊,怎么弄都不行。你用的是哪个版本的编译器?是PICC18 9.63 么? ...

uint8 是用 typedef 定义的

使用特权

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

本版积分规则

4

主题

31

帖子

0

粉丝