MODULE:filename(modulename)
执行 L51 的内存空间不够
*FATAL ERROR217:NO MODULE TO BE PROCESSED 缺少应该被处理的模块
*FATAL ERROR218:NOTAN OBJECT FILE FILE:filename
所给文件非目标文件
*FATAL ERROR219:NOTAN 8051 OBJECT FILE FILE:filename
所给文件非 8051 目标文件
*FATAL ERROR220:INVALID INPUTMODULE FILE:filename
所给输入模块无效,可能是由汇编错误引起的
*FATAL ERROR221:MODULE SPECIFIED MORE THAN ONCE Partial command line
命令行上多次包含同一模块。命令行显示到出错处 *FATAL ERROR222:SEGMENT SPEXIFIED MORE THAN ONCE Partial command line
命令行上多次包含同一段。命令行显示到出错处
*FATAL ERROR224:DUPLICATE KEYWORD OR CONFLICATING CONTROL Partial command line
命令行上多次包含同一关键字或者存在相互矛盾的控制选项。命令行显示到出错处 *FATAL ERROR225:SEGMENTADDRESS ARE NOT IN ASCENDING ORDER Partial command line
定位控制的段地址未按照升序显示。命令行显示到出错处 *FATAL ERROR226:SEGMENTADDRESS INVALID FOR CONTROL Partial command line
定位控制的段的段地址无效。命令行显示到出错处 *FATAL ERROR227:PARAMETER OUT RANGE Partial command line
所给 PAGEWIDTH 和 PAGELENGTH 参数越界。命令行显示到出错处 *FATAL ERROR228:PARAMETER OUT RANGE Partial command line
命令行上 RAMSIZE 参数越界。命令行显示到出错处 *FATAL ERROR229:INTERAL PROCESS ERROR Partial command line
L51 检测到内部处理错。请询问代理商
*FATAL ERROR230:STRARTADDRESS SPECIFIED MORE THAN ONCE Partial command line
命令行上包含多个未命名组段的起始地址。命令行显示到出错处 *FATAL ERROR233:ILLEGAL USE OF *IN OVERLAY CONTROL Partial command line
命令行 OVERLAY 定位选择非法使用了*号(如*!*或*~*)。命令行显示到出错处
E.5 异常信息
L51 某些错误的原因由系统的EXCEPTION 给出。 *EXCEPTION 0021:PATH OR FILE NOT FOUND 路径名或文件名未找到。
*EXCEPTION 0026H:ILLEGAL FILE ACCESS 试图写或者删除写保护文件。
*EXCEPTION 0029H:ACCESS FILE DENIED 所给的文件实际是目录。 *EXCEPTION 002AH:I/O-ERROR
欲写的驱动器已满或未准备好。 *EXCEPTION 0101H:ILLEGAL CONTEXT
命令行的语意非法。如对打印机进行读操作。
警告
警告在列表文件中生成信息警告信息用下面的格式
*** WARNING number IN LINE line OF file: warning message number: 错误号
line :在源文件或包含文件中的对应行号 file :错误产生的源或包含文件名 warning message:警告的内容
*WARNING 1:UNRESOLVED EXTERNAL SYMBOL SYMBOL:MUSIC3
MODULE:C:\\8051\\MUSIC.OBJ(MUSIC)
没把 C 文件添加到项目中,还有可能是因为存在没有被调用的已经定义的函数。 *WARNING 2:REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL:MUSIC3
MODULE:C:\\8051\\MUSIC.OBJ(MUSIC)
ADDRESS:0018H // ROM空间地址
说明:程序中有调用MUSIC 函数,但未将该函数所在的 C文件加入到工程作编译和连接 解决方法:设 MUSIC3 函数在 MUSIC.C 里将 MUSIC.C 添加到工程文件中去。 *WARNING1:UNSOLVED EXTERNAL SYMBOLS SYMBOLS: external_name
MODULE: filename (modulename)
指定模块的外部符号在 PUBLIC符号表中找不到
*WARNING2:REFERENCE MADE TO UNSOVED EXTERNAL SYMBOLS: external_name (外部函数名) MODULE: filename (modulename) (模块名) ADDRESS:code_address
访问了未能匹配的外部符号 code地址 *WARNING4:DATA SPACE MEMORY OVERLAP FROM:byte,bit,address TO: byte,bit,address
数据空间指定范围出现覆盖
*WARNING5:CODE SPACE MEMORY OVERLAP FROM:byte,bit,address TO: byte,bit,address
程序空间指定范围出现覆盖
*WARNING6 :XDATA SPACE MEMORY OVERLAP FROM : 0025H TO: 0025H
说明:外部 RAM的 0025H 重复定义地址
解决方法:外部资料RAM 的定义如下 Pdata unsigned char XFR_ADC _at_0x25 ,其中 XFR_ADC
变量的地址为 0x25,请检查是否有其它的变量地址也是定义在 0x25 处并修正它。 *WARNING7:MODULE NAME NOT UNIQUE MODULE:filename(modulename) 模块名重名。模块未处理
*WARNING8:MODULE NAME EXPLICITLY REQUESTED FROMANOTHER FILE MODULE:filename(modulename) 其他文件指名要求本模块名
*WARNING9:EMPTYABSOLUTE SEGMENT MODULE:filename(modulename)
本模块包含空的绝对段,因未定位,它可能在不通知的情况下随时被覆盖 *WARNING10:CANNOT DETERMINE ROOT SEGMENT L51 对输入文件要求分辨是 C51还是 PL/M文件,然后进行流程分析,在无法确定的时候,发出
本警告。它发生在主程序被汇编调用的时候,需要程序员用 OVERLAP 特殊控制选项进行干预
*WARNING11:CANNOT FIND SEGMENT OR FUNCTION NAME NAME:overlap_control_name
在目标模块中找不到OVERLAP控制选项中规定的段或者函数间调用 *WARNING12:NO REFERENCE BETWEEN SEGMENTS SEGMENT1:segment_name SEGMENT2:segment_name
试图用 OVERLAP控制选项删除本来不存在的段间访问或者函数间调用 *WARNING13:RECURSIVE CALL TO SEGMENT SEGMENT:segment_name CALLER:segment_name
CALLER段递归调用 SEGMENT段。PL/M51和 C51的非重入函数不允许递归调用 *WARNING14:IMCOMPIABLE MEMORYMODEL MODULE:filename(modulename) MODEL:memory_model
指定模块试图与以前不同的存储模式编译。 *WARNING15: MULTIPLE CALL TO SEGMENT SEGMENT: ?PR?SPI_RECEIVE_WORD?D_SPI CALLER1: ?PR?VSYNC_INTERRUPT?MAIN
CALLER2: ?C_C51STARTUP 该警告表示连接器发现有一个函数可能会被主函数和一个中断服务程序(或者调用中断服务程
序的函数)同时调用, 或者同时被多个中断服务程序调用。出现这种问题的原因之一是这个
函
数是不可重入性函数,当该函数运行时它可能会被一个中断打断,从而使得结果发生变化并可 能会引起一些变量形式的冲突(即引起函数内一些数据的丢失,可重入性函数在任何时候都可
以被中断打断,一段时间后又可以运行,但是相应数据不会丢失)。原因之二是用于局部变量或 全局变量的内存区被其他函数的内存区所覆盖,如果该函数被中断,则它的内存区就会被使用,
这将导致其他函数的内存冲突。
解决办法:将该函数设为重入型。例如:void myfunc(void) reentrant { ... },这种方法消耗 更多的 RAM 并会降低重入函数的执行速度。另一办法是复制两份该函数的代码,一份到主程
序中,另一份复制到中断服务程序中。 *WARNING15:MULTICALL TO SEGMENT SEGMENT:segment_name CALLER1:segment_name CALLER2:segment_name
两个函数调用同一个函数(如主函数和中断函数),参数和局部变量将被覆盖 *WARNING 16:UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESS SEGMENT: ?PR?_DELAYX1MS?DELAY
说明 DelayX1ms( )函数未被其它函数调用也会占用程序记忆体空间,解决方法删除 DelayX1ms( )函数或利用条件编译#if ?..#endif,可保留该函数并不编译。 *WARNING 173 缺少返回表达式
一个函数返回一个除了 int 类型以外的别的类型的值必须包含一个返回声明包括一个表达 式为了兼容旧的程序对返回一个 int 值的函数不作检查 *WARNING 182 指针指向不同的目标
一个指针关联了一个不同类型的地址 *WARNING 185 不同的存储空间
一个目标声明的存储空间和前面声明的同样目标的存储空间不同 *WARNING 196 存储空间可能无效
把一个无效的常数值分配给一个指针无效的指针常数是long 或unsigned long 编译器对指
针采用 24 位 3 字节低 16 位代表偏移高 8 位代表选择的存储空间 *WARNING 198 sizeof 返回零
一个目标的大小计算结果为零。如果目标是外部的或如果一个数组的维数没有全知道则值是 错误的
Warning 206:’Music3’:missing function-prototype // 缺少函数原型 说明Music3( )函数未作声明或未作外部声明所以无法给其他函数调用,解决方法将叙述void Music3(void)写在程序的最前端作声明,其它文件的函数则要写成 extern void Music3 (void),即作外部声明。 *WARNING 209 实参太少
在一个函数调用中包含太少的实参 *WARNING 219 long 常数被缩减为 int
一个常数表达式的值必须能被一个 int 类型所表示
*WARNING 235: parameter 1: different types
第一个参数类型错误
*WARNING 245 未知的 pragma 本行被忽略
#pragma 声明是未知的因此整行程序被忽略 *WARNING 258 struct/union 成员的存储空间方法 参数的存储空间被忽略
一个结构的成员或一个参数不能指定存储类型但是指针所指的目标可以包含一个存储类型 例如
struct vp{ char code c;int xdata i; }; 产生警告 258
struct v1{ char c;int xdata *i; }; 对 struct 是正确的声明 *WARNING 259 指针不同的存储空间
两个要比较的指针没有引用相同的存储类型的目标 *WARNING 260 指针折断
把一个指针转换为一个更小偏移区的指针转换会完成但大指针的偏移会折断来适应小指针
*WARNING 261 bit 在重入函数
一个 reentrant 函数不能包含 bit 因为 bit 标量不能保存在虚拟堆栈中 *WARNING 265 名称对非重入函数递归调用
发现对一个非重入函数直接递归这可能是故意的但对每个独立的情况进行功能性检查通过
生成的代码间接递归由连接/定位器检
*WARNING 271 asm/endams 控制放错地方
asm 和 endasm 不能嵌套 endasm 要求一个以 asm 声明开头的汇编块 例如
#pragma asm ...
汇编指令 ...
#pragma endasm
*WARNING 275 表达式可能无效
编译器检测到一个表达式不生成代码例如 void test(void) {
int i1,i2,i3;
i1,i2,i3; /* 死表达式 */ i1 << i3; /* 结果未使用 */ }
*WARNING 276 常数在条件表达式
编译器检测到一个条件表达式有一个常数值,在大多数情况下是一个输入错误例如 void test(void) {
int i1,i2,i3;
if( i1 = 1) i2 = 3; /* 常数被赋值 */ while( i3 = 2); /* 常数被赋值 */
}
*WARNING 277 指针有不同的存储空间 一个 typedef 声明的存储空间冲突例如 typedef char xdata XCC; /* 存储空间 xdata */ typedef XCC idata PICC; /* 存储空间冲突 */
Warning 280:’i’:unreferenced local variable // 符号或标号未使用
声明的局部变量 i 在函数中未作任何的存取操作,解决方法删除除函数中i 变量的声明。 Warning C290: missing return value
函数定义时缺少返回值类型声明,例如:main(),应定义为 void main()或 int main()
Warning 307 宏名称参数计算不匹配
一个宏调用的实参的数目和宏定义的参数数目不匹配表示用了太多的的参数过剩的参数被 略
*WARNING 317 宏名称重新定义无效
一个预定义的宏不能重新定义或清除参考 138 页的预定义宏常数 *WARNING 322 未知的标识符
在一个#if 命令行的标识符未定义等效为 FALSE *WARNING 323 期望新行发现多余字符
一个#命令行正确但包含多余的非注释字符例如 #include
期望一个预处理器记号但输入的是一个新行例如#line 这里缺少#line 命令的参数