附录四 Keil C51常见编译错误
Keil C51常见错误警告提示信息如下。
1.Warning 280:'i':unreferenced local variable
说明:局部变量i在函数中未做任何的存取操作。
解决方法:消除函数中i变量的宣告。
2.Warning 206:'Music3':missing function-prototype
说明:Music3( )函数未做宣告或未做外部宣告,所以无法给其他函数调用。
解决方法:将void Music3(void)写在程序的最前端做宣告,如果是其他文件的函数,则要写成extern void Music3(void),即做外部宣告。
3.Compling:C:\8051\MANN.C
Error 318:can't open file 'beep.h'
说明:这是在编译C:\8051\MANN.C程序过程中,main.c用了指令#include "beep.h",但却找不到beep.h。
解决方法:编写一个beep.h的包含档并存入C:\8051工作目录中。
4.Compling:C:\8051\LED.C
Error 237:'LedOn':function already has a body
说明:LedOn( )函数名称重复定义,即有两个以上一样的函数名称。
解决方法:修正其中一个函数名称,使得函数名称都是独立的。
5.***WARNING 16:UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESS
SEGMENT:?PR?_DELAYX1MS?DELAY
说明:DelayX1ms( )函数即使未被其他函数调用,也会占用程序记忆体空间。
解决方法:去掉DelayX1ms( )函数或利用条件编译#if …..#endif,可保留该函数并不编译。
6.***WARNING 6:XDATA SPACE MEMORY OVERLAP
FROM:0025H
TO:0025H
说明:外部资料ROM的0025H重复定义地址。
解决方法:将外部资料ROM定义为Pdata unsigned char XFR_ADC _at_0x25。
其中,XFR_ADC变量的名称为0x25,检查是否有其他变量的名称也定义在0x25处,如是,则修正它。
7.WARNING 206:'DelayX1ms':missing function-prototype
C:\8051\INPUT.C
Error 267:'DelayX1ms ':requires ANSI-style prototype C:\8051\INPUT.C
说明:程序中调用了 DelayX1ms 函数,但是该函数没定义,即未编写程序内容或函数已定义但未做宣告。
解决方法:DelayX1ms的内容编写完后,也要做宣告或做外部宣告,可在delay.h的包含档中宣告成外部,以便其他函数调用。
8.***WARNING 1:UNRESOLVED EXTERNAL SYMBOL
SYMBOL:MUSIC3
MODULE:C:\8051\MUSIC.OBJ(MUSIC)
***WARNING 2:REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL:MUSIC3
MODULE:C:\8051\MUSIC.OBJ(MUSIC)
ADDRESS:0018H
说明:程序中调用了MUSIC3函数,但是未将该函数的含扩档C文件加入工程档Prj中做编译和连接。
解决方法:设MUSIC3函数在MUSIC.C文件中,将MUSIC.C文件添加到工程文件中去。
9.***ERROR 107:ADDRESS SPACE OVERFLOW
SPACE:DATA
SEGMENT:_DATA_GROUP_
LENGTH:0018H
***ERROR 118:REFERENCE MADE TO ERRONEOUS EXTERNAL
SYMBOL:VOLUME
MODULE:C:\8051\OSDM.OBJ(OSDM)
ADDRESS:4036H
说明:DATA型存储空间的地址范围为0~0x7F,当公用变量数目和函数里的局部变量存储模式设为SMALL时,则局部变量先使用工作寄存器R2~R7暂存。当存储器不够用时,则会使用DATA型的存储空间暂存;当个数超过0x7F时,就会出现地址不够的现象。
解决方法:将以DATA型定义的公共变量修改为用IDATA型定义公共变量。