REFERENCE MADE TO UNRESOLVED EXTERNAL... 紧急求救!

suuare 2005-12-12 10:42:47
工程中存在2个文件 main.c store.c 和 ctr10.h
ctr10.h中定义了两个特殊寄存器和一个数组变量
sbit WDI = P1^0;
sbit SDA = P1^2;
unsigned char buff[10];
在main.c中包含此库文件:
#include <ctr10.H>
这样,在main.c的任何地方调用这三个变量都不成问题。
当问题随之而来,当加入store.c为模块文件后,怎样调用 WDI和SDA呢?我发现无论在store.c中加入extern unsigned char buff[10-]; 这样buff就可以用了,到加上extern bit SDA或者extern SDA都不行!难道位变量不能用extern 来声明吗? 在线等.
年底了,先祝大家工作顺利,身体健康!
...全文
3209 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodluckyxl 2005-12-12
  • 打赏
  • 举报
回复
我发现无论在store.c中加入extern unsigned char buff[10-]; 这样buff就可以用了,到加上extern bit SDA或者extern SDA都不行!难道位变量不能用extern 来声明吗? 在线等.

//首先你要让你使用该变量的文件要识别变量类型
//必须把变量类型定义扩进来
//然后把变量extern进来
tyj_3 2005-12-12
  • 打赏
  • 举报
回复
在main.c中包含了ctr10.H,store.c文件中不要再包含ctr10.H了
还可以用下面的预处理命令
#ifndef
........
#endif
避免多重定义
flowercity 2005-12-12
  • 打赏
  • 举报
回复
用宏定义解决重复定义的问题
你不会在"ctr10.H"包含reg52.h啊
suuare 2005-12-12
  • 打赏
  • 举报
回复
这个办法我也试了,这样引用的结果是必须在store.c再次包含reg52.h 否则,store.c将不知道P1、P2是什么。编译后错误就是多重定义....
tyj_3 2005-12-12
  • 打赏
  • 举报
回复
难道位变量不能用extern 来声明吗?
--------------------------------
好像定义的位都存储在寄存器中
实在不行就将ctr10.h包含到store.c中
在main.c 中
#include "ctr10.H"
#include "store.c"
就可以使用ctr10.H中的变量了

27,383

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧