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

C51-keil编译常见错误和警告处理
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

受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 INVOCATION 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:m issing? ;?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 relativestruct/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

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

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

*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。

*关于INTEL目标模块格式(OMF-51)的极限值。

*函数类型段总和最多256 个。

*全局符号(PUBLIC)最多256 个。

*外部符号(EXTERNAL)最多256 个。

c语言编译常见错误列表

1."c" not an argument in function sum 该标识符不是函数的参数 2.array bounds missing ] in function main 缺少数组界限符"]" 3.Array size too large in function main 数组规模太大 4.bad file name format in include directive 在包含指令中的文件名格式不正确. 5.Call of non-function in function main 调用未经过定义的函数. 6.cannot modify a const object in function main 对常量不能进行修改. 7.character constant too long in function main 字符常量太大 8.constant expression required in funtion main 数组定义的时候,数组大小要求是常数 https://www.360docs.net/doc/8e14216495.html,pound statment missing } in function main 复合语句漏掉符号"{" 10.declaration syntax error in function main 宣告语法错误 11.expression syntax in function main 表达式语法错误 12. extra parameter in call to sum in function 调用函数时使用了过多的参数 13.illegal use of floating point in function main 浮点数的不合法使用 14.illegal pionter subtraction in function main 不合法的指针相减 15.invalid pointer addition in function main 无效的指针相加 16.out of memory in function main 内存不足 17.statement missing ; in function main 语句后面漏掉分号. 警告报错

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指令能使编译器除去上述警告信息。 如果函数可以在其执行时被调用,则情况会变得更复杂一些。这时可以采用以下几种方法:

编译原理教程课西安电子科大出版社第三版后习题答案——第二章

第二章 词法分析 2.1 完成下列选择题: (1) 词法分析器的输出结果是 。 a. 单词的种别编码 b. 单词在符号表中的位置 c. 单词的种别编码和自身值 d. 单词自身值 (2) 正规式M1和M2等价是指 。 a. M1和M2的状态数相等 b. M1和M2的有向边条数相等 c. M1和M2所识别的语言集相等 d. M1和M2状态数和有向边条数相等 (3) DFA M(见图2-1)接受的字集为 。 a. 以0开头的二进制数组成的集合 b. 以0结尾的二进制数组成的集合 c. 含奇数个0的二进制数组成的集合 d. 含偶数个0的二进制数组成的集合 【解答】 (1) c (2) c (3) d 图2-1 习题2.1的DFA M 2.2 什么是扫描器?扫描器的功能是什么? 【解答】 扫描器就是词法分析器,它接受输入的源程序,对源程序进行词法分析并识别出一个个单词符号,其输出结果是单词符号,供语法分析器使用。通常是把词法分析器作为一个子程序,每当词法分析器需要一个单词符号时就调用这个子程序。每次调用时,词法分析器就从输入串中识别出一个单词符号交给语法分析器。 2.3 设M=({x,y}, {a,b}, f, x, {y})为一非确定的有限自动机,其中f 定义如下: f(x,a)={x,y} f{x,b}={y} f(y,a)=Φ f{y,b}={x,y} 试构造相应的确定有限自动机M ′。 【解答】 对照自动机的定义M=(S,Σ,f,So,Z),由f 的定义可知f(x,a)、f(y,b)均为多值函数,因此M 是一非确定有限自动机。 先画出NFA M 相应的状态图,如图2-2所示。 图2-2 习题2.3的NFA M 用子集法构造状态转换矩阵,如表 表2-1 状态转换矩阵 1b a

C语言调试常见错误及修改方法(附习题)

1.调试 C 程序时常见的错误类型分析 一般情况下,错误主要分为两大类:一、语法错误。对于这种错误,用编译器很容易解决。所以,改错题的第一步是先编译,解决这类语法错误。下面总结了二级C 语言上机改错题中常见的语法错误: (1) 丢失分号,或分号误写成逗号。 (2) 关键字拼写错误,如本来小写变成大写。 (3) 语句格式错误,例如for 语句中多写或者少写分号。 (4) 表达式声明错误,例如:少了() (5) 函数类型说明错误。与main ()函数中不一致。 (6) 函数形参类型声明错误。例如:少* 等。 (7) 运算符书写错误,例如:/ 写成了。二、逻辑错误,或者叫语义错误,这和实现程序功能紧密相关,一般不能用编译器发现。对于逻辑错误可以按这样的步骤进行查找。 (1) 先读试题,看清题目的功能要求。 (2) 通读程序,看懂程序中算法的实现方法。 (3) 细看程序,发现常见错误点。 2.改错题的改错方式总结,当然这些总结只能对大部分改错行有效 1、若错误行是函数首部,可分为以下几种情况: A、该行最后若有分号则删除,中间若有分号则改成逗号 B、形参类型不一致的问题,特别是指针类型,若后面用到某形参时有指针运算则该形参必为指针类型;若形参是二维数组或指向m 个元素的指针变量,则第二维的长度必须与main 中对应数组的第二维长度相同 C、函数类型不一致的问题,若函数中没有return语句则函数类型为void,若有return语句则函数的类型必须与return 后变量的类型一致。 2、若错误行是if 或while 语句,则首先看有没有用小括号将整个表达式括起,若没有则加上小括号。 3、若错误行中有if、while 、for 则要特别注意条件表达式的错误问题: A、指针变量的应用,若表达式中有指针变量且没有指针运算符,则加上指针运算符 B、若条件表达式中只有一个等于号,则改成两个等于号,若为其它比较运算符则一般是进行逆转或加一个等于号 C、f or 中要用分号分隔表达式,而不是用逗号 4、语法错误 A、语句缺少分号,若错误行中有语句没有用分号结束,则加上分号。 B、大小写不对,若错误行中有大写字母则一般都改成小写字母。 5、指针变量的运用,若错误行中有指针变量,并且该变量名前没有指针运算符则一般都是加上指针运算符 6、若错误行为return 语句,则首先看是否是缺少分号若是则加上分号即可;否则就是return 后的变量或表达式错误(此时可通过看题意,来分析该返回哪一变量或表达式)

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

https://www.360docs.net/doc/8e14216495.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 - 该警告表示连接器发现有一个函数可能会被主函数和一个中断服务程序(或者调用中断服务程序的函数)同时调用,

C语言编译中的常见错误

C语言编译中的常见错误 1、警告类错误 ?‘XXX’declare but never used变量XXX已定义但从未用过。 ?‘XXX’is assigned a value which is never used变量XXX已赋值但从未用过。?Code has no effect 程序中含有没有实际作用的代码。 ? Non-portable pointer conversion不适当的指针转换,可能是在应该使用指针的 地方用了一个非0的数值。 ?Possib le use of ‘XXX’before definition表达式中使用了未赋值的变量 ?Possibly incorrect assignment这样的赋值可能不正确 ?Redeclaration of ‘main’一个程序文件中主函数main不止一个。 ?Suspicious pointer conversion可疑的指针转换。通常是使用了基本类型不匹配的指针。 ?Unreachable code程序含有不能执行到的代码。 2、错误或致命错误 ?Compound statement missing } in function main程序结尾缺少括号}。 ?“}”expected;“(”expected等复合语句或数组初始化的结尾缺少“)”;“(”。 ? Case outside of switch case不属于Switch结构,多由于switch结构中的花括 号不配对所致。 ?Case statement missing ‘:’ switch结构中的某个case之后缺少冒号。 ? Constant expression required定义数组时指定的数组长度不是常量表达式。 ? Declaration syntax error 结构体或联合类型的定义后缺少分号。 ? Declaration was expected 缺少说明,通常是因为缺少分界符如逗号、分号、右圆 括号等所引起的。 ?Default outside switch Default部分放到了switch结构之外,一般是因为花括号 不匹配而引起的。 ?do statement must have while do语句中缺少相应的while部分。 ? Expression syntax 表达式语法错。如表达式中含有两个连续的运算符

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(); ...? }

编译出错种类

VC++编译的常见错误 1、fatal error C1010: unexpected end of file while looking for precompiled header directive。 寻找预编译头文件路径时遇到了不该遇到的文件尾。(一般是没有#include "stdafx.h") 2、fatal error C1083: Cannot open include file: 'R…….h': No such file or directory 不能打开包含文件“R…….h”:没有这样的文件或目录。 3、error C2011: 'C……': 'class' type redefinition 类“C……”重定义。 4、error C2018: unknown character '0xa3' 不认识的字符'0xa3'。(一般是汉字或中文标点符号) 5、error C2057: expected constant expression 希望是常量表达式。(一般出现在switch语句的case分支中) 6、error C2065: 'IDD_MYDIALOG' : undeclared identifier “IDD_MYDIALOG”:未声明过的标识符。 7、error C2082: redefinition of formal parameter 'bReset' 函数参数“bReset”在函数体中重定义。 8、error C2143: syntax error: missing ':' before '{' 句法错误:“{”前缺少“;”。 9、error C2146: syntax error : missing ';' before identifier 'dc' 句法错误:在“dc”前丢了“;”。 10、error C2196: case value '69' already used 值69已经用过。(一般出现在switch语句的case分支中) 11、error C2509: 'OnTimer' : member function not declared in 'CHelloView' 成员函数“OnTimer”没有在“CHelloView”中声明。 12、error C2511: 'reset': overloaded member function 'void (int)' not found in 'B' 重载的函数“void reset(int)”在类“B”中找不到。 13、error C2555: 'B::f1': overriding virtual function differs from 'A::f1' only by return type or calling convention 类B对类A中同名函数f1的重载仅根据返回值或调用约定上的区别。 14、error C2660: 'SetTimer' : function does not take 2 parameters “SetTimer”函数不传递2个参数。 15、warning C4035: 'f……': no return value “f……”的return语句没有返回值。 16、warning C4553: '= =' : operator has no effect; did you intend '='? 没有效果的运算符“= =”;是否改为“=”? 17、warning C4700: local variable 'bReset' used without having been initialized 局部变量“bReset”没有初始化就使用。

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 。意思是错误的或者坏的类

西电软件学院算法实验报告

第二次试验 一、 问题: Matrix-chain product 分析: 本题是矩阵链乘问题,需要求出最优括号化方案。即在矩阵的乘法链上添加括号来改变运算顺序以使矩阵链乘法的代价降低。 可以分析该链乘的一个子段总结一些结论。假设m[i,j]表示A i*…*A j的链成需要进行的乘法次数(假设j-i足够大),我们可以将A i*…*A j分为两段进行计算:(A i*…*A k)*(A k+1*…*A j)可以得出m[i,j]的递推公式 可以得出,当i=j的时候,m[i,j]=0。当i为例,可以得出如下矩阵:

通过m数组可以得出最少的乘法次数,通过s数组可以输出最优方案。 遇到的问题: 在输出s数组的结果的时候仍然需要递归调用,需要合适的控制递归的条件。 总结: 在矩阵链乘问题中可以看出,动态规划结合递归的思想可以快捷的解决很多问题。本题中,重点是归纳出m[i,j]的递推公式。 二、 问题: Longest Common Subsequence 分析: 本题即是最长公共子序列问题。假设有序列A[m]和序列B[n],显然,对于每一个[i,j],都对应着一个公共子序列的长度。假设长度为c,就可以得到一个二维数组c[m,n]。对于c[i,j],当Ai=Bj的时候,问题就转变为求A[1..i-1]和B[1..j-1]的公共子序列长度的问题,所以c[i,j]的长度就是c[i-1,j-1] + 1; 同理,当Ai != Bj的时候,c[i,j]应该在c[i-1,j]与c[i,j-1]中取最大值。另外,当i或者j等于0的时候,显然c的值为0。由上面所述,可以得到递推公式如下: 为了解决这个问题,还如要定义另一个数组用于存放c数组中每一个元素的来源。这个来源其实就反映了公共子串。可以通过箭头表示来源,相连的箭头序列中指向左上方的箭头最多的一串对应的就是最长公共子序列。 比如对于题目中给出的第一个例子 X: xzyzzyx Y: zxyyzxz 可以用一个矩阵表示计算的过程:

Android系统编译过程中常见问题汇总(2)

android源码编译常见问题 分类:android中级2013-03-09 16:20 397人阅读评论(2) 收藏举报编译过程: (在Ubuntu 11.04 64位机器上编译) 1. source build/envsetup.sh //初始化与环境envsetup.sh脚本 初始化完成,显示如下 including device/samsung/maguro/vendorsetup.sh including device/samsung/tuna/vendorsetup.sh including device/ti/panda/vendorsetup.sh including sdk/bash_completion/adb.bash 2. lunch full-eng //选择的目标 ============================================ PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=4.0.1 TARGET_PRODUCT=full TARGET_BUILD_VARIANT=eng TARGET_BUILD_TYPE=release TARGET_BUILD_APPS= TARGET_ARCH=arm TARGET_ARCH_VARIANT=armv7-a HOST_ARCH=x86 HOST_OS=linux HOST_BUILD_TYPE=release BUILD_ID=ITL41D ============================================ //建立与一切使。GNU的make -JN参数可以并行处理任务,它是共同使用的任务数, //N的1倍和2倍之间是被用于建立计算机硬件线程数量。例如在E5520双机(2个CPU, //每个CPU 4核,每核心2线程),最快的构建与命令之间的J16和 -J32。 3. make -j4 编译完成

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

北京理工大学软件学院编译原理第一次实验作业

试验1:PL/0编译程序跟踪与分析阅读第10章PL/0编译程序并完成: P304 —10.1 ,10.2,10.3 ,10.4。(PL/0源程序放在在网络教室)

试验2:词法分析试验二选一 (一)Java语言词法分析器的设计与实现 一.实验目的 1.强化对系统软件综合工程实现能力、规划能力的训练;2.加强对词法分析原理、方法和基本实现技术的理解;二.实验内容 用C语言(或C++ )作为宿主语言完成: Java语言词法分析器的设计和实现 其中具体要求: 1.使用DFA实现词法分析器的设计; 2.实现对Java源程序中注释的过滤; 3.利用两对半缓冲区从文件中逐一读取单词; 4.词法分析结果属性字流存放在独立文件(文件名: scanner_output)中; 5.具有报告词法错误和出错位置(源程序行号和该行字符)的 功能; 注:附Java语言词法规则(附件一); 附Java语言词法分析器的属性字设计(附件二) 三.实验验收与评分要求 1.编写Java语言词法分析器的源程序并调试通过; 2.通过测试程序的验收 (测试程序名称:Test-Lexcial); 3. 提交简明扼要的书面实验报告。内容包括:FA设计; 源程序主要函数功能;主要数据结构设计。

附件一 JA V A语言词法规则 关键字: abstract boolean break byte case catch char class const continue default do double else extends false final finally float for goto if implements import instanceof int interface long native new null package private protected public return short static super switch synchronized this throw throws transient true try void volatile while 标识符: 字母或美元符号“$”或下划线开头,连接字母或美元符号“$”或下划线或数字字符的串。 常量: 整型常量:123, 0, -456, 0123 , 0x123, -0X12,123L 实型常量: 1.23, 0.123, .123, 123., 123.0, 123e3, 123E3, 12.3F 布尔常量:true、false 字符串常量:"This is a constant string."。 字符常量:‘ a’ , 转义字符描述 \ddd 1到3位8进制数据所表示的字符(ddd) \uxxxx 1到4位16进制数所表示的字符(xxxx) \' 单引号字符 \\ 反斜杠字符 \r 回车 \n 换行 \f 走纸换页 \t 横向跳格 \b 退格 界限符:

编译时的常见错误

一、编译时的常见错误 1. 数据类型错误。此类错误是初学者编程时的常见现象, 下面是一些要引起注意的错误: (1) 所有变量和常量必须要加以说明。 (2) 变量只能赋给相同类型的数据。 (3) 对scanf()语句, 用户可能输入错误类型的数据项, 这将导致运行时出错, 并报出错信息。为避免这样的错误出现, 你就提示用户输入正确类型的数据。 (4) 在执行算术运算时要注意: a. 根据语法规则书写双精度数字。要写0.5, 而不是写.5; 要写1.0, 而不是1。尽管C语言会自动地把整型转换成双精度型, 但书写双精度型是个好习惯。让C语言为你做强行转换这是一种效率不高的程序设计风格。这有可能导致转换产生错误。 b. 不要用0除。这是一个灾难性的错误, 它会导致程序失败, 不管C 语言的什么版本, 都是如此, 执行除法运算要特别小心。 c. 确保所有的双精度数(包括那些程序输入用的双精度数) 是在实数范围之内。 d. 所有整数必须在整数允许的范围内。这适用于所有计算结果, 包括中间结果。 2. 将函数后面的";"忘掉。此时错误提示色棒将停在该语句下的一行, 并显示: Statement missing ; in function <函数名> 3. 给宏指令如#include, #define等语句尾加了";"号。 4. "{"和"}"、"("和")"、"/*"和"*/"不匹配。引时色棒将位于错误所在的行, 并提示出有关丢掉括号的信息。 5. 没有用#include指令说明头文件, 错误信息提示有关该函数所使用的参数未定义。 6. 使用了Turbo C保留关键字作为标识符, 此时将提示定义了太多数据类型。 7. 将定义变量语句放在了执行语句后面。此时会提示语法错误。 8. 使用了未定义的变量, 此时屏幕显示: Undefined symbol '<变量名>' in function <函数名> 9. 警告错误太多。忽略这些警告错误并不影响程序的执行和结果。编译时当警告错误数目大于某一规定值时(缺省为100)便退出编译器, 这时应改变集成开发环境Options/Compiler/Errors中的有关警告错误检查开关为off。 10. 将关系符"=="误用作赋值号"="。此时屏幕显示: Lvalue required in function <函数名> 二、连接时的常见错误 1. 将Turbo C库函数名写错。这种情况下在连接时将会认为此函数是用户自定义函数。此时屏幕显示: Undefined symbol '<函数名>' in <程序名> 2. 多个文件连接时, 没有在"Project/Project name中指定项目文件(.PRJ文件), 此时出现找不到函数的错误。 3. 子函数在说明和定义时类型不一致。 4. 程序调用的子函数没有定义。 三、运行时的常见错误 1. 路径名错误。在MS-DOS中, 斜杠(\)表示一个目录名; 而在Turbo C 中斜杠是个某个字符串的一个转义字符, 这样, 在用Turbo C 字符串给出一个路径名时应考虑"\"的转义的作用。例如, 有这样一条语句: file=fopen("c:\new\tbc.dat", "rb"); 目的是打开C盘中NEW目录中的TBC.DAT文件, 但做不到。这里"\"后面紧接的分别是"n"及"t", "\n"及"\t"将被分别编译为换行及tab字符, DOS将认为它是不正确的文件名而拒绝接受, 因为文件名中不能和换行或tab字符。正确的写法应为: file=fopen("c:\\new\\tbc.dat", "rb"); 2. 格式化输入输出时, 规定的类型与变量本身的类型不一致。例如: float l;

西电软院操作系统课程设计报告样本

操作系统课程设计 实验报告册 班级: 学号: 姓名: 教师: 褚华

目录 实验说明 重要提示 实验1 系统调用 实验2 内核模块 实验3 文件系统 实验4 设备管理

实验说明 1.实验做为学习的重要促进手段, 是为了深化对理论的理解, 锻炼实践动手能力。 2.实验同时也作为考核的手段。 3.实验内容会在课程进行中下达, 而且会分次地、部分地被抽查。 4.课程结束时, 要求把所有的实验整理成一个完整的电子文档并上交, 做为最后成绩的评定依据。 5.如果有兴趣的合适的题目, 也可自己选题目。 格式说明 1.本文档文件名命名为”学号-姓名”, 如”13071000_小王”。 2.留白部分不足的自己调整长度, 也可加页( 增加内容应在表格内) 。 3.每次的实验报告都要在这个文件中( 按照实验次序依次) 增加, 而不是每次一个新的word文件。 4.本文档保存为doc格式( 请勿用Word 的docx格式) 。 重要提示: 1.实验正文建议使用小四号或五号宋体。 2.若附加图形, 则请直接嵌入到实验手册相应位置。

3.各实验的源程序, 请按实验分目录存放, 如第一个实验的源程序存放在目录lab1下, 第二个实验的源程序存放在目录lab2下等等, 依次类推。 可互相讨论, 但严禁抄袭网络或同学的实验结果。

要给linux增加系统调用, 能够用修改内核源码并重新编译的方法实现一: 基本过程是 1.在系统调用表文件中给要增加的一个系统调用的名字 2.在系统调用号文件中给要新增的系统调用分配一个系统调用号 3.增加系统调用声明 4.添加系统调用的实现 5.重新编译内核 6.编写测试驱动函数, 测试系统调用是否添加成功 一: 在系统调用表文件中增加系统调用的名字 二: 在系统调用号文件中给要新增的系统调用分配一个系统调用号 三: 增加系统调用声明 四: 添加系统调用的实现

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 处并修正它

JAVA常见编译错误信息及说明

Java编译错误信息及说明 1、java:33:不是语句 解释:程序中出现了没有任何意义的字符(串),可能是无意中打出了没有任何意义的字符; 2、java:34:需要';' 解释:某条语句没有以分号结束; 3、java:36:缺少返回语句 解释:带返回值的函数缺少return语句; 4、java:33:不兼容的类型 解释:运算符两边的数据类型不一致或者不能做隐式转换; 5、java:36:无法访问的语句 解释:此语句永远不可能被执行,可能是此语句之前存在类似于while(true)的语句,导致此语句永远不可能被执行; 6、java:34:非法的表达式开始 解释:有不符合语法规范的表达式出现; 7、java:34:找不到符号 解释:使用了没有定义或没有引入的变量; 8、java:33:非法字符:\65307 解释:在中文输入状态下输入了一些标点符号; 9、java:18:不可转换的类型 解释:运算符两边的数据类型不一致或者不能做隐式转换; 10、java:19:"else"不带有"if" 解释:编译器找到else语句但是没有找到与之对应的if语句,可能是由于大括号没有成对出现;

11、java:12:可能损失精度 解释:把高精确度类型的数据赋值给低精确度类型的变量; 12、java:17:需要')' 解释:括号没有成对出现; 13、java:8:可能尚未初始化变量s 解释:局部变量s没有赋初值; 14、java:7:不可比较的类型:int和Boolean 解释:运算符两边操作数的数据类型不符合运算符的使用规范; 15、java:6:已在isLeap(int)中定义year 解释:变量year被重复定义; 16、java:21:字符字面值的行结尾不合法 解释:程序语句的结尾不是java规定的结束符号,而是其他的符号; 17、java:9:需要<标识符> 解释:可能是由于用户指定了数据类型,但未指定该类型的变量名; 18、java:8:无法从静态上下文中引用非静态变量this 解释:在静态方法中使用了非静态变量this; 19、java:12:在switch或loop外部中断 解释:在非循环语句或非switch语句中使用了中断循环功能的语句break; 20、java:21:对于结果类型为void的方法,无法返回值 解释:空返回值方法中出现了return语句; 21、java:12:需要数组,但找到int 解释:在应该出现数组的地方没有找到数组类型的变量,而是找到int类型的变量; 22、java:13:无法将Node中的setData(int)应用于()

相关文档
最新文档