文档库 最新最全的文档下载
当前位置:文档库 › 编程时Keil中常见的错误

编程时Keil中常见的错误

编程时Keil中常见的错误
编程时Keil中常见的错误

C51编译器识别错类型有三种:

1、致命错误:伪指令控制行有错,访问不存在的原文件或头文件等。

2、语法及语义错误:语法和语义错误都发生在原文件中。有这类错误时,给出提示但不产生目标文件,错误超过一定数量才终止编译。

3、警告:警告出现并不影响目标文件的产生,但执行时有可能发生问题。程序员应斟酌处理。

1、致命错误

C_51 FATAL_ERROR

ACTION: <当前行为>

LINE: <错误所在行>

ERROR: <错误信息> terminated

或C_51 FATAL ERROR

ACTION: <当前行为>

FILE: <错误所在文件>

ERROR: <错误信息> terminated

C_51 TERMINATED C_51

(1) ACTION 的有关信息

*PARSING INVOKE-/#PRAGMA_LINE

在对#pragma 指明的控制行作此法分析时出错。

*ALLOCATING MEMORY

系统分配存储空间时出错。编译较大程序需要512k空间。

*OPENING INPUT_FILE

打开文件时,未找到或打不开源文件/头文件。

*CREATE LIST_FILE/OBJECT_FILE/WORK_FILE

不能创建上述文件。可能磁盘满或文件已存在而且写保护。

*PARSING SOURCE_FILE/ANALYZING DECLARATIONS

分析源程序时发现外部引用名太多。

*GENERATING INTERMEDIATE CODE

源代码被翻译成内部伪代码,错误可能来源于函数太大而超过内部极限。

*WRITING TO FILE

在向文件(work,list,prelist或object file)写时发生错误。

(2)ERROR的有关信息

*MEMORY SPACE EXHAUSTED

所有可用系统空间耗尽。至少需要512k 字节空间。没有足够空间,用户必须检查常驻内存

的驱动程序是否太多。

*FILE DOES NOT EXIST

FILE 行定的文本文件名未发现。

*CAN’T CREAT FILE

FILE 行定义的文件不能被创建。

*SOURCE MUST COME FROMA DISK_FILE

源文件和头文件必须存在于硬盘或软盘上。控制台、CON、CI 或类似设备不允许作为输入

文件。

*MORE THAN 256 SEGMENTS/PUBLICS/EXTERNALS

受OMF_51的历史限制,一个源程序不能超过256个各种函数的类型段,256个全局变量,256 个公共定义或外部引用名。不使用为变量可以减少使用的段数。使用static 存储类型说明符可减少全局变量的使用数目。合理调整定义性说明的位置可减少外部引用名的使用数目。

*FILEWRITE ERROR

当向list、prelist、work或object文件中写内容时,由于空间不够而发生错误。

*NON_NULLARGUMENT EXPECTED

所选的控制参数需要一个括号内的变量,如一个文件夹或一个数。

*“(”AFTER CONTROL EXPECTED

变量的左括号丢失。

*“)”AFTER PARAMETER EXPECTED

变量的右括号丢失。

*RESPECIFIED OR CONFLICTING CONTROL

所选的控制参数与前面发生冲突或重复,例如CODE和NOCOND

*BAD DECIMAL NUMBER

控制参数的数字含有非法数,需要使用十进制数。

*OUT OF RANGE DECIMAL NUMBER

控制参数的数字越界,例如OPTIMIZE 的参量为0-5。

*IDENTIFIER EXPECTED

控制参数DEFINE 需要一个标识符做参量,与C语言的规则相同。

*PARSE STACK OVERFLOW

分析栈溢出。可能是源程序包含特别复杂的表达式,或功能块嵌套数超过15。

*PREPOCESSOR: MACRO TO NESTED

宏扩展期间,预处理器的栈耗用太大。表明宏嵌套太多,或有递归宏定义。

*PREPOCESSOR: LINE TOO LONG(510)

宏扩展后行超过510个字符。

*CAN’T HAVE GENERAL CONTROL IN INVOCATI ON LINE

一般控制(如EJECT)不能是命令行的一部分,应将它们放入源文件“pragma”预处理行中。

D.2 语法及语义错误

D.2.1 错误格式

这类错误在列表文件中产生如下格式的信息:

***ERRORIN LINEOF:error message

***WARINGIN LINEOF:warning message

表示错误行;

表示源文件或头文件中与错误或警告相关的行;

指明了错误所在的源文件或头文件;

D.2.2 错误信息及可能发生的原因

*ERROR100:unprintable character 0x??skipped

源文件中发现非法字符(注意,注解内的字符不做检查)。

*ERROR101:unclosed string

串未用引号结尾。

*ERROR 102:string too long

串不得超过511 个字符。为了定义更长的串,用户必须使用续行符‘\’逻辑的继续该串,在词汇分析时遇到以该符号结尾的行会与下行连接起来。

*ERROR 103: invalid character constant

试图再声明一个已定义的宏,已存在的宏可以用#undef指令删除。预定义的宏不能删除。*ERROR 104: identifier expected

预处理器指令期望产生一个标示符,如ifdef

*ERROR 105: unclosed comment

当注解无结束界定符(*/)时产生此错误。

*EROOR 106: unbalanced#if-endif controls

endif的数量与if或ifdef的数量不匹配。

*ERROR 107:include file nesting exceeds 9

include指令后的文件名无效或丢失

*ERROR 108: expected string,如#error “string”

预处理器指令期望一个串变量。

*ERROR 109:

由#error 伪指令引入的错误信息以错误信号形式显示。

*ERROR 110:missing directive

预处理行#后缺少伪指令。

*ERROR 111:unknown directive

预处理行#后不是伪指令。

*ERROR 112:misplaced ‘elif’

*ERROR 113:misplaced ‘else’

*ERROR 114:misplaced ‘endif’

指令 elif/else/endif 只有在if、ifdef、ifndef指令内才是合法的。

*ERROR 117:bad integer expression

if/elif指令的数值表达式有语法错误。

*ERROR 118:missing’(‘after macro identifier

宏调用中实参表的左括号丢失

*ERROR 119:reuse of macro formal parameter

宏定义形参名重复使用

*ERROR 120:‘C’unexpected in formal list

形参表中不允许有字符‘c’,应用逗号代替

*ERROR 121:missing ‘)’after actual parameter

宏调用实参表的右括号丢失

*ERROR 122:illegal macro invocation

宏调用的实参表与宏定义中的形参表不同

*ERROR 123:missing macro name after ‘define’

#define 伪指令后缺预定义的宏

*ERROR 124:expected macro formal parameter

宏定义要求形参名

*ERROR 125:declarater too complex

说明过于复杂

*ERROR 126:type-stack underflow

对象的声明至多只能包含20 个类型修饰符(【】,*,(),)错误126 经常在错误125 之前,两者一起发生。

*ERROR 127:invalid storage class

对象用无效的存储类所说明。当在函数外用auto/register 存储时会发生这种情况。

*ERROR 128:memory space: illegal memory space ‘memory space ’used

函数参数的存储类由存储模式(SMALL LARGE COMPACT)决定用户不能改变,使用不同

于存储模式的自动变量应该为静态的存储类

*ERROR 129:missing’ ;’before ‘token’

该错误表示分号丢失,通常该错误会引发一连串的错误,引发的这些错误无关紧要。因为缺

少分号后编译器不能做正确的语法分析

*ERROR 130:value out of range

using 或interrupt 指令后参数越限。using 用的寄存器组号位0-3,interrupt 需要0-15 的中

断号

*ERROR 131:duplicate function-parameter

函数中形参名重复,形参名应彼此不同

*ERROR 132:not in formal parameter list

函数内参数声明使用的名字未出现在参数表中

*ERROR 133:char function(v0,v1,v2)

Char*v0,*v1,*v5;/ *’v5’在形参中未出现

*ERROR 134:xdata/idata/pdata/data on function not permitted

函数总是驻留于0x5xxxx 的code存储区,不能位于xdata/idata/pdata/data 空间

*ERROR 135:bad storage class for bit

位变量的定义可以接受static或extern的存储类,用REGIESTER和ALIEN 都是非法的

*ERROR 136:‘void’on variable

‘void’类型只允许作为函数的返回类型或与指针类型合用(void*)

*ERROR 137:illegal parameter type:’function’

函数参数的类型不能是函数,然而函数指针可以作为参数

*ERROR 138:interrupt ()may not receive or return value (s)

中断函数既不能有参数又不能有返回值

*ERROR 139:illegal use of ‘alien’

关键字alien 将函数定义为PL/M51 规定的过程与函数结构。这意味着C函数中有参数的缩

记符号(即funct(…);)时是不能用alien的

*ERROR 140:bit in illegal memory-space

位变量的定义可包含修饰符DATA,如果无修饰符则假定为DATA。因为位变量始终位于

0x4xxx 的内部数据存储器中,当试图采用其他存储空间就会产生这个错误。

*ERROR 141:NEAR:expected

编译器所见的单词是错误的。期望正确的单词

*ERROR 142:invalid base address

Sfr 说明中的基址有错。有效基址为0x80-0xff。如果声明采用base^pos 形式,则基址是8的整数倍

*ERROR 143:invalid absolute bit position

Sbit 说明中位地址必须在0x80-0xff之间

*ERROR 144:base^pos:invalid bit position

Sbit 说明中位pos必须在0~7之间

*ERROR 145:undeclared sfr

Sfr 未说明

*ERROR 146:invalid sfr

绝对位地址说明(base^pos)包含无效的基地址。这个基地址必须与sfr 名相对应

*ERROR 147:object too large

对象不能超过65536(64k)字节

*ERROR 148:field not permitted in union

联合不能包含位成员,这个限制是由8051结构决定的。

*ERROR 149:function member in struct/union

结构或者联合不能包含函数类型的成员。但是指向函数的指针是允许的

*ERROR 150:bit member in struct/union

结构或者联合不能包含位类型的成员,这个限制是由8051 结构决定的

*ERROR 151:self relative struct/union

结构或者联合不能包含自身

*ERROR 152:bit field type too small for number of bits

位域声明中指定的位数超过所给原型中位的数量

*ERROR 153:named bit-field cannot have 0 width

命名的域宽度为0 错误,只有未命名的位域允许是0宽度

*ERROR 154:pro to field

无指向位域指针的类型

*ERROR 155:char/int required for fields

位域基类型要求char 或int类型,unsigned char 或unsigned int 也有效

*ERROR 156:alien permitted on function only

Alien 只能用于函数

*ERROR 157:var_parms on alien function

有变参数的函数不能用alien ,因为PL/M51函数只能用固定数量的参数

*ERROR 158:function contains unnamed parameter

函数定义的参数表中包含无名参数。无名参数只允许用于函数的原型中

*ERROR 159:type follows void

函数原型声明中可含一个空的参数表f(void)。Void后不能再用其他类型定义

*ERROR 160:void invalid

Void类型只能与指针合用或表明函数没有返回值

*ERROR 161:formal parameter ignored

函数内的外部函数引用声明使用了无类型的参数表。例如“ extern(a,b,c);”要求形参表*ERROR 162:duplicate function-parameter

函数内参数名重复

*ERROR 163:unknown array size

一般的不管是一维数组还是多维数组或外部数组,都需要指定数组的大小,这个大小是由编译器的初始化时计算,这个错误表明试图为一个未定维的数组使用sizeof运算符,会哦着一个多维数组的附加元素未定义。

*ERROR 164:ptr to null

这一个错误通常是由前一个错误造成的

*ERROR 165:ptr to bit

指向位的指针不是合法的类型

*ERROR 166:array of function

数组不能包含函数,但可能包含指向函数的指针。

*ERROR 167:array of fields

位域不能安排为数组

*ERROR 168:array of bit

数组没有位类型

*ERROR 169:function returns function

函数不能返回函数,但可以返回一个指向函数的指针

*ERROR 170:function returns array

函数不能返回数组,但可返回指向数组的指针

*ERROR 171:missing enclosing swith

Break/continue 语句只能出现在for,while,do while或switch语句中间。

*ERROR 172:missing enclosing swith

Case语句只能用在switch语句中

*ERROR 173:missing return-expression

返回类型不是integer 的函数必须包含一条代表达式的return 语句。由于要与老版本兼容,编译器对返回整形值的函数不做检查

*ERROR 174:return-expression on void-function

Void 函数不能返回值,因此不能包含带表达式return的语句

*ERROR 175:duplicate case value

每个case 语句必须包含一个常量表达式做其变量,这个值不能在switch 语句的各级中出现多次

*ERROR 176:more than one default

Switch语句中不能包含多于一个的default语句

*ERROR 177:different struct/union

赋值或参数传递中使用了结构/联合的不同类型

*ERROR 178:struct/union comparison illegal

根据ANSI C,两个结构或联合的比较是不允许的

*ERROR 179:cannot/cast from/to void-type

将void类型转化为其他类型数据或将其他类型转化为void类型都是非法的

*ERROR 180:cannot cast to’function’

转化为function是非法的,使用函数指针指向不同的函数

*ERROR 181:incompatible operand

在所给的运算符中至少有一个操作符类型是无效的

*ERROR 182:point to different object

报告指针使用不一致

*ERROR 183:unmodifiable value

预修改的对象位于CODE 存储区,因而不能修改

*ERROR 184:sizeof :illegal operand

Sizeof运算符不能决定函数或位域大小

*ERROR 185:different memory space

对象说明的存储空间与前面的不一致

*ERROR 186:invalid dereference

这条错误信息可能由编译器内部问题产生的

*ERROR 187:not an lvalue

所需参量必须是可变对象的地址

*ERROR 188:unknown object size

无法计算对象的大小,因为缺少数组的维数或因为通过void指针的间接访问

*ERROR 189:‘&’on bit/sfr illegal

地址操作符‘&’不允许用于位对象或sfr

*ERROR 190:’&’:not an lvalue

地质部是可变的对象,不能作为左值

*ERROR 191:‘&’on constant

试图为所列类型常数建立指针

*ERROR 192:‘&’on array/function

地址操作符&不允许用于数组或函数,函数和数组本身都代表了地址

*ERROR 193:illegal op-type(s)

*ERROR 193:illegal add/sub on ptr

*ERROR 193:illegal operation on bit(s)

*ERROR 193:bad operand type

当一个表达式使用给定运算符的非法操作类型时就会出现该错误,使用个定运算符的非法操

作类型的无效的表达式,例如bit+bit,ptr+ptr,或ptr*。错误信息包括引起错误的运算符。下列运算可使用位操作符

赋值(=)

OR/复合OR(|,|=)

AND/复合AND(&,&=)

XOR/复合XOR(^,^=)

位或常数的安位比较(= =,!=)

取反(~)

*ERROR 194:’*’indirection to object of unknown size

间接操作符*不能用于void指针(void*),因为指针所指的对象的大小时未知的

*ERROR 195:’*’illegal indirection

间接操作符*不能用于非指针变量

*ERROR 196:mspace probably invalid

产生此警告是因为某些常数值赋给指针并且常数没有形成一个有效的指针值,有效的指针常

数类型为long/unsigned long。编译器对指针对象采用24bit(3 字节),低16 位表示偏移,高

8 位表示存储类的选择,在低字节中,值从1 到5 表明了xdata/pdata/idata/data/和code 的存

储类

*ERROR 197:illegal pointer assignment

试图将一个非法变量赋给指针,只有另一个指针或指针变量可以赋给指针

*ERROR 198:size of returns zero

求某些对象长度得到0,如果对象是外部的或一个数组中并非所有维的大小都是已知时得到

0,这时候该值可能是错的。

*ERROR 199:left size of’->’requires struct/union pointer

->操作符的左边变量必须是结构或变量

*ERROR 200:left size of ‘.’requires struct/union

操作符的左边变量必须是结构/联合

*ERROR 201:undefined struct/union tag

所给的结构/联合标记名是未知的

*ERROR 202:undefined identifier

所给的标示符未定义

*ERROR 203:bad storage class(nameref)

该错误表示编译器的内部有问题

*ERROR 204:undefined member

所给的结构/联合成员名未定义

*ERROR 205:cannot call an interrupt function

中断函数不能像普通函数那样调用,因为这种函数的头端和尾端是为中断特殊编码的

*ERROR 206:missing function-prototype

调用的函数缺少原型说明

*ERROR 207:declared with ‘void’ parameter list

用void参数说明的函数不接受调用者传来的参数

*ERROR 208:too many actual parameter

函数调用包含了多余的实参

*ERROR 209:too few actual parameter

函数调用时传递的实参过少

*ERROR 210:too many nested calls

超过了10 个函数嵌套调用的极限

*ERROR 211:call not to a function

函数调用时没有函数的地址或未对指向函数的指针赋值

*ERROR 212:indirect call with parameter

由于参数传递方法的限制,通过指针的间接函数调用不能直接作为实参。这种参数传递方法要求被调用的函数名已知,因为参数的写入要被写入调用函数的数据段。然而间接调用时函数的的名字时未知的

*ERROR 213:left side of assign_op not an lvalue

在赋值操作符左边要求可变的对象

*ERROR 214:cannot cast non_pointer to pointer

非指针不能转化为指针

*ERROR 215:cannot cast pointer to not_int/pointer

指针可以转化为另一个指针或整数,但不能转化为其他类型

*ERROR 216:subscript on non_array or too many dimensions

对非数组使用了下标或数组维数过多

*ERROR 217:non_integral index

数组的下标表达式必须是整型类型

*ERROR 218:void_type in controlling expression

While,for 或do while语句中表达式不能是void类型

*ERROR 219:long constant truncated to int

企图把长整型常量截断为整型数是错误的

*ERROR 220:illegal constant expression

非法常量表达式

*ERROR 221:non_constant case/dim expression

Case值或下标值([])要求用常量表达式

*ERROR 222:div by zero

*ERROR 223:mod by zero

编译器检测到0 除或0 模的错误

*ERROR 224:illegal operation on float/double

AND 和NOT一类的运算符不允许作用于float/double

*ERROR 225:expression too complex ,simplify

表达式太复杂,必须简化

*ERROR 226:duplicate struct/union/enum tag

结构/联合/枚举类型中有重复标记

*ERROR 227:not a union tag

所给的标记名虽已定义,但不是联合的标记

*ERROR 228:not a struct tag

所给的标记名虽已定义,但不是结构的标记

*ERROR 229:not an enum tag

所给的标记名虽已定义,但不是枚举的标记

*ERROR 230:unknown struct/union/enum tag

所给的结构/联合/枚举标记名未定义

*ERROR 231:redefinition

所给的名字已经定义,不能再定义

*ERROR 232:duplicate label

所给的标号已经订义

*ERROR 233:undefined label

当对函数进行分析后,编译器检查到函数有未定义的标号,发出错误信息

*ERROR 234:‘{’scope stack overflow(31)

超过了最大为31 个的功能嵌套极限,多余的块被忽略

*ERROR 235:parameter:different type

函数实参类型与函数原型中的不同

*ERROR 236:different length of parameter lists

所给的函数是参量与函数原型中的不同

*ERROR 237:function already has body

试图定义已经定义过的函数

*ERROR 238:duplicate member

*ERROR 239:duplicate parameter

重复定义结构成员或函数参数

*ERROR 240:more than 128 local bit’s

位变量定义总数不能超过128

*ERROR 241:auto segment too large

局部对象要求的空间超过了该模式的最大值。最大栈长定义如下:SMALL-128 字节,COMPACT-256字节,LARGE-64k

*ERROR 242:too many initializers

初始化对象超限

*ERROR 243:string out of bounds

串中字符数超过了字符数组要求初始化的字符数

*ERROR 244:can’t initialize .bad type or class

试图初始化位或sfr

*ERROR 245:unknown pragma, line ignored

未知的pragma 语句,因此该行被忽略

*ERROR 246:floating point error

本错误发生在浮点变量超过32 位有效字长时,32 位IEEE 格式的浮点值的取值范围是±

1.75494E-38~±3.402832E+38

*ERROR 247:non_address +/-constant initializer

有效的初始化表达式必须是非地址量+/-常量

*ERROR 248:aggregate initialization needs curly braces

所有的组合变量(数组/结构或联合)初始化时要用花括号括起来

*ERROR 249:segment:segment too large

编译器检测到过大的数据段,最大数据段长取决于存储器空间

*ERROR 250:‘\esc’;value exceeds 255

串常数中\esc转义序列的值超过有效域

*ERROR 251:illegal octal digit

不是有效的八进制数字

*ERROR 252:misplace primary control、line ignored

一次性使用的编译控制伪指令必须在C模块开头指定,在#INCLUDE 语句和变量说明之前

*ERROR 253:internal ERROR(ASMGEN\CLASS)

这种错误在以下情况下发生⑴内部函数(如testbit)被不正确激活。它发生在函数原型和实

参表不存在匹配问题的时候。基于这个原因,头文件中的使用要适当(intrins.h,string.h)。

⑵C51识别出存在内部一致性错误,请向您的销售代理商查询

*ERROR 255:switch expression has illegal type

Switch语句中的case语句必须具有类型(u)char,(u)int 或(u)short,其他类型不允许(如bit)*ERROR 256:conflicting memory model

Alien 属性的函数只能使用SMALL模式。函数的参数必须位于内部数据存储空间

*ERROR 257:alien function can not be reentrant

“alien”属性的函数不能同时具有“reentrant”属性,函数的参数不能通过重入栈传递,这也适用于外部“alien”声明和“alien”函数

*ERROR 258:mspace illegal on struct/union member

不能为结构联合成员指定存储空间,但指向对象的指针可以

*ERROR 259:pointer: different mspace

当为指针赋值或做指针比较时,指针未指向存储在同一存储空间的对象时,会产生错误或者

警告。如:

Char xdata *px;/*px to char in xdata memory*/

Char code *pc;/*pc to char in code memory*/

Void main()

{ char c;

If(px==pc)++c;/*warning 259*/

}

*ERROR 260:pointer truncation

指针转换时部分偏移量被截断,此时指针常量(如char xdata)转为一个具有较小偏移区的指针(如char idata)

*ERROR 261:bit in reentrant function

重入函数不能包含位变量,因为位变量不能存于重入栈,而只能位于MCS51CPU的可位寻

址存储区中如:

Void test () reentrant

{ bit b0;/*illegal*/

Static bit b1;/*legal*/

}

*ERROR 262:’using/disable’: function returns bit

使用属性using选择寄存器组的函数或使用关中断(#pragma disable)功能的函数不能返回bit类型。如:

Bit test ()using 3/*error 261*/

{ bit b0;

return(b0);

}

*ERROR 263:save-stack overflow/underflow

“#pragama save”最大嵌套级为8 级。Save 和restore 指令按FIFO 原则工作

*ERROR 264:intrinsic:declaration/ activation error

内部参数定义不正确

*ERROR 265:recursive call to non_reentrant function

发现非重入函数被递归调用。直接递归用生成代码可有效查出,间接递归调用由L51 发现

L51 连接定位器使用错误提示

1 警告

警告并不终止L51 的执行。这时产生的程序模块由程序员自己斟酌使用还是不使用。但是

此时的列表文件和屏幕显示可能非常有用。

2 错误

错误并不终止L51 的执行。这时产生的模块是不能使用的。但是此时的列表文件和屏幕显

示可能非常有用。

3 致命错误

致命错误发生时立即终止L51 的执行。

1警告

*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:byte,bit,address

TO: byte,bit,address

外部数据空间指定范围出现覆盖

*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:MULTICALL TO SEGMENT

SEGMENT:segment_name

CALLER1:segment_name

CALLER2:segment_name

两个函数调用同一个函数(如主函数和中断函数),参数和局部变量将被覆盖*WARNING15:UNCALLED SEGMENT,IGNORED FOR OVERLAP PROCESS SEGMENT:segment_name

所给的段未被调用,已被排除在覆盖过程之外。

L51错误

*ERROR101: SEGMENT COMBINATION ERROR

SEGMENT:segment_name

MODULE:filename(modulename)

由于连接错误所给段未能连入类型总段,并被忽略

*ERROR102:EXTERN ATTRIBUTE MISMATCH

SYMBOL:external_name

MODULE:filename(modulename)

所给外部符号名属性错,并被忽略

*ERROR103:EXTERN ATTRIBUTE DO NOTMATCH PUBLIC

SYMBOL:public_name

MODULE:filename(modulename)

所给外部符号名属性与公用符号名不匹配,并被忽略

*ERROR104:MUTIPULIC DEFINITION

SYMBOL:pulic_name

MODULE:filename(modulename)

所给公用符号重名

*ERROR105:PUBLIC REFERS TO IGNORED SEGMENT

SYMBOL:public_name

MODULE:filename(modulename)

所给外部符号名属性错,并被忽略

*ERROR106: SEGMENT OVERFLOW

SEGMENT:segment_name

所给段长超过64,未处理

*ERROR107:ADDRESS SPACE OVERLAP

SPACE:space_name

SEGMENT:segment_name

由于存储空间不够,所给类型总段未能装入,已被忽略

*ERROR108:SEGMENT IN LOCATING CONTROL CANNOTALLOCATED SEGMENT:segment_name

命令行定位控制中的段由于属性问题未能分配

*ERROR109:EMPTY RELOCATABLE SEGMENT

SEGMENT:segment_name

可在定位类型总段长度为零,未定位

*ERROR110:CANNOT FIND SEGMENT

SEGMENT:segment_name

命令行所给的段在输入模块中未找到,被忽略

*ERROR111:SPECIFIED BITADDRESS NOT ON BYTE MEMORY SEGMENT:segment_name

位地址不在字界上,位段被忽略

*ERROR112:SEGMENT TYPE NOT LEGAL FOR COMMAND SEGMENT:segment_name

命令行所给的段类型非法,被忽略

*ERROR114:SEGMENT DOES NOT FIT

SPACE:space_name

SEGMENT:segment_name

BASE:base_address

LENGTH: segment_length

由于所给段的长度或者基地址未定位,故被忽略

*ERROR115:INPAGE SEGMENT IS GREATER THAN 256 BYTES SEGMENT:segment_name

所给INPAGE 属性的段长于256字节未能连入类型总段,并被忽略

*ERROR116:INBLOCK SEGMENT IS GREATER THAN 2048 BYTES SEGMENT:segment_name

所给INBLOCK 属性的段长于2048字节未能连入类型总段,被忽略

*ERROR117:BITADDRESSABLLE SEGMENT IS GREATER THAN 16 BYTE SEGMENT:segment_name

所给BITADDRESSABLE 属性的段长于16 字节未能连入类型总段,被忽略*ERROR118:REFERENCE MADE TO ERRONEOUS EXTERNAL

SYMBOL:symbol_name

MODULE:file_name(modulename)

ADDRESS:code_address

企图访问错误的外部程序地址

*ERROR119:REFERENCE MADE TO ERRONEOUS SEGMENT

SYMBOL:symbol_name

MODULE:file_name(modulename)

ADDRESS:code_address

企图访问错误段的程序地址

*ERROR120:CONTENT BELONGS TO ERROREOUS SEGMENT

SEGMENT:segment_name

MODULE:file_name(modulename)

该内容属于有错误的段

*ERROR121:IMPROPER FIXUP

MODULE:file_name(modulename)

SEGMENTsegment_name

OFFSET:segment_name

根据所给段和偏移地址的到的是不当的地址

*ERROR122:CANNOT FIND MODULE

MODULE:file_name(modulename)

命令行所给的模块未能找到

L51 致命错误

*FATAL ERROR201:INVALID COMMAND LINE SYNTAX

Partial command line

命令行句法错。命令行显示到出错处。

*FATAL ERROR202:INVALID COMMAND LINE ,TOKEN TOO LONG

Partial command line

非法命令行,单词太长。命令行显示到出错处

*FATAL ERROR203:EXPECTED ITEM MISSING

Partial command line

缺项。命令行显示到出错处。

*FATAL ERROR204:INVALID KEYWORD

Partial command line

非法关键字

*FATAL ERROR205:CONSTANT TOO LONG

Partial command line

常量大于0xffff。命令行显示到出错处。

*FATAL ERROR206:INVALID CONSTANT

Partial command line

命令行常量无效(如16 进制数以字母开头)。命令行显示到出错处。

*FATAL ERROR207:INVALID NAME

Partial command line

模块名或段名无效。命令行显示到出错处。

*FATAL ERROR208:INVALID FILENAME

Partial command line

文件名无效。命令行显示到出错处。

*FATAL ERROR209:FILE USED IN CONLICTING CONTEXTS

FILE:filename

所给的文件名用于有矛盾之处。命令行显示到出错处。

*FATAL ERROR210:I/O ERROR ON INPUT FILE

System error message

FILE:filename

访问输入文件时检测到有错,并有后面的EXCEPTION 给出具体的错误描述*FATAL ERROR211:I/O ERROR ON OUTPUT FILE

System error message

FILE:filename

访问输出文件时检测到有错,并有后面的EXCEPTION给出具体的错误描述*FATAL ERROR212:I/O ERROR ON LISTING FILE

System error message

FILE:filename

访问列表文件时检测到有错,并有后面的EXCEPTION给出具体的错误描述*FATAL ERROR213:I/O ERROR ONWORK FILE

System error message

FILE:filename

访问工作文件时检测到有错,并有后面的EXCEPTION 给出具体的错误描述

*FATAL ERROR214:I/O INPUT PHASE ERROR

MODULE:filename(modulename)

L51 在进行第二次扫描时遇到不同的数据发生该错误,可能是因汇编错误引起

*FATAL ERROR215:CHECK SUM ERROR

MODULE:filename(modulename)

校验和与文件内容不一致

*FATAL ERROR216:INSUFFICIENTMEMORY

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

命令行的语意非法。如对打印机进行读操作。

附录 F C51的极限值

*标示符最长255 个字符,一般取32 字符。大小写不敏感。

*case语句的变量个数没有限制,仅受可用内存容量和函数的最大长度限制。

*函数嵌套调用最大深度为10。

*功能块{….}最大嵌套深度为15。

*宏最多嵌套为8。

*函数以及宏的参数最多为32个。

*语句行和宏定义最多510 个字符(宏扩展后是510个字符)

*头文件嵌套深度为20。

*预处理器中的条件编译层最多为20。

KEIL51调试时一些的错误总结

KEIL51调试时一些的错误总结 (1)提示无M51文件 编译时候提示: F:\...\XX.M51 File has been changed outside the editor, reload ? ------ 解决方法: 重新生成项目,产生STARTUP.A51即可。 (2)L15重复调用 ***WARNING L15: MULTIPLE CALL TO SEGMENT SEGMENT: ?PR?SPI_RECEIVE_WORD?D_SPI CALLER1: ?PR?VSYNC_INTERRUPT?MAIN CALLER2: ?C_C51STARTUP 该警告表示连接器发现有一个函数可能会被主函数和一个中断服务程序(或者调用中断服务程序的函数)同时调用,或者同时被多个中断服务程序调用。 出现这种问题的原因之一是这个函数是不可重入性函数,当该函数运行时它可能会被一个中断打断,从而使得结果发生变化并可能会引起一些变量形式的冲突(即引起函数内一些数据的丢失,可重入性函数在任何时候都可以被ISR 打断,一段时间后又可以 运行,但是相应数据不会丢失)。 原因之二是用于局部变量和变量(暂且这样翻译,arguments,[自变量,变元一数值,用于确定程序或子程序的值])的内存区被其他函数的内存区所覆盖,如果该函数被中断,则它的内存区就会被使用,这将导致其他函数的内存冲突。 例如,第一个警告中函数WRITE_GMVLX1_REG 在D_GMVLX1.C 或者 D_GMVLX1.A51被定义,它被一个中断服务程序或者一个调用了中断服务程序的 函数调用了,调用它的函数是VSYNC_INTERRUPT,在MAIN.C中。 解决方法: 如果你确定两个函数决不会在同一时间执行(该函数被主程序调用并且中断被禁止),并且该函数不占用内存(假设只使用寄存器),则你可以完全忽略这种警告。 如果该函数占用了内存,则应该使用连接器(linker)OVERLAY指令将函数从覆盖分析(overlay analysis)中除去,例如: OVERLAY (?PR?_WRITE_GMVLX1_REG?D_GMVLX1 ! *) 上面的指令防止了该函数使用的内存区被其他函数覆盖。如果该函数中调用了其他函数,而这些被调用在程序中其他地方也被调用,你可能会需要也将这些函数排除在覆盖分析(overlay analysis)之外。这种OVERLAY指令能使编译器除去上述警告信息。 如果函数可以在其执行时被调用,则情况会变得更复杂一些。这时可以采用以下几种方法:

Keil C 编译器常见警告与错误信息

https://www.wendangku.net/doc/7010201196.html,/support/man/docs/c51/c51_c277.htm错误信息查询 Keil C 编译器常见警告与错误信息 error C132 :“****”not in formal parameter list 花了偶将近半个小时来查找错误,最终发现原来是在头文件里的一个函数声明时露了一个分号造成紧挨着在它下面声明的参数not in formal parameter list。 记在在这里,免得以后忘记了,同时也供大家分享。 下面是另外一些常见的错误提示: 1.第一种错误信息 ***WARNING L15: MULTIPLE CALL TO SEGMENT SEGMENT: ?PR?_WRITE_GMVLX1_REG?D_GMVLX1 CALLER1: ?PR?VSYNC_INTERRUPT?MAIN CALLER2: ?C_C51STARTUP ***WARNING L15: MULTIPLE CALL TO SEGMENT SEGMENT: ?PR?_SPI_SEND_WORD?D_SPI CALLER1: ?PR?VSYNC_INTERRUPT?MAIN CALLER2: ?C_C51STARTUP ***WARNING L15: MULTIPLE CALL TO SEGMENT SEGMENT: ?PR?SPI_RECEIVE_WORD?D_SPI CALLER1: ?PR?VSYNC_INTERRUPT?MAIN CALLER2: ?C_C51STARTUP - 该警告表示连接器发现有一个函数可能会被主函数和一个中断服务程序(或者调用中断服务程序的函数)同时调用,

KEIL常见编译错误大全

KEIL常见编译错误大全 【致命错误】 立即终止编译这些错误通常是命令行指定的无效选项的结果当编译器不 能访问一个特定的源包含文件时也产生致命错误 致命错误信息采用下面的格式 C51FATAL-ERROR– ACTION: LINE: ERROR: C51TERMIANTED. C51FATAL-ERROR– ACTION: FILE: ERROR: C51TERMIANTED. 下面说明Action和Error中可能的内容 Actions ALLOCATING MEMORY 编译器不能分配足够的存储区来编译指定的源文件. CREATING LIST-FILE/OBJECT-FILE/WORKFILE 编译器不能建立列表文件,OBJ文件,或工作文件这个错误的出现可能是磁盘满或写保护,或文件已存在和只读. GENERATING INTERMEDIATE CODE 源文件包含的一个函数太大,不能被编译器编译成虚拟代码.尝试把函数分小或重新编译. OPENING INPUT-FILE 编译器不能发现或打开所选的源或包含文件. PARSING INVOKE-/#PRAGMA-LINE 当在命令行检测到参数计算,或在一个#pragma中检测到参数计算,就产生这样的错误. PARSING SOURCE-FILE/ANALYZING DECLARATIONS 源文件包含太多的外部参考.减少源文件访问的外部变量和函数的数目. WRITING TO FILE

Keil编译常见问题

Error: L6200E Error: L6200E: Symbol temp multiply defined (by and .在编译的时候出现了这个问题,但是检查不出来,希望各位大侠帮帮忙 什么变量你给付了两次值 你看看是不是那个外部变量你又给赋值了 申明,其他.c文件对应的.h文件中用extern引用 error: #20 error: #20: identifier "TIM2_IRQChannel" is undefined 谁能说说,哪里错了 你的固件库里的库文件没有添加进工程里面,所以出现未定义的情况。 TIM2_IRQChannel指定时器2的中断通道没有定义,其实在固件库对这些参数都有定义,宏定义代替了一串寄存器地址数据。需要将.C文件添加到工程文件中 warning: #1-D (7): warning: #1-D: last line of file ends without a newline 当使用keil编译时,弹出这样的警告信息:(7): warning: #1-D: last line of file ends without a newline 这个是由于在main函数的“}”后,没有加回车。 只要在main函数的“}”后加回车键,此警告信息即可消除。 error:#65 ...(27):error:#65:expected a ";"

分数送你了,问题在你回答之前已经解决了,头文件里的结构体定义里的最后一行没有加";" 如NB menu{..}; error:#1113: 折腾了大半天,才搞明白一个空操作的指令 先在网上查有的说是__asm{NOP;},从里调用,可犄角旮旯全找了,也没看到什么的文件。如果直接用,就出现error:#1113:InlineassemblernotpermittedwhengeneratingThumbcode 最后搜索这条错误,知道是因为__asm("指令");这种语法是内联汇编(inlineassembly)的语法。而RMDK下,内联汇编仅支持ARM汇编语言,不支持Thumb或者Thumb-2汇编语言;但内嵌汇编器支持Thumb和Thumb-2。 __asm放到一个单独的子函数再被调用就没问题了 如下: __asmvoidnop(void) { NOP } 然后在之后的C代码中调用该函数: voidmain() { ... nop(); ...? }

Keil编程常见错误

uint i, j; uchar a = 0xfe; EA = 1; EX0 = 1;不能这样 EA = 1; EX0 = 1; uint i, j; uchar a = 0xfe; 否则出现外部中断.C(18): error C141: syntax error near 'unsigned' 外部中断.C(18): error C202: 'i': undefined identifier 外部中断.C(19): error C141: syntax error near 'unsigned' 外部中断.C(19): error C202: 'a': undefined identifier 外部中断.C(23): error C202: 'i': undefined identifier 外部中断.C(27): error C202: 'a': undefined identifier 外部中断.C(29): error C202: 'a': undefined identifier 外部中断.C(31): error C202: 'i': undefined identifier 外部中断.c - 8 Error(s), 0 Warning(s). 原因:顺序问题,keil中的顺序 外部中断和内部中断的区别是什么; 外部中断是在单片机的外面给单片机一个信号单片机收到这个信号开始中断这是外部中断 内部中断是通过软件把中断打开执行中断

error c236:‘——display’:different length of parameter lists参数列表的长度不同。 检查开始的函数声明和这定义的参数是否一致。 还有参数没说明类型 有很大的区别, 错误3 unreferenced local variable 是未使用定义的变量,就是你定义了但是没有使用。 错误4 syntax error语法错误。 电平触发方式是按照电平的高或者低来触发,所以用的时候,必须在发生触发事件后立即将电平拉到非触发电平上,如果不这样做的话,会导致程序一直在触发事件程序入口处,而不会执行其他地方的程序。所以一般比较少用。 边沿触发方式是按照(上或下)边沿触发事件,由于触发的条件是边沿(上或下),所以即使在触发事件后,保存原来的电平都没有关系,不会一直在触发的,一般都用这种方式。 错误5 #define uchar unsigned char 不能写成 #define unsigned char uchar 否则出现会出现很多错误 错误6 不能这样定义字符数组 int a = “wwwsad”只能用char 错误7 error C244: 'table':can't initialize, bad type or class 。意思是错误的或者坏的类

keil c语言编程常见错误分析要点

1. Warning 280:’i’:unreferenced local variable 说明局部变量i 在函数中未作任何的存取操作解决方法消除函数中i 变量的宣告及即定义的参数在程序中并未调用 2 Warning 206:’Music3’:missing function-prototype 说明Music3( )函数未作宣告或未作外部宣告所以无法给其他函数调用 解决方法将叙述void Music3(void)写在程序的最前端作宣告如果是其他文件的函数则要写成extern void Music3(void),即作外部宣告 3Error:318:can’t open file ‘beep.h’ 说明在编译C:\8051\MANN.C 程序过程中由于main.c 用了指令#i nclude “beep.h”,但却找不到所致解决方法编写一个beep.h 的包含档并存入到c:\8051 的工作目录中 4 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

keil常见错误及解决办法

查看文章 【转】 KEIL C编译器常见警告与错误信息的解决办法 2010-09-03 16:21 转载自朝阳暮鼓 最终编辑朝阳暮鼓 KEIL C编译器常见警告与错误信息的解决办法 1. Warning 280:’i’:unreferenced local variab le 说明局部变量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 的包含档并存入到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 处并修正它

Keil+C编译器常见警告与错误信息的解决方法

??????? 本章列出了编程中可能遇到的致命错误语法错误和警告信息每节包括一个信息 的主要说明和消除错误或警告条件可采取的措施 致命错误 致命错误立即终止编译这些错误通常是命令行指定的无效选项的结果当编译器不能访问一个特定的源包含文件时也产生致命错误 致命错误信息采用下面的格式 C51 FATAL-ERROR – ACTION LINE: ERROR: C51 TERMIANTED. C51 FATAL-ERROR – ACTION FILE: ERROR: C51 TERMIANTED. 下面说明Action和Error中可能的内容

Actions ALLOCATING MEMORY 编译器不能分配足够的存储区来编译指定的源文件 CREATING LIST-FILE / OBJECT-FILE / WORKFILE 编译器不能建立列表文件OBJ文件或工作文件这个错误的出现可能是磁盘 满或写保护或文件已存在和只读 GENERATING INTERMEDIATE CODE 源文件包含的一个函数太大不能被编译器编译成虚拟代码尝试把函数分小或 重新编译 OPENING INPUT-FILE 编译器不能发现或打开所选的源或包含文件 PARSING INVOKE-/#PRAGMA-LINE 当在命令行检测到参数计算或在一个#pragma中检测到参数计算就产生这样 的错误 PARSING SOURCE-FILE/ANALYZING DECLARATIONS 源文件包含太多的外部参考减少源文件访问的外部变量和函数的数目 WRITING TO FILE 当写入列表文件OBJ文件或工作文件时遇到的错误

keil常见错误

1.warning: #550-D: variable "d" was set but never used 描述:变量'd'定义但从未使用,或者是,虽然这个变量你使用了,但编译器认为变量d所在的语句没有意义,编译器把它优化了. 解决:仔细衡量所定义的变量d是否有用,若是认定变量d所在语句有意义,那么尝试用volatile关键字修饰变量d,若是真的没有用,那么删除掉以释放可能的内存. 2.warning: #1-D: last line of file ends without a newline 描述:文件最后一行不是新的一行.编译器要求程序文件的最后一行必须是空行,想了半天没想通为什么要这样. 解决:可以不理会.若是觉得出现警告不爽,那么在出现警告的文件的最后一行敲个回车,空出一行. 3. warning: #111-D: statement is unreachable 描述:声明不可能到达.多出现在这种场合: int main(void) { ... while(1) //无限循环,这在不使用操作系统的程序中最常见 { ...

} return 0; //这句声明在正常情况下不可能执行到,编译器发出警告 } 解决:不理会. 4. warning: C3017W: data may be used before being set 描述:变量'data'在使用前没有明确的赋值.如: uint8 i,data; //定义变量i和data,二者都没有明确赋值 for ( i = 0; i < 8; i++) //变量'i'在语句中被赋值0 { if ( IO1PIN & SO_CC2420 ) data |= 0x01; //变量'data'在使用前没有明确赋值,编译器发出警告 else data &= ~0x01; } 解决:应仔细衡量该变量的初始值是否为0,若是,可以不理会这个警告,因为MDK编译器在程序执行前,会将使用到的数据区初始化为0,但若是该变量的初始值不应该是0,忽略这个警告可能会引起致命错

keil4 常见问题处理办法

keil 4 中的一些常见问题处理办法 keil 软件对于一个单片机编程者来说已经再熟悉不过了,我们都用得很多,但往往我们应用时总会遇到这样那样的问题,但又苦于无法解决,最终只能凑合着用。下面我就个人经验对部分问题的解决方法给大家分享一下,也为初学者打点keil的应用基础。不管他是哪个版本的,其处理办法基本都差不多,甚至可以说是完全一样的,下面我们就谈点实际的问题。 1、keil 4 中注释时,为什么不能打进汉字,都是方框? 其处理方法:Edit -> Configuration,点击Colors & Fonts选项卡,在Window列表中选择Editor C Files,在右侧选择字体Courier,Use color in Comments 不能打钩.

在做完上面的操作后,我来进行一下前后比较: 显示效果如下: 1、操作前: 如果后面注释的黑线是方框,操作一样,但要适当改变字体(eg:宋体、新宋体都行)。 2、操作后显示效果: 通过显示我们可以很直观的看到,注释中的文字已经清楚的显示了出来。 2、改变关键字颜色: 方法:Edit -> Configuration->Colors & Fonts->Editor C Files->keyword->选择foreground为任意你想要的颜色(蓝色)。

显示效果如下: 通过这一系列操作后,你可以将不同类型的数据改成你想要的颜色,方便你的编程和查错。

3、当前操作行底纹颜色和选中文字颜色设置:(1)当前工作行底纹和选中其文字设置: 显示效果: (2)当前选中文字颜色和底纹显示:

显示效果: 通过该项操作后,你可以快速的找到你所编辑的区域,行数,甚至行段。

Keil常见编译错误

Keil编译常见错误 Part 1 Warnings warning: #167-D: argument of type "XXXX" is incompatible with parameter of type "YYYY" 意义: 类型为XXXX的参数(实参)与类型为YYYY的参数(形参)不一致。 说明: 编译器在编译过程中会检查函数调用时的实参与形参数据类型的匹配情况。当发现两者不一致时,给出警告。 warning: #177-D: variable "XXXX" was declared but never referenced. 意义: 定义的变量XXXX从未被使用过。 warning: #223-D: function "XXXX" declared implicitly 意义: 函数XXXX采用了隐含式的声明。 说明: 函数XXXX在调用时没有定义或编译器没有看到该函数的声明,于是编译器将使用了缺省的数据类型作为该函数的定义。 常见问题: 1.函数的定义出现在函数调用之后。 2.函数没有定义 warning: #513-D: a value of type "XXXX" cannot be assigned to an entity of type "YYYY" 意义: 类型为XXXX的值不能赋值给一个YYYY的实体。 说明: 按照C语言的规则,变量和数值都被赋予一定的数据类型。在赋值操作时,变量的类型与其所赋的值的类型必须一致。遇到这类问题时,要仔细观察和思考两者是否存在冲突。常见问题: warning: #1295-D: Deprecated declaration XXXX - give arg types. 意义: 弃用的声明XXXX, 请给出参数的数据类型。 说明: 按照最新C语言标准的要求,函数在声明时必须说明所有参数的类型,以及返回值的类型。当函数没有输入参数或者返回值时,应该使用void来加以说明。 例如: LED_Config()。正确的声明方式应该写成void LED_Config(void) Part 2 Compiling Errors error: #20: identifier "XXXX" is undefined 意义: 标识符XXXX没有定义。 说明: 按照C语言的要求,任何标识符(变量、函数、自定义数据类型等等)都必须先定义再使用。 常见问题:

keil软件编译常见错误解释总结和中文翻译

Keil编译时出现错误和警告的总结 和C 编译器错误信息中文翻译 (1)L15重复调用 ***WARNING L15: MULTIPLE CALL TO SEGMENT SEGMENT: ?PR?SPI_RECEIVE_WORD?D_SPI CALLER1: ?PR?VSYNC_INTERRUPT?MAIN CALLER2: ?C_C51STARTUP 该警告表示连接器发现有一个函数可能会被主函数和一个中断服务程序(或者调用中断服务程序的函数)同时调用,或者同时被多个中断服务程序调用。 出现这种问题的原因之一是这个函数是不可重入性函数,当该函数运行时它可能会被一个中断打断,从而使得结果发生变化并可能会引起一些变量形式的冲突(即引起函数内一些数据的丢失,可重入性函数在任何时候都可以被ISR打断,一段时间后又可以 运行,但是相应数据不会丢失)。 原因之二是用于局部变量和变量(暂且这样翻译,arguments,[自变量,变元一数值,用于确定程序或子程序的值])的内存区被其他函数的内存区所覆盖,如果该函数被中断,则它的内存区就会被使用,这将导致其他函数的内存冲突。 例如,第一个警告中函数WRITE_GMVLX1_REG 在D_GMVLX1.C 或者D_GMVLX1.A51被定义,它被一个中断服务程序或者一个调用了中断服务程序的函数调用了,调用它的函数是VSYNC_INTERRUPT,在MAIN.C中。 解决方法: 如果你确定两个函数决不会在同一时间执行(该函数被主程序调用并且中断被禁止),并且该函数不占用内存(假设只使用寄存器),则你可以完全忽略这种警告。 如果该函数占用了内存,则应该使用连接器(linker)OVERLAY指令将函数从覆盖分析(overlay analysis)中除去,例如: OVERLAY (?PR?_WRITE_GMVLX1_REG?D_GMVLX1 ! *) 上面的指令防止了该函数使用的内存区被其他函数覆盖。如果该函数中调用了其他函数,而这些被调用在程序中其他地方也被调用,你可能会需要也将这些函数排除在覆盖分析(overlay analysis)之外。这种OVERLAY指令能使编译器除去上述警告信息。 如果函数可以在其执行时被调用,则情况会变得更复杂一些。这时可以采用以下几种方法: 1.主程序调用该函数时禁止中断,可以在该函数被调用时用#pragma disable语句来实现禁止中断的目的。必须使用OVERLAY指令将该函数从覆盖分析中除去。 2.复制两份该函数的代码,一份到主程序中,另一份复制到中断服务程序中。 3.将该函数设为重入型。例如:

keil-c语言编程常见错误分析

1. Warning 280: ' i ' :unrefereneed local variable 说明局部变量i在函数中未作任何的存取操作解决方法消除函数中i 变量的宣告及即定义的参数在程序中并未调用 2 Warning 206: ' Music 3 ' :missing function-prototype 说明Music3()函数未作宣告或未作外部宣告所以无法给其他函数调用 解决方法将叙述void Music3(void)写在程序的最前端作宣告如果是 其他文件的函数则要写成extern void Music3(void), 即作外部宣告 3Error:318:can ' t open file ‘ beep.h ' 说明在编译C:\8051\MANN.C 程序过程中由于main.c用了指令# i nclude “ beep.h ”但却找不到所致解决方法编写一个b eep.h的包 含档并存入到c:\8051的工作目录中 4 Error 237: ' LedOn' :function already has a body 说明Led On ()函数名称重复定义即有两个以上一样的函数名称解决方法修正其中的一个函数名称使得函数名称都是独立的 5 ***WARNING 16:UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESS SEGMENT: ?PR?_DELA YX1MS?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 AN-Style prototype C:\8051\INPUT.C 说明程序中有调用DelayX1ms函数但该函数没定义即未编写程序 内容或函数已定义但未作宣告 解决方法编写DelayX1ms的内容编写完后也要作宣告或作外部宣告可在delay.h的包含档宣告成外部以便其它函数调用

KEIL51常见警告错误说明

1.Warning 280:?i?:unreferenced local variable 说明局部变量i 在函数中未作任何的存取操作。 解决方法消除函数中i 变量的宣告。 2.Warning 206:?Music3?:m issing function-prototype 说明Music3( )函数未作宣告或未作外部宣告所以无法给其他函数调用。 解决方法将叙述void Music3(void)写在程序的最前端作宣告如果是其他文件的函数则要写成extern void Music3(void),即作外部宣告。 3.Com pling :C:\8051\MANN.C Error:318:can?t open file …beep.h? 说明在编译C:\8051\MANN.C 程序过程中由于m ain.c 用了指令#include “beep.h”,但却找不到所致。 解决方法编写一个beep.h 的包含档并存入到c:\8051 的工作目录中。 4.Com pling: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 说明DelayX1m s( )函数未被其它函数调用也会占用程序记忆体空间。

解决方法去掉DelayX1m s( )函数或利用条件编译#if …..#endif,可保留该函数并不编译。6. ***WARNING 6 :XDATA SPACE MEMOR Y OVERLAP FROM : 0025H TO: 0025H 说明外部资料ROM 的0025H 重复定义地址 解决方法外部资料ROM 的定义如下 Pdata unsigned char XFR_ADC _at_0x25 其中XFR_ADC 变量的名称为0x25,请检查是否有其它的变量名称也是定义在0x25 处并修正它 7 .WARNING 206:?DelayX1m s?: missing function-prototype C:\8051\INPUT.C Error 267 :?DelayX1m s …:requires ANSI-style prototype C:\8051\INPUT.C 说明程序中有调用DelayX1m s 函数但该函数没定义即未编写程序内容或函数 已定义但未作宣告。 解决方法编写DelayX1m s 的内容编写完后也要作宣告或作外部宣告可在delay.h 的包含档宣告成外部以便其它函数调用。 8. ***WARNING 1:UNRESOLVED EXTERNAL SYMBOL SYMBOL:MUSIC3

keil c常见错误与警告

*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: ?C_START 解决办法: 1.是文件没有添加到工程里。 2.可能是因为存在没有被调用的已经定义的函数。 3.不知道你有没有把Source group组下面的A51.C删掉,如果没有删,在A51.c 上点右键,选择remove file " ". 4.建一个新的c文件,里面写一个空的函数,把该文件添加到project中,注意 该文件不能再选generate assembler SRC file和assemble SRC file选项。重新编译工程,如果警告该函数没被调用,在主文件中调一下。 5.建一个新的c文件,把主文件中的几个函数移至该文件,把该文件添加到project中,注意该文件不能再选generate assembler SRC file和assemble SRC file选项。重新编译工程。 其他:UNRESOLVED EXTERNAL SYMBOL 说明连接的时候没有找到外部变 量 extern xdata unsigned char RxPnt; 只是说明引用外部变量,并不是实际的声明。应该在某个.c文件里有xdata unsigned char RxPnt才行。 extern中对这个变量做了声明,说这个变量将会在这个文件中用到,但并没有定义也就是那个变量并没有真实存在. 需要要某个地方定义一下, 也有可能是你定义了,但是被条件编译给去掉了也有可能.具体查一下工程里的所有源文件看 错误*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS 你写了函数没有调用就会出现警告,不影响运行,也可以将该函数删除

编程时Keil中常见的错误

C51编译器识别错类型有三种: 1、致命错误:伪指令控制行有错,访问不存在的原文件或头文件等。 2、语法及语义错误:语法和语义错误都发生在原文件中。有这类错误时,给出提示但不产生目标文件,错误超过一定数量才终止编译。 3、警告:警告出现并不影响目标文件的产生,但执行时有可能发生问题。程序员应斟酌处理。 1、致命错误 C_51 FATAL_ERROR ACTION: <当前行为> LINE: <错误所在行> ERROR: <错误信息> terminated 或C_51 FATAL ERROR ACTION: <当前行为> FILE: <错误所在文件> ERROR: <错误信息> terminated C_51 TERMINATED C_51 (1) ACTION 的有关信息 *PARSING INVOKE-/#PRAGMA_LINE 在对#pragma 指明的控制行作此法分析时出错。 *ALLOCATING MEMORY 系统分配存储空间时出错。编译较大程序需要512k空间。 *OPENING INPUT_FILE 打开文件时,未找到或打不开源文件/头文件。 *CREATE LIST_FILE/OBJECT_FILE/WORK_FILE 不能创建上述文件。可能磁盘满或文件已存在而且写保护。 *PARSING SOURCE_FILE/ANALYZING DECLARATIONS 分析源程序时发现外部引用名太多。 *GENERATING INTERMEDIATE CODE 源代码被翻译成内部伪代码,错误可能来源于函数太大而超过内部极限。 *WRITING TO FILE 在向文件(work,list,prelist或object file)写时发生错误。 (2)ERROR的有关信息 *MEMORY SPACE EXHAUSTED 所有可用系统空间耗尽。至少需要512k 字节空间。没有足够空间,用户必须检查常驻内存 的驱动程序是否太多。 *FILE DOES NOT EXIST FILE 行定的文本文件名未发现。

keil编译器常见错误及解决方式

Keil C 编译器常见警告与错误信息的解决方法 推荐Keil C 编译器常见警告与错误信息的解决方法 1. Warning 280:?i?:unreferenced local variable 说明局部变量i 在函数中未作任何的存取操作解决方法消除函数中i 变量的宣告 2 Warning 206:?Music3?:missing -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 用了指令#i nclude “beep.h”,但却找不到所致解决方法编写一个beep.h 的包含档并存入到c:\8051 的工作目录中 4 Compling:C:\8051\LED.C Error 237:?LedOn?: already has a body 说明LedOn( )函数名称重复定义即有两个以上一样的函数名称 解决方法修正其中的一个函数名称使得函数名称都是独立的 5 ***W ARNING 16:UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESS SEGMENT: ?PR?_DELAYX1MS?DELAY 说明DelayX1ms( )函数未被其它函数调用也会占用程序记忆体空间解决方法去掉DelayX1ms( )函数或利用条件编译#if …..#endif,可保留该函数并不编译 6 ***W ARNING 6 :XDA TA SPACE MEMORY OVERLAP FROM : 0025H TO: 0025H 说明外部资料ROM 的0025H 重复定义地址 解决方法外部资料ROM 的定义如下Pdata unsigned char XFR_ADC _at_0x25 其中XFR_ADC 变量的名称为0x25,请检查是否有其它的变量名称也是定义在0x25 处并修正它7 W ARNING 206:?DelayX1ms?: missing -prototype C:\8051\INPUT.C Error 267 :?DelayX1ms …:requires ANSI-style prototype C:\8051\INPUT.C 说明程序中有调用DelayX1ms 函数但该函数没定义即未编写程序内容或函数已定义但未作宣告 解决方法编写DelayX1ms 的内容编写完后也要作宣告或作外部宣告可在delay.h 的包含档宣告成外部以便其它函数调用 8 ***W ARNING 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 说明程序中有调用MUSIC 函数但未将该函数的含扩档C 加入到工程档Prj 作编译和连接解决方法设MUSIC3 函数在MUSIC C 里将MUSIC C 添加到工程文件中去 9 ***ERROR 107:ADDESS SPACE OVERFLOW

C51-keil编译常见错误和警告处理

keil错误 C51编译器识别错类型有三种 1、致命错误:伪指令控制行有错,访问不存在的原文件或头文件等。 2、语法及语义错误:语法和语义错误都发生在原文件中。有这类错误时,给出 提示但不产生目标文件,错误超过一定数量才终止编译。 3、警告:警告出现并不影响目标文件的产生,但执行时有可能发生问题。程序 员应斟酌处理。 D.1 致命错误 C_51 FATAL_ERROR ACTION: <当前行为> LINE: <错误所在行> ERROR: <错误信息> terminated 或C_51 FA TAL ERROR ACTION: <当前行为> FILE: <错误所在文件> ERROR: <错误信息> terminated C_51 TERMINATED C_51 (1) ACTION 的有关信息 *PARSING INVOKE-/#PRAGMA_LINE 在对#pragma 指明的控制行作此法分析时出错。 *ALLOCATING MEMORY 系统分配存储空间时出错。编译较大程序需要512k空间。 *OPENING INPUT_FILE 打开文件时,未找到或打不开源文件/头文件。 *CREATE LIST_FILE/OBJECT_FILE/WORK_FILE 不能创建上述文件。可能磁盘满或文件已存在而且写保护。 *PARSING SOURCE_FILE/ANALYZING DECLARATIONS 分析源程序时发现外部引用名太多。 *GENERATING INTERMEDIATE CODE 源代码被翻译成内部伪代码,错误可能来源于函数太大而超过内部极限。 *WRITING TO FILE 在向文件(work,list,prelist或object file)写时发生错误。 (2)ERROR的有关信息 *MEMORY SPACE EXHAUSTED 所有可用系统空间耗尽。至少需要512k 字节空间。没有足够空间,用户必须检查常驻内存的驱动程序是否太多。 *FILE DOES NOT EXIST FILE 行定的文本文件名未发现。 *CAN?T CREAT FILE FILE行定义的文件不能被创建。 *SOURCE MUST COME FROMA DISK_FILE 源文件和头文件必须存在于硬盘或软盘上。控制台、CON、CI 或类似设备不允许作为输入文件。 *MORE THAN 256 SEGMENTS/PUBLICS/EXTERNALS

相关文档