打印

PIC24求教

[复制链接]
1116|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
求教大神们,如何使联合体或结构体内外都可以共用?意思就是说:比如我的base.h定义了一个结构体或联合体,我的base.c里能调用和main.c里能调用?
沙发
634686764|  楼主 | 2014-9-17 09:45 | 只看该作者
我上传了两张附件图,就是明明我从base.h定义了一个联合体,用extern外部声明了,结果在base.c和main.c还是用不了(包含了头文件),报错。(其实我只想用一个联合体关联我硬件中的锁存器base.c),然后通过外部文件main.c直接操纵联合体就能直接操作锁存器。

QQ截图20140917093919.jpg (619.23 KB )

QQ截图20140917093919.jpg

QQ截图20140917093946.jpg (750.81 KB )

QQ截图20140917093946.jpg

使用特权

评论回复
板凳
lcofjp| | 2014-9-17 12:41 | 只看该作者
把extern关键去掉应该就可以了。

使用特权

评论回复
地板
lcofjp| | 2014-9-17 12:45 | 只看该作者
去掉关键后也存在问题。
你应该这样做,首先在头文件中定义一个联合体类型。
然后在C文件中用这个类型定义一个变量。
然后在头文件中声明这个外部变量。

使用特权

评论回复
5
634686764|  楼主 | 2014-9-17 14:11 | 只看该作者
lcofjp 发表于 2014-9-17 12:45
去掉关键后也存在问题。
你应该这样做,首先在头文件中定义一个联合体类型。
然后在C文件中用这个类型定义 ...

你的意思是不是:我在base.h里先定义这个联合体union{......},然后在base.c中使用的时候再extern union{......};这样?

使用特权

评论回复
6
lcofjp| | 2014-9-17 16:15 | 只看该作者
634686764 发表于 2014-9-17 14:11
你的意思是不是:我在base.h里先定义这个联合体union{......},然后在base.c中使用的时候再extern union{ ...

我的意思是,在头文件中:

union typename{...};

extern union typename varname;


c文件中:(某个C文件中定义变量)
union typename varname;

这样,只要包含头文件的都可以使用此变量。

使用特权

评论回复
7
hlhfootbal| | 2014-9-17 17:39 | 只看该作者
在头文件中做声明;
在C文件中做定义;
要用这个联合体,就链接这个头文件。

使用特权

评论回复
8
634686764|  楼主 | 2014-9-18 10:35 | 只看该作者
hlhfootbal 发表于 2014-9-17 17:39
在头文件中做声明;
在C文件中做定义;
要用这个联合体,就链接这个头文件。 ...

你说的方法可以是可以,但是我想这样做:base.c里有一个中断会刷新联合体a的值,而在main.c里能共用联合体a的值,但你上述的方法是好像重新声明了一个联合体:base.c里有一个中断会刷新联合体a的值,而在main.c却是联合体b的值,其实我是想不管是base.c还是main.c都用一个联合体a和读取修改同一个联合体a那样子,希望高手能耐性回答,谢谢!

使用特权

评论回复
9
lcofjp| | 2014-9-18 16:24 | 只看该作者
634686764 发表于 2014-9-18 10:35
你说的方法可以是可以,但是我想这样做:base.c里有一个中断会刷新联合体a的值,而在main.c里能共用联合 ...

人家说的本来就是对的,你给人家扣个不对的帽子,你验证了吗,就说人家的做法不对。你还求高手帮你解答,高手帮你解答了还说不对,高手来了也只能这么说。要么你就别出来提问,找几本C语言的书好好学学基础。

使用特权

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

本版积分规则

1

主题

4

帖子

0

粉丝