keil编译错误集.docx

上传人:b****1 文档编号:14327612 上传时间:2023-06-22 格式:DOCX 页数:15 大小:25.12KB
下载 相关 举报
keil编译错误集.docx_第1页
第1页 / 共15页
keil编译错误集.docx_第2页
第2页 / 共15页
keil编译错误集.docx_第3页
第3页 / 共15页
keil编译错误集.docx_第4页
第4页 / 共15页
keil编译错误集.docx_第5页
第5页 / 共15页
keil编译错误集.docx_第6页
第6页 / 共15页
keil编译错误集.docx_第7页
第7页 / 共15页
keil编译错误集.docx_第8页
第8页 / 共15页
keil编译错误集.docx_第9页
第9页 / 共15页
keil编译错误集.docx_第10页
第10页 / 共15页
keil编译错误集.docx_第11页
第11页 / 共15页
keil编译错误集.docx_第12页
第12页 / 共15页
keil编译错误集.docx_第13页
第13页 / 共15页
keil编译错误集.docx_第14页
第14页 / 共15页
keil编译错误集.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

keil编译错误集.docx

《keil编译错误集.docx》由会员分享,可在线阅读,更多相关《keil编译错误集.docx(15页珍藏版)》请在冰点文库上搜索。

keil编译错误集.docx

keil编译错误集

keil编译错误集

2009-06-0300:

33

致命错误

致命错误立即终止编译这些错误通常是命令行指定的无效选项的结果当编译器不

能访问一个特定的源包含文件时也产生致命错误

致命错误信息采用下面的格式

C51FATAL-ERROR–

ACTION:

LINE:

ERROR:

C51TERMIANTED.

C51FATAL-ERROR–

ACTION:

FILE:

ERROR:

C51TERMIANTED.

下面说明Action和Error中可能的内容

Actions

ALLOCATINGMEMORY

编译器不能分配足够的存储区来编译指定的源文件.

CREATINGLIST-FILE/OBJECT-FILE/WORKFILE

编译器不能建立列表文件,OBJ文件,或工作文件这个错误的出现可能是磁盘

满或写保护,或文件已存在和只读.

GENERATINGINTERMEDIATECODE

源文件包含的一个函数太大,不能被编译器编译成虚拟代码.尝试把函数分小或

重新编译.

OPENINGINPUT-FILE

编译器不能发现或打开所选的源或包含文件.

PARSINGINVOKE-/#PRAGMA-LINE

当在命令行检测到参数计算,或在一个#pragma中检测到参数计算,就产生这样

的错误.

PARSINGSOURCE-FILE/ANALYZINGDECLARATIONS

源文件包含太多的外部参考.减少源文件访问的外部变量和函数的数目.

WRITINGTOFILE

当写入列表文件,OBJ文件,或工作文件时遇到的错误.

Errors

‘(‘AFTERCONTROLEXPECTED

一些控制参数需要用括号包含一个参数.当没有左括号时显示本信息.

‘)’AFTERPARAMETEREXPECTED

本信息表示包含没有参数的右括号.

BADDIGITINNUMBER

一个控制参数的数字参数包含无效字符.只能是十进制数.

CAN’TCREATEFILE

在FILE行定义的文件名不能建立.

CAN’THAVEGERERALCONTROLININVOCATIONLINE

一般控制(例如EJECT)不能包含在命令行.把这些控制用#pragma声明放在

源文件中.

FILEDOESNOTEXIST

没有发现定义在FILE行的文件.

FILEWRITE-ERROR

因为磁盘空间不够,写到列表,预打印,工作,或目标文件时出错.

IDENTIFIEREXPECTED

当DEFINE控制没有参数时产生本信息.DEFINE要求一个参数作为标识符.这

和C语言的规则相同.

MEMORYSPACEEXHAUSTED

编译器不能分配足够的存储区来编译指定的源文件.如果始终出现这个信息,应

该把源文件分成两个或多个小文件再重新编译.

MORETHAN100ERRORSINSOURCE-FILE

在编译时检测到的错误超过100个.这使编译器终止.

MORETHAN256SEGMENTS/EXTERNALS

在一个源文件中的参考超过256.个单个的源文件不能有超过256个函数或外部参

考.这是INTEL目标模块格式(OMF-51)的历史的限制.包含标量和/或bit声明

的函数在OBJ文件中生成两个,有时候三个段定义

NON-NULLARGUMENTEXPECTED

所选的控制参数需要用括号包含一个参数(例如,一个文件名或一个数字)

OUTOFRANGENUMBER

一个控制参数的数字参数超出范围.例如OPTIMIZE控制只允许数字0到6,值

7就将产生本错误信息.

PARSESTACKOVERFLOW

解析堆栈溢出.如果源程序包含很复杂的表达式或如果块的嵌套深度超过31级,

就会出现这个错误

PREPROCESSOR:

LINETOOLONG(32K)

一个中间扩展长度超过32K字符.

PREPROCESSOR:

MACROSTOONESTED

在宏扩展期间,预处理器所用的堆栈太大.这个信息通常表示一个递归的宏定义,

但也可表示一个宏嵌套太多.

RESPECIFIEDORCONFLICTINGCONTROL

一个命令行参数指定了两次,或命令行参数冲突.

SOURCEMUSTCOMEFROMADISK-FILE

源和包含文件必须存在.控制台CON;,;CI;,或类似的设备不能作为输入文件.

UNKNOWNCONTROL

所选的控制参数不认识.

语法和语义错误

语法和语义错误一般出现在源程序中.它们确定实际的编程错误.当遇到这些错误时,

编译器尝试绕过错误继续处理源文件.当遇到更多的错误时,编译器输出另外的错误,

信息但是不产生OBJ文件.

语法和语义错误在列表文件中生成一条信息这些错误信息用下面的格式

***ERRORnumberINLINElineOFfile:

errormessage

这里

number  错误号

line  对应源文件或包含文件的行号

file   产生错误的源或包含文件名

errormessage对错误的叙述说明

下表按错误号列出了语法和语义错误错误信息列出了主要说明和可能的原因和改正

号错误信息和说明

100跳过不可打印字符0x?

?

在源文件中发现一个非法字符.(注意不检查注释中的字符)

101字符串没结束

一个字符串没有用双引号终止.

102字符串太长

一个字符串不能超过4096个字符用串联符号\在逻辑上可延长字符串

超过4096个字符这个模式的行终止符在词汇分析时是连续的

103无效的字符常数

一个字符常数的格式无效符号\c是无效的除非c是任何可打印的ASCII

字符

125声明符太复杂20

一个目标的声明可包含最多20个类型修饰符[]*这

个错误经常伴随着错误126

126类型堆栈下溢

类型声明堆栈下溢这个错误通常死错误125的副产品

127无效存储类

一个目标用一个无效的存储空间标识符声明如果一个目标在一个函数外用存

储类auto或register声明就会产生本错误

129在标记前缺少

本错误通常表示前一行缺少分号当出现本错误时编译器会产生很多错误信

130值超出范围

在一个using或interrupt标识符后的数字参数是无效的using标识符要求一个0

到3之间的寄存器组号interrupt标识符要求一个0到31之间的中断矢量号

131函数参数重复

一个函数有相同的参数名在函数声明中参数名必须是唯一的

132没在正式的参数列表

一个函数的参数声明用了一个名称没在参数名列表中例如

charfunction(v0,v1,v2)

char*v0,*v1,*v5;

/*‘v5’没在正式列表中*/

{

/*…*/

}

134函数的xdata/idata/pdata/data不允许

函数通常位于code存储区不能在别的存储区运行函数默认定义为存储类型

code

135bit的存储类错

bit标量的声明可能包含一个static或extern存储类register或alien类是无效的

136变量用了void

void类型只允许作为一个不存在的返回值或一个函数的空参数列表void

func(void)或和一个指针组合void*

138Interrupt()不能接受或返回值

一个中断函数被定义了一个或多个正式的参数或一个返回值中断函数不能

包含调用参数或返回值

140位在非法的存储空间

bit标量的定义可以包含可选的存储类型data如果没有存储类型则默认为

data因为位通常在内部数据存储区当试图对一个bit标量定义别的数据类型

时会产生本错误

141临近标志语法错误期待别的标志…

编译器所见的标志是错误的参考所显示的期待的内容

142无效的基位置

一个sfr或sbit声明的基位置是错误的有效的基位置范围在0x80到0xFF之间

如果用符号基位置^位号声明则基位置必须是8的倍数

143无效的绝对位位置

sbit声明中的绝对位位置必须在0x80到0xFF之间

144基位置^位号无效的位号

sbit声明中定义的位号必须在0到7之间

145未知的sfr

146无效sfr

一个绝对位基位置^位号的声明包含一个无效的基位置标识符基位置必

须是已经声明的sfr任何别的名称是无效的

147目标文件太大

单个目标文件不能超过6553564K字节-1

149struct/union包含函数成员

struct或union不能包含一个函数类型的成员但是指向函数的指针是可以的

150struct/union包含一个bit成员

一个union不能包含bit类型成员这是8051的结构决定的

151struct/union自我关联

一个结构不能包含自己

152位号超出位域

位域声明中指定的位号超过给定基类的位号

153命名的位域不能为零

命名的位域为零只要未命名的位域允许为零

154位域指针

指向位域的指针不允许

155位域要求char/int

位域的基类要求char或intunsignedchar和unsignedint类型也行

156alien只允许对函数

157alien函数带可变参数

存储类alien只对外部PL/M-51函数允许符号char*,…在alien函数中是非

法的PL/M-51函数通常要求一个固定的参数表

158函数包含未命名的参数

一个函数的参数列表定义包含一个未命名的抽象类型定义这个符号只允许在

函数原型中

159void后面带类型

函数的原型声明可包含一个空参数列表例如intfunc(void)在void后不

能再有类型定义

160void无效

void类型只在和指针组合或作为一个函数的不存在的返回值中是合法的

161忽视了正式参数

在一个函数内一个外部函数的声明用了一个没有类型标识符的参数名列表例

如externyylex(a,b,c);

180不能指向一个函数

指向一个函数的类型是无效的尝试用指针指向一个函数

181操作数不兼容

对给定的操作符至少一个操作数类型是无效的例如~float_type

183左值不能修改

要修改的目标位于code存储区或有const属性因此不能修改

184sizeof非法操作数

sizeof操作符不能确定一个函数或位域的大小

185不同的存储空间

一个目标声明的存储空间和前一个同样目标声明的存储空间不同

186解除参照无效

一个内部编译器问题会产生本信息如果本错误重复出现请和技术支持接洽

187不是一个左值

所需的参数必须是一个可修改的目标位置

188未知目标大小

因为没有一个数组的维数或间接通过一个void指针一个目标的大小不能计

189&对bit/sfr非法

取位置符’&’不允许对bit目标或特殊函数寄存器sfr

190&不是一个左值

尝试建立一个指针指向一个未知目标

193非法操作类型

193对ptr非法add/sub

193对bit的非法操作

193错误操作数类型

当对一个给定的操作符用了非法的操作数类型时产生本错误例如无效的表

达式如bit*bitptr+ptr或ptr*anything这个错误信息包括引起错误的操作

下面的操作对bit类型的操作数是可行的

􀂃赋值=

􀂃OR/复合OR||=

􀂃AND/复合AND&&=

􀂃XOR/复合XOR^^=

􀂃bit比较==!

=

􀂃取反~

bit操作数可和别的数据类型在表达式中混用在这种情况类型转换自动执行

194*间接指向一个未知大小的目标

间接操作符*不能和void指针合用因为指针所指的目标的大小是未知的

195*间接非法

*操作符不能用到非指针参数

196存储空间可能无效

转换一个常数到一个指针常数产生一个无效的存储空间例如char

*p=0x91234

198sizeof返回零

sizeof操作符返回一个零

199->’的左边要求struct/union指针

->操作符的左边参数必须是一个struct指针或一个union指针

200.左边要求struct/union

.操作符的左边参数要求必须是struct或union类型

201未定义的struct/union

给定的struct或union名是未知的

202未定义的标识符

给定的标识符是未定义的

203错误的存储类参考名

本错误表示编译器的一个问题如果重复出现请接洽技术支持

204未定义的成员

给定的一个struct或union成员名是未定义的

205不能调用一个中断函数

一个中断函数不能象一个正常函数一样调用中断的入口和退出代码是特殊

207参数列表声明为void

参数列表声明为void的函数不能从调用者接收参数

208太多的实参

函数调用包含太多的实参

209太少的实参

调用函数包含太少的实参

210太多的嵌套调用

函数的嵌套调用不能超过10级

211调用不是对一个函数

一个函数的调用项不是对一个函数或函数指针求值

212间接调用寄存器的参数不匹配

通过一个指针的间接函数调用不包含实际的参数一个例外是当所有的参数可

以通过寄存器传递这是由于Cx51所用的传递参数的方法被调用的函数名

必须是已知的因为参数写到被调用函数的数据段但是对间接调用来说

被调用函数的名称是未知的

213赋值符的左边不是一个左值

赋值符的左边要求一个可修改目标的位置

214非法指针转换

bitfloat或集合类型的目标不能转换为指针

215非法类型转换

struct/union/void不能转换为任何别的类型

216标号用在非数组中或维数超出

一个数组引用包含太大的维数或目标不是一个数组

217非整数索引

一个数组的维数表达式必须是charunsignedcharint或unsignedint类型

别的类型都是非法的

218控制表达式用了void类型

在一个whilefor或do的限制表达式中不能用类型void

219long常数缩减为int

一个常数表达式的值必须能用一个int类型表示

220非法常数表达式

期望一个常数表达式目标名变量或函数不允许出现在常数表达式中

221非常数case/dim表达式

一个case或一个维数[]必须是一个常数表达式

222被零除

223被零取模

编译器检测到一个被零除或取模

225表达式太复杂需简化

一个表达式太复杂必须分成两个或多个子表达式

226重复的struct/union/enum标记

一个structunion或enum名早已定义

227表示一个union标记

一个union名称早已定义为别的类型

228表示一个struct标记

一个struct名早已定义为别的类型

229表示一个enum标记

一个enum名早已定义为别的类型

230未知的struct/union/enum标记

指定的structunion或enum名未定义

231重复定义

指定的名称已被定义

232重复标号

指定的标号已定义

233未定义标号

表示一个标号未定义有时候这个信息会在实际的标号的几行后出现这是所

用的未定义标号的搜索方法引起的

234{堆栈范围溢出31

超过了最多31个嵌套块超出的嵌套块被忽略

235参数<数字>不同类型

函数声明的参数类型和函数原型中的不同

236参数列表的长度不同

函数声明中的参数数目和函数原型中的不同

237函数早已定义

试图声明一个函数体两次

238重复成员

239重复参数

试图定义一个已存在的struct成员或函数参数

240超出128个局部bit

在一个函数内不能超过128个bit标量

241auto段太大

局部目标所需的空间超过模式的极限最大的段大小定义如下

SMALL128字节

COMPACT256字节

LARGE65535字节

242太多的初始化软件

初始化软件的数目超过初始化目标的数量

243字符串超出范围

字符串中的字符数目超出字符串初始化的数目

244不能初始化错误的类型或类

试图初始化一个bit或sfr

245未知的pragma跳过本行

#pragma状态未知所以整行被忽略

246浮点错误

当一个浮点参数超出32位的范围就产生本错误32位IEEE值的范围是

±1.175494E-38到±3.402823E+38

247非位置/常数初始化

一个有效的初始化表达式必须是一个常数值求值或一个目标名加或减去一个常

248集合初始化需要大括号

给定struct或union初始化缺少大括号{}

249段<名>段太大

编译器检测到一个数据段太大一个数据段的最大的大小由存储空间决定

250\esc值超过255

一个字符串常数中的转义序列超过有效值范围最大值是255

252非法八进制数

指定的字符不是一个有效的八进制数

252主要控制放错地方行被忽略

主要控制必须被指定在C模块的开头在任何#include命令或声明前

253内部错误ASMGEN\CLASS

在下列情况下出现本错误

􀂃一个内在函数例如_testbit_被错误激活这种情况是在没有函数原

型存在和实参数目或类型错误对这种原因必须使用合适的声明文件

INTRINS.HSTRING.H参考第八章中的instrinsic函数

􀂃Cx51确认一个内部一致性问题请接洽技术支持

255switch表达式有非法类型

在一个switch表达式没有合法的数据类型

256存储模式冲突

一个包含alien属性的函数只能包含模式标识符small函数的参数必须位于内

部数据区这适用于所有的外部alien声明和alien函数例如

alienplm_func(charc)large{…}

产生错误256

257alien函数不能重入

一个包含alien属性的函数不能同时包含reentrant属性函数参数不能跳过虚拟

堆栈传递这适用于所有的外部alien声明和alien函数

258struct/union成员的存储空间非法

非法空间的参数被忽略

一个结构的成员或参数不能包含一个存储类型标识符但指针所指的目标可

能包含一个存储类型例如

structvp{charcodec;intxdatai;};

产生错误258

structv1{charc;intxdata*i;};

是正确的struct声明

259指针不同的存储空间

一个空指针被关联到别的不同存储空间的空指针例如

charxdata*p1;

charidata*p2;

p1=p2;/*不同的存储空间*/

260指针断开

一个空指针被关联到一些常数值这些值超过了指针存储空间的值范围例如

charidata*p1=0x1234;/*结果是0x34*/

261reentrant()内有bit

一个可重入属性的函数的声明中不能包含bit目标例如

intfunc1(inti1)reentrant{

bitb1,b2;/*不允许*/

return(i1-1);

}

262using/disable不能返回bit值

用using属性声明的函数和禁止中断#pragmadisable的函数不能返回一个bit

值给调用者例如

bittest(void)using3

{

bitb0;

return(b0);

}

产生错误262

263保存/恢复堆栈保存溢出/下溢

#pragmasave的最大嵌套深度是八级堆栈的pragmasave和restore工作根据

LIFO后进先出规则

264内在的<内在的名称>声明/激活错误

本错误表示一个内在的函数错误定义参数数目或省略号如果用标准的.H

文件就不会产生本错误确认使用了Cx51所有的.H文件不要尝试对内在的

库函数定义自己的原型

265对非重入函数递归调用

非重入函数不能被递归调用因为这样会覆盖函数的参数和局部数据如果需

要递归调用需声明函数为可重入函数

267函数定义需要ANSI类型的原型

一个函数被带参数调用但是声明是一个空的参数列表原型必须有完整的参

数类型这样编译器就可能通过寄存器传递参数和适合应用的调用机制

268任务定义错误任务ID/优先级/using

任务声明错误

271asm/endasm控制放错地方

asm和endasm声明不能嵌套endasm要求一个汇编块前面用asm开头例如

#pragmaasm

...

汇编指令

...#pragmaendasm

272asm要求激活SRC控制

在一个源文件中使用asm和endasm要求文件用SRC控制编译那么编译器就

会生成汇编源文件然后可以用A51汇编

273asm/endasm在包含文件中不允许

在包含文件中不允许asm和endasm为了调试在包含文件不能有任何的可执

行代码

274非法的绝对标识符

绝对位置标识符对位目标函数和局部函数不允许位置必须和目标的存储

空间一致例如下面的声明是无效的因为间接寻址的范围是0x00到0xFF

idataint_at_0x1000;

278常数太大

当浮点参数超出32位的浮点值范围就产生本错误32位IEEE值的范围是

±1.175494E-38到±3.402823E+38

279多次初始化

试图多次初始化一个目标

280没有使用符号/标号/参数

在一个函数中声明了一个符号标号或参数但没有使用

281非指针类型转换为指针

引用的程序目标不能转换成一个指针

282不是一个SFR引用

本函数调用要求一个SFR作为参数

283asmparms参数不适合寄存器

参数不适合可用的CPU寄存器

284<名称>:

在可覆盖空间函数不再可重入

一个可重入函数包含对局部变量的明确的存储类型标识符函数不再

完全可重入

300注释未结束

一个注释没有一个结束符*/

301期望标识符

一个预处理器命令期望一个标识符

302误用#操作符

字符操作符#没有带一个标识符

303期望正式参数

字符操作符#没有带一个标识符表示当前所定义的宏的一个正式

参数名

304错误的宏参数列表

宏参数列表没有一个大括号逗号分开的标识符列表

305string/char常数未结束

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2