OpenEdv-开源电子网

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

C语言文件包含一问

[复制链接]

11

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
128
金钱
128
注册时间
2017-8-28
在线时间
39 小时
发表于 2018-2-22 17:54:22 | 显示全部楼层 |阅读模式
1金钱
大家新年好,请问有亲们可以帮忙看看这个程序问题出在哪里,为什么会出现 .\Obj\HMI_M3DEMO.axf: Error: L6200E: Symbol i multiply defined (by a_driver.o and main.o). 的错误?
KEIL_DEMO_STM32.rar (1.8 MB, 下载次数: 37)

最佳答案

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

在a_driver.c和main.c中都有i这个全局变量,两个i重定义了。这个无法通过在a_driver.h中添加唯一编译宏来避免。 看了一下你的项目,发现你在头文件里定义了一个uint8 i;,在某个源文件里引用了外部全局变量i(比如在stm32f10x_it.c中有extern uint8 i;), 实际上你用反了,一般是在源文件(就是文件名xxxx.c的文件)中定义变量(比如此例中可以在a_driver.c中如下定义uint8 i;),然后在头文件(xxxx.h)中表明这个变量是外部变 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8024
金钱
8024
注册时间
2014-8-13
在线时间
1595 小时
发表于 2018-2-22 17:54:23 | 显示全部楼层
本帖最后由 mack13013 于 2018-2-22 18:42 编辑

在a_driver.c和main.c中都有i这个全局变量,两个i重定义了。这个无法通过在a_driver.h中添加唯一编译宏来避免。

看了一下你的项目,发现你在头文件里定义了一个uint8 i;,在某个源文件里引用了外部全局变量i(比如在stm32f10x_it.c中有extern uint8 i;),

实际上你用反了,一般是在源文件(就是文件名xxxx.c的文件)中定义变量(比如此例中可以在a_driver.c中如下定义uint8 i;),然后在头文件(xxxx.h)中表明这个变量是外部变量(本例中可在a_driver.h中做extern uint8 i;声明),
然后在任何一个用到全局变量的源文件(比如main.c文件)中只要包含头文件(本例中a_driver.h)即可使用全局变量(本例中的i)。
回复

使用道具 举报

11

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
128
金钱
128
注册时间
2017-8-28
在线时间
39 小时
 楼主| 发表于 2018-2-22 18:44:04 | 显示全部楼层
这个编译器是有说明,只有一个i在a_driver.c中,main里面应该没有i变量,那个i是在stm32f10x_it.c中,但是已经声明为extern了,所以推测是文件包含的问题。只是不知道是哪里出现问题了 。。。
回复

使用道具 举报

11

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
128
金钱
128
注册时间
2017-8-28
在线时间
39 小时
 楼主| 发表于 2018-2-22 18:59:31 | 显示全部楼层
mack13013 发表于 2018-2-22 18:27
在a_driver.c和main.c中都有i这个全局变量,两个i重定义了。这个无法通过在a_driver.h中添加唯一编译宏来避 ...

原来是这样。。。我把a_driver.h里面的变量i搬到a_driver.c就没有问题了,哈,谢谢你,我会再想想是哪些概念搞错了。。。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 15:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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