回复1# yfg123 本质,就是已经定义了两个main函数,自己仔细找一下,看有没有两个定义。解决方法如下:
1、首先打开Keil,新建一个汇编语言文件,在其中输入汇编代码,同时在最开头加入。
2、将汇编源文件进行编译。可以看到,编译结果窗口输出了一连串的error A10: ATTEMPT TO DEFINE AN ALREADY DEFINED SYMBOL,每个ERROR都指向REG51.INC。
3、出现这种问题的原因在于REG51.INC对特殊寄存器进行了定义,选择汇编源文件,在弹出的列表中选择“Options for FIle:xxx”,其中xxx是具体的文件名。
4、在弹出的对话框中,找到Special Function Registers,将它下面的Define 8051 SFR Names取消勾选。
5、这时可以看到error A10: ATTEMPT TO DEFINE AN ALREADY DEFINED SYMBOL没有了。
multiply defined指重复定义,说明存在变量在编译的过程中被至少两次定义。我遇到过的是我在common.h中定义了变量,然后其它.h文件又引用了common.h,这就使得keil每次编译其它.h时都会重复定义common.h中的变量,从而造成了重复定义(multiply defined)。本题为例,若存在led.h中有变量 char led0 =0这样的变量定义,在编写main.h的时候引用了#include “led.h”,编译就会出现重复定义。因此,建议将变量的定义放在.c文件中,这样若要在其它.c文件使用该变量,可以使用extern关键字。
提示已经很清楚了,重复定义,在led和main两个文件中
回复 1# yfg123 本质,就是你已经定义了两个main函数,你要自己仔细找一下,看有没有两个定义。