OpenEdv-开源电子网

标题: 关于使用Keil编译器显示 Symbol asc2_2412 multiply defined的问题 [打印本页]

作者: costimen    时间: 2017-4-11 18:47
标题: 关于使用Keil编译器显示 Symbol asc2_2412 multiply defined的问题
本帖最后由 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)
{
    ……
}
以上就是我改动的部分了,我程序就是在咱们给的例程上面更改的,只不过让我改坏了。。希望热心的吧友能给予解答。。刚注册的号,金币就这些啦,,
要是需要程序文件我再上传、、、、


作者: 沧海    时间: 2017-4-11 18:47
不要瞎搞。.h里面的类容编译的时候是完完整整考进去的。你么搞肯定重复定义啊。帮你改了。
作者: zuozhongkai    时间: 2017-4-11 20:12
有东西重复定义了
作者: costimen    时间: 2017-4-11 20:23
zuozhongkai 发表于 2017-4-11 20:12
有东西重复定义了

里面定义的变量都在.c文件里面啊~
.h里面用到的都是加了extern声明的。。
要不你帮我看看
作者: costimen    时间: 2017-4-12 14:23
有没有大哥帮忙看看啊……
作者: costimen    时间: 2017-4-17 15:55
@正点原子 原子哥帮忙看看啊
作者: costimen    时间: 2017-4-17 16:47
沧海 发表于 2017-4-17 16:28
不要瞎搞。.h里面的类容编译的时候是完完整整考进去的。你么搞肯定重复定义啊。帮你改了。

啊谢谢哥……我之前用一个STM32F0的模板,不是咱们正点原子的,我把那些头文件的调用都放到那个文件var.h里面了,那次好像能用……不过那次的代码让我弄丢了,话说我在每个.h文件里面都使用了条件编译,那样在进行编译时应该不会多次重复定义啊
作者: STM学者    时间: 2018-7-13 10:51
我也是这种情况,在变量之前加了Static 就好了




欢迎光临 OpenEdv-开源电子网 (http://47.111.11.73/) Powered by Discuz! X3.4