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

[复制链接]
2060|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 | 显示全部楼层

  1. typedef union
  2. {
  3.     struct
  4.     {
  5.         uint8 Led0          :1;
  6.         uint8 Led1          :1;
  7.         uint8 Led2          :1;
  8.         uint8 Led3          :1;
  9.         
  10.         uint8 Key0          :1;
  11.         uint8 Key1          :1;
  12.         uint8 Key2          :1;
  13.         uint8 Key3          :1;
  14.         
  15.         uint8 KeyStatus0    :1;
  16.         uint8 KeyStatus1    :1;
  17.         uint8 KeyStatus2    :1;
  18.         uint8 KeyStatus3    :1;

  19.     } ;
  20.     struct
  21.     {
  22.         uint8 Led           :4;
  23.         uint8 Key           :4;
  24.         uint8 KeyStatus     :4;
  25.     } ;
  26. } TouchKeyStruct;

  27. TouchKeyStruct TouchKeyStatus;

  28. extern TouchKeyStruct TouchKeyStatus;


我用这个能过!
 楼主| kknd1573 发表于 2015-8-18 16:09 | 显示全部楼层
moneng 发表于 2015-7-30 00:38
我用这个能过!

不知道为啥,我的通过不了啊,怎么弄都不行。你用的是哪个版本的编译器?是PICC18 9.63 么?
millenniumm 发表于 2015-8-23 11:54 | 显示全部楼层
把那些大写的bit和byte用别的字代替试试看
兰天白云 发表于 2015-8-24 11:39 | 显示全部楼层
楼主,你写的与3楼的完全不同,你按他的试试?
moneng 发表于 2015-12-1 16:57 | 显示全部楼层
kknd1573 发表于 2015-8-18 16:09
不知道为啥,我的通过不了啊,怎么弄都不行。你用的是哪个版本的编译器?是PICC18 9.63 么? ...

MPLAB X IDE v3.05
moneng 发表于 2015-12-1 17:00 | 显示全部楼层
kknd1573 发表于 2015-8-18 16:09
不知道为啥,我的通过不了啊,怎么弄都不行。你用的是哪个版本的编译器?是PICC18 9.63 么? ...

uint8 是用 typedef 定义的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

31

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部