OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4594|回复: 10

求助

[复制链接]

20

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2014-10-15
在线时间
17 小时
发表于 2015-2-25 16:58:29 | 显示全部楼层 |阅读模式
5金钱
求助   在做串口试验时  为什么我定义的变量放在main中才能够编译成功   而放在.H中提示 Error: L6200E: Symbol USART_RX_BUF multiply defined ().

最佳答案

查看完整内容[请看2#楼]

变量直接定义在.h里如果.h在多处引用就会导致重复定义变量 如果某个功能固定会用到某变量就在.c里定义变量就是int n;.h里做引用声明也就是extern int n;
敢于挑战
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

16

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
239
金钱
239
注册时间
2013-6-7
在线时间
6 小时
发表于 2015-2-25 16:58:30 | 显示全部楼层
变量直接定义在.h里如果.h在多处引用就会导致重复定义变量
如果某个功能固定会用到某变量就在.c里定义变量就是int n;.h里做引用声明也就是extern int n;
回复

使用道具 举报

20

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2014-10-15
在线时间
17 小时
 楼主| 发表于 2015-2-25 17:05:10 | 显示全部楼层
我定义的变量我的主函数
敢于挑战
回复

使用道具 举报

16

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
239
金钱
239
注册时间
2013-6-7
在线时间
6 小时
发表于 2015-2-25 17:12:40 | 显示全部楼层
比如:
应该在uart.c里定义u8 USART_RX_BUF[3]={},t;
uart.h里定义extern u8 USART_RX_BUF[3]={},t;
这样引用过uart.h的文件都可以用USART_RX_BUF和t变量
回复

使用道具 举报

16

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
239
金钱
239
注册时间
2013-6-7
在线时间
6 小时
发表于 2015-2-25 17:16:21 | 显示全部楼层
重复定义错误提示后面会写错误出现在那两个文件里,
一般可以分别在两个.c文件里搜索冲突的Symbol,或者是两者共同引用的.h中
回复

使用道具 举报

20

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2014-10-15
在线时间
17 小时
 楼主| 发表于 2015-2-25 17:26:27 | 显示全部楼层
回复【4楼】insect50:
---------------------------------
这个变量在.c中用不到  可以直接把 u8 USART_RX_BUF[3]={0x01,0x02,0x03};    u8 t;写在.H中吧    但是写了也错误  不知道是哪错了
 谢谢大师
敢于挑战
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13135
金钱
13135
注册时间
2012-11-26
在线时间
3814 小时
发表于 2015-2-25 17:46:44 | 显示全部楼层
extern 不可做初始化!!
学无止境
回复

使用道具 举报

16

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
239
金钱
239
注册时间
2013-6-7
在线时间
6 小时
发表于 2015-2-25 17:51:42 | 显示全部楼层
反正变量一般是不会在.h定义的,.h里只做引用声明extern 
在.c里声明变量如果要在其他文件里使用就加引用声明或在.h里引用声明并引用.h文件
回复

使用道具 举报

20

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2014-10-15
在线时间
17 小时
 楼主| 发表于 2015-2-25 18:33:48 | 显示全部楼层
回复【8楼】insect50:
---------------------------------
比如: 
应该在uart.c里定义u8 USART_RX_BUF[3]={},t; 
uart.h里定义extern u8 USART_RX_BUF[3]={},t; 
这样引用过uart.h的文件都可以用USART_RX_BUF和t变量
                                                                                        我这样做了  为什么错误提示变量已经初始化过?  求解
敢于挑战
回复

使用道具 举报

16

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
239
金钱
239
注册时间
2013-6-7
在线时间
6 小时
发表于 2015-2-25 19:07:40 | 显示全部楼层
ctrl+f 搜索下哪里重复了
回复

使用道具 举报

20

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2014-10-15
在线时间
17 小时
 楼主| 发表于 2015-2-25 19:29:05 | 显示全部楼层
是uart.h与uart.c重复了
敢于挑战
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-25 19:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表