OpenEdv-开源电子网

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

关于使用Keil编译器显示 Symbol asc2_2412 multiply defined的问题

[复制链接]

1

主题

6

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2017-4-11
在线时间
3 小时
发表于 2017-4-11 18:47:35 | 显示全部楼层 |阅读模式
11金钱
本帖最后由 costimen 于 2017-4-11 20:29 编辑

论坛的大哥大姐们:小弟接触STM32不久,在刚刚使用Keil编译器进行程序编译时出现了下面的问题,希望大哥大姐们给予解答。。。我下面写的有点絮絮叨叨
..\OBJ\DHT11.axf: Error: L6200E: Symbol asc2_1206 multiply defined (by led.o and main.o).
..\OBJ\DHT11.axf: Error: L6200E: Symbol asc2_1206 multiply defined (by key.o and main.o).
..\OBJ\DHT11.axf: Error: L6200E: Symbol asc2_1206 multiply defined (by lcd.o and main.o).
这种的错误报了很多个。。
我看了一下网上的说法,在咱们论坛上就有解释说重复包含或定义了,可是我在每个头文件里面都加上了条件编译,应该没有重复包含的问题啊……

我说一下我错误的流程。。
led.c文件,基本都是例程的程序
#include "led.h"

//初始化PB5和PE5为输出口.并使能这两个口的时钟            
//LED IO初始化
void LED_Init(void)
{

GPIO_InitTypeDef  GPIO_InitStructure;
     
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);     //使能PB,PE端口时钟
   
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;                 //LED0-->B.5 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;          //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         //IO口速度为50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure);                     //根据设定参数初始化GPIOB.5
GPIO_SetBits(GPIOB,GPIO_Pin_5);                         //PB.5 输出高

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;                 //LED1-->E.5 端口配置, 推挽输出
GPIO_Init(GPIOE, &GPIO_InitStructure);                       //推挽输出 ,IO口速度为50MHz
GPIO_SetBits(GPIOE,GPIO_Pin_5);                          //PE.5 输出高
}

这个就是例程里面的程序,
下面是led.h
#ifndef __LED_H
#define __LED_H     
#include "var.h"

#define LED0 PBout(5)// PB5
#define LED1 PEout(5)// PE5   

void LED_Init(void);//初始化                                

#endif

这个也是例程里面的,只不过我把所有的包含的头文件都放到了var.h里面,这样写程序看起来好看一点。。。

var.h
#ifndef __VAR_H
#define __VAR_H

#include "stm32f10x.h"
#include "stdio.h"
#include "stdlib.h"
#include "font.h"
#include "sys.h"

#include "led.h"
#include "key.h"
#include "lcd.h"
#include "rec.h"
#include "usart.h"
#include "delay.h"

#endif


main.c

#include "var.h"

int main(void)
{
    ……
}
以上就是我改动的部分了,我程序就是在咱们给的例程上面更改的,只不过让我改坏了。。希望热心的吧友能给予解答。。刚注册的号,金币就这些啦,,
要是需要程序文件我再上传、、、、

最佳答案

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

不要瞎搞。.h里面的类容编译的时候是完完整整考进去的。你么搞肯定重复定义啊。帮你改了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

41

主题

242

帖子

0

精华

高级会员

Rank: 4

积分
523
金钱
523
注册时间
2016-1-11
在线时间
132 小时
发表于 2017-4-11 18:47:36 | 显示全部楼层
不要瞎搞。.h里面的类容编译的时候是完完整整考进去的。你么搞肯定重复定义啊。帮你改了。

实验31 DHT11数字温湿度传感器实验.zip

7.3 MB, 下载次数: 440

回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2017-4-11 20:12:08 | 显示全部楼层
有东西重复定义了
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2017-4-11
在线时间
3 小时
 楼主| 发表于 2017-4-11 20:23:01 | 显示全部楼层
zuozhongkai 发表于 2017-4-11 20:12
有东西重复定义了

里面定义的变量都在.c文件里面啊~
.h里面用到的都是加了extern声明的。。
要不你帮我看看

实验31 DHT11数字温湿度传感器实验.rar

297.18 KB, 下载次数: 177

代码。。

回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2017-4-11
在线时间
3 小时
 楼主| 发表于 2017-4-12 14:23:39 来自手机 | 显示全部楼层
有没有大哥帮忙看看啊……
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2017-4-11
在线时间
3 小时
 楼主| 发表于 2017-4-17 15:55:18 来自手机 | 显示全部楼层
@正点原子 原子哥帮忙看看啊
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2017-4-11
在线时间
3 小时
 楼主| 发表于 2017-4-17 16:47:35 | 显示全部楼层
沧海 发表于 2017-4-17 16:28
不要瞎搞。.h里面的类容编译的时候是完完整整考进去的。你么搞肯定重复定义啊。帮你改了。

啊谢谢哥……我之前用一个STM32F0的模板,不是咱们正点原子的,我把那些头文件的调用都放到那个文件var.h里面了,那次好像能用……不过那次的代码让我弄丢了,话说我在每个.h文件里面都使用了条件编译,那样在进行编译时应该不会多次重复定义啊
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2018-5-10
在线时间
9 小时
发表于 2018-7-13 10:51:46 | 显示全部楼层
我也是这种情况,在变量之前加了Static 就好了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-25 09:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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