Keil 报错 ERROR 118:ERRONEOUS REFERENCE TO EXTERNAL VARIABLES

问题描述:
*** ERROR 118: REFERENCE MADE TO ERRONEOUS EXTERNAL
SYMBOL: JUNK
MODULE: C:\MYCODE\J1.OBJ (J1)
ADDRESS: 0020H
官网解释链接:http://www.keil.com/support/docs/213.htm
答:
您的程序在技术上是正确的。问题在于 Keil C 编译器创建的对象文件的对象模块格式。
对象文件是根据英特尔指定的 OMF-51 对象模块格式创建的。此对象模块格式不允许使用小写变量名称。因此,所有公共变量都被视为大写。当您创建 2 个具有相同名称但具有不同大小写的公共符号时,链接器会抱怨“错误的外部”。
更改其中一个变量的名称以避免此问题。
总结一下就是:为了遵循某个规则,规定所有的全局变量都视为大写,所以除了大小写都一样的变量或函数(全局的)在一个工程中出现时,就会发生这样的错误。
解决方法:
很简单,报错提示的symbol就是命名有问题的变量或函数,只要把相似变量/函数名中的一个改个名就可以了,而不是仅仅只有大小写不一样。