我正在尝试编译我的代码,但是尽管仅在一个标头中定义了变量,但仍收到错误“乘以定义”(例如,“。\ Objects \ LCDADC.axf:错误:L6200E:符号Pin_D6乘以定义(由lcd .o和main.o)。”。
我正在将Keil与LPC1768一起使用
main.c
#include <lpc17xx.h>
#include "LCD.h"
#include "Delay.h"
//Char LCD Pins
#define LCD_RS P2_0
#define LCD_RW P2_1
#define LCD_E P2_2
#define LCD_D4 P2_4
#define LCD_D5 P2_5
#define LCD_D6 P2_6
#define LCD_D7 P2_7
int main(){
SystemInit();
Delay_init();
LCD_Init(LCD_RS, LCD_RW, LCD_E, LCD_D4, LCD_D5, LCD_D6, LCD_D7);
int main....
LCD.H
#include "Delay.h"
uint8_t Pin_RS;
uint8_t Pin_RW;
uint8_t Pin_E;
uint8_t Pin_D4;
uint8_t Pin_D5;
uint8_t Pin_D6;
uint8_t Pin_D7;
void LCD_Init(uint8_t rs, uint8_t rw, uint8_t e, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
....(More functions)
LCD.c
#include "LCD.h"
#include "GPIO.h"
#include "Delay.h"
void LCD_Init(uint8_t rs, uint8_t rw, uint8_t e, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
{
//Set Pin Numbers
Pin_RW = rw;
Pin_E = e;
Pin_RS = rs;
Pin_D4 = d4;
Pin_D5 = d5;
Pin_D6 = d6;
Pin_D7 = d7;
//Set port Directions
GPIO_PinDirection(Pin_D4, 1);
....(same for every pin and some command sending.)
}
....(Other Functions.)
(很抱歉张贴我的完整代码,但我认为这种情况很重要,而且很简短。)
如您所见,我显然只定义了我的引脚一次。那么为什么认为我要多次定义它?
答案 0 :(得分:1)
您已在头文件LCD.h
中声明了这些变量。每当包含头文件时,这些变量都将被声明。
您已将该文件包含在main.c
和LCD.c
中,这意味着将创建每个变量的两个实例。由于这些变量是全局变量,因此不能两次使用相同的名称。这就是为什么您得到此错误。
要解决此问题,请在LCD.c
中移动这些变量。如果您不打算在此C文件之外使用它们,请将它们设置为“静态”。这样一来,它们只限于LCD.c
。
另一个提示(与错误无关)是您应该使用Include Guards。您的Delay.h
被多次收录。