附录四 Keil C51常见编译错误

附录四 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型定义公共变量。