打印
[开发工具]

在头文件中声明BIT变量

[复制链接]
6692|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nemogg|  楼主 | 2014-3-23 19:24 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
在MALAB中需要在头文件中声明BIT变量,但是好像"BIT" 根本不认,所以就没办法声明变量,编译出错,但是在.C源文件里做同样声明就没有这个问题。 请问是什么回事?
沙发
jinyin986| | 2014-3-23 21:12 | 只看该作者
楼主在头文件里到底是定义变量还是声明(extern)变量。有些PIC单片机可以定义bit变量的,但是在头文件里是不能定义变量的。

使用特权

评论回复
板凳
nemogg|  楼主 | 2014-3-23 21:38 | 只看该作者
jinyin986 发表于 2014-3-23 21:12
楼主在头文件里到底是定义变量还是声明(extern)变量。有些PIC单片机可以定义bit变量的,但是在头文件里是 ...

没有在头文件里定义,只是声明:extern bit aaa;

正常bit应该会变成蓝色,但是在头文件里没有有变成蓝色,表示系统根本就不认为在声明aaa这个变量。

如果把bit换成char, char就变成蓝色了。
在带mian() 的.c文件里用 extern bit aaa;声明又没有问题。。。感觉很奇怪。

使用特权

评论回复
地板
ayb_ice| | 2014-3-25 11:24 | 只看该作者
// x.c

#define __x_c
#include "x.h"

// y.c
#include "x.h"

...

// x.h
#ifdef __x_c
    bit my_flag;
#else
    extern bit my_flag;
#endif
...

使用特权

评论回复
5
nemogg|  楼主 | 2014-3-25 14:47 | 只看该作者
ayb_ice 发表于 2014-3-25 11:24
// x.c

#define __x_c

谢谢。
请问X.C里的#define __X_C有什么意义?y.c文件里为什么不需要?

按照你的程序敲就去但是那个“bit"还是显示unable to resolve idnetifier bit(如图)。 请问这是MPLAB的设置问题吗?

截图00.jpg (21.57 KB )

截图00.jpg

使用特权

评论回复
6
lgnativs| | 2014-3-25 15:00 | 只看该作者
C51语言没有位类型

unsigned char bdata byte;  //一个存放在51可位寻址RAM区的变量;
sbit b0 = byte^0;          //指定b0为此变量的第0位;
sbit b1 = byte^1;

C51的写法,给你参考.

使用特权

评论回复
7
ayb_ice| | 2014-3-25 15:42 | 只看该作者
nemogg 发表于 2014-3-25 14:47
谢谢。
请问X.C里的#define __X_C有什么意义?y.c文件里为什么不需要?

看清楚字再说

使用特权

评论回复
8
nemogg|  楼主 | 2014-3-25 16:13 | 只看该作者
lgnativs 发表于 2014-3-25 15:00
C51语言没有位类型

unsigned char bdata byte;  //一个存放在51可位寻址RAM区的变量;

xc8是支持bit类型的。
在.c里声明bit就不会出现这个问题。不知道为什么在头文件里声明就这样了。

使用特权

评论回复
9
nemogg|  楼主 | 2014-3-25 16:16 | 只看该作者
ayb_ice 发表于 2014-3-25 15:42
看清楚字再说

:dizzy:不是很懂你的意思
// x.c

#define __x_c  我想问这条语句是有什么用的。
#include "x.h"

// y.c
#include "x.h"

...

// x.h
#ifdef __x_c
    bit my_flag;
#else
    extern bit my_flag;
#endif
...

使用特权

评论回复
10
加油吧小鱼儿| | 2014-3-25 16:31 | 只看该作者
本帖最后由 加油吧小鱼儿 于 2014-3-25 16:35 编辑
nemogg 发表于 2014-3-25 16:16
不是很懂你的意思
// x.c

这是固定的格式吧,很多代码都有,包括PIC的模板里面也是!

使用特权

评论回复
11
ayb_ice| | 2014-3-25 17:08 | 只看该作者
nemogg 发表于 2014-3-25 16:16
不是很懂你的意思
// x.c

传递消息用的

可以在头文件中判断此宏,如果定义了表示此头文件被某个C包含...

使用特权

评论回复
12
jinyin986| | 2014-3-25 19:40 | 只看该作者
本帖最后由 jinyin986 于 2014-3-25 19:45 编辑
nemogg 发表于 2014-3-23 21:38
没有在头文件里定义,只是声明:extern bit aaa;

正常bit应该会变成蓝色,但是在头文件里没有有变成蓝色 ...


并不是所有的PIC单片机支持bit格式的,PIC18F系列有支持的,我用过的好像是PIC18F6490,这个貌似就可以用bit定义位变量

1111.jpg (18.92 KB )

1111.jpg

使用特权

评论回复
13
nemogg|  楼主 | 2014-3-26 22:58 | 只看该作者
jinyin986 发表于 2014-3-25 19:40
并不是所有的PIC单片机支持bit格式的,PIC18F系列有支持的,我用过的好像是PIC18F6490,这个貌似就可以用 ...

我在main()所在的.c文件是可以声明bit变量的,但是在头文件里不能,不知道什么原因。

使用特权

评论回复
14
jinyin986| | 2014-3-28 18:12 | 只看该作者
在头文件(XX.H)里同样可以定义的,只是定义变量不建议放在头文件里,以免头文件被多个.C调用时候,出现变量重复定义。

111111.jpg (28.11 KB )

111111.jpg

使用特权

评论回复
15
nemogg|  楼主 | 2014-3-28 21:35 | 只看该作者
jinyin986 发表于 2014-3-28 18:12
在头文件(XX.H)里同样可以定义的,只是定义变量不建议放在头文件里,以免头文件被多个.C调用时候,出现变 ...

是呀,我不是想在头文件里定义,我只是想在头文件里声明变量。正常应该只是是在头文件里声明吧?

我的问题是“bit" 根本不能在头文件里做声明,这是MPLAB里设置的问题导致的吗?

使用特权

评论回复
16
jinyin986| | 2014-3-29 18:04 | 只看该作者
nemogg 发表于 2014-3-28 21:35
是呀,我不是想在头文件里定义,我只是想在头文件里声明变量。正常应该只是是在头文件里声明吧?

我的问 ...


你用的是哪个版本的PICC  ,什么型号的PIC芯片?

使用特权

评论回复
17
nemogg|  楼主 | 2014-3-30 13:52 | 只看该作者
jinyin986 发表于 2014-3-29 18:04
你用的是哪个版本的PICC  ,什么型号的PIC芯片?

不是用PICC,我用的是XC8 1.21的。芯片是PIC18F46K22

使用特权

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

本版积分规则

7

主题

48

帖子

0

粉丝