附录B Keil C51 编译常见错误与警告
在利用Keil C51进行单片机软件程序的编写、调试过程中,经常会出现这样的现象,因为疏忽大意或是对于程序编写规则的不熟悉等原因,工程编译不能正常通过,导致最终未能生成单片机用于下载烧片所需的.hex文件。以下列举出了一些在工程编译过程中,常见的警告或错误的提示信息,以及解决这些警告或错误的具体方法;给出了常见编译器错误信息的查方法和Keil C51编译器常见错误与警告提示信息中英文对照表,供读者在工程调试和编译过程中参考。
一、常见错误与警告现象
现象一:部分程序如下:
{
…
ET0=1
ET1=1;
…
}
错误编号:C141
原因:程序LED.C第49行语句前缺少分号。
解决方法:语句 ET0=1后加";"即:ET0=1;
现象二:部分程序如下:
{
…
ET0=1;
ET1=1;
…
}
错误编号:C100、C141
原因:程序LED.C里53行有中文标点符号“;”。
解决方法:将中文符号改变成英文符号“;”
现象三:
警告编号:L16
原因:delay2( )函数未被其它函数调用,它会占用程序存放空间。
解决方法:
(1)删除delay2( )函数;
(2)检查程序,某调用该子函数;
(3)利用注释“/* … */”将整个delay2()函数体包含,可保留该函数但不被编译。
现象四:
警告/错误编号:C206,C267,C231
原因:‘delay’函数未定义,即未编写程序内容或函数已定义但未作声明。
解决方法:(1)将该子函数放在调用它的主调函数前;
(2) 在调用它的主调函数前,对该函数进行声明。
现象五:
警告编号:C318
原因:在编译main.c 程序过程中由于main.c 使用了头文件包含#include “buzzer.h”,但编译器却不见buzzer.h头文件。
解决方法:到相应的buzzer.h或编写buzzer.h文件,并存入到c:\keil的相关目录中。
现象六:
错误编号:C237
原因:‘delay’函数名称重复定义,即有两个重名的函数。
解决方法:改变其中一个函数的名称,使两个函数名称不相同。
现象七:
错误编号:C202
原因:变量‘sh’未作定义声明,可能是拼写错误或是未区分大小写。
解决方法:(1)在使用该变量前对该变量定义声明;
(2)在确定该变量不使用时,将其删除;
(3)改正错误的拼写。
二、Keil C51错误与警告的查询
前述列举的警告和错误,仅仅是编译软件给出错误或警告的一个部分,对于大多数的错误和警告对应的原因及解决实例,读者可以参照下面的过程自行查Keil C51自带的帮助文件,以求解决可能出现的问题。
Keil C51错误与警告包含在名为errors.chm的文件中,该文件一般存放在keil安装目录中,其路径为…\Keil\C51\HLP\errors.chm,如下图所示。
打开该文件,其中列出了600多条错误与警告的帮助信息,读者可以自行参阅。
三、Keil C51编译器常见错误与警告提示信息中英文对照表
序号 | 英文提示信息 | 中文译文 |
1 | Ambiguous operators need parentheses | 不确定的操作需要用括号括起来 |
2 | Ambiguous symbol ‘xxx’ | 不确定的符号 |
3 | Argument list syntax error | 参数表语法错误 |
4 | Array bounds missing | 数组界限符丢失 |
5 | Array size toolarge | 数组尺寸太大 |
6 | Bad character in paramenters | 参数中有不适宜的字符 |
7 | Bad file name format in include directive | 包含命令中有不正确的文件名格式 |
8 | Bad ifdef directive synatax | 编译预处理ifdef 有语法错 |
9 | Bad undef directive syntax | 编译预处理undef 有语法错 |
10 | Bit field too large | 位字段太长 |
11 | Call of non-function | 调用了未定义的函数 |
12 | Call to function with no prototype | 调用函数时没有函数的说明 |
13 | Cannot modify a const object | 不允许修改常量对象 |
14 | Case outside of switch | case 语句在switch语句外 |
15 | Case syntax error | Case 语法错误 |
16 | Code has no effect | 代码不能执行 |
17 | Compound statement missing { | 复合语句丢失"{" |
18 | Conflicting type modifiers | 不明确的类型说明符 |
19 | Constant expression required | 要求常量表达式 |
20 | Constant out of range in comparison | 在比较中常量超出范围 |
21 | Could not find file ‘xxx’ | 不到XXX 文件 |
22 | Declaration missing ; | 声明缺少“;” |
23 | Declaration syntax error | 声明中出现语法错误 |
24 | Default outside of switch | Default 出现在switch 语句之外 |
25 | Define directive needs an identifier | 定义编译预处理需要标识符 |
26 | Division by zero | 用零作除数 |
27 | Do statement must have while | Do-while 语句中必须while |
28 | Enum syntax error | 枚举类型语法错误 |
29 | Enumeration constant syntax error | 枚举常数语法错误 |
30 | Error directive :xxx | 错误的编译预处理命令 |
31 | Error writing output file | 写输出文件错误 |
32 | Expression syntax error | 表达式语法错误 |
33 | Extra parameter in call | 调用时出现多余错误 |
34 | File name too long | 文件名太长 |
35 | Function call missing ) | 函数调用缺少括号“)” |
36 | Fuction definition out of place | 函数定义位置错误 |
37 | Fuction should return a value | 函数必需返回一个值 |
38 | Hexadecimal or octal constant too large | 16 进制或8 进制常数太大 |
39 | Illegal character ‘x’ | 非法字符x |
40 | Illegal initialization | c51中字符串函数非法的初始化 |
41 | Illegal Hexadecimal digit | 非法的16 进制数字 |
42 | Illegal pointer subtraction | 非法的指针相减 |
43 | Illegal use of floating point | 非法的浮点运算 |
44 | Illegal use of pointer | 非法使用指针 |
45 | Improper use of a typedefsymbol | 类型定义符号使用不恰当 |
46 | Incompatible storage class | 不相容的存储类别 |
47 | Incompatible type conversion | 不相容的类型转换 |
48 | Incorrect number format | 错误的数据格式 |
49 | Incorrect use of default | Default 使用不当 |
50 | Invalid indirection | 无效的间接运算 |
51 | Invalid pointer addition | 无效的指针相加 |
52 | Irreducible expression tree | 无法执行的表达式运算 |
53 | Lvalue required | 需要逻辑值 |
54 | Macro argument syntax error | 宏参数语法错误 |
55 | Macro expansion too long | 宏扩展后太长 |
56 | Mismatched number of parameters in definition | 定义中参数个数不匹配 |
57 | Misplaced break | 此处不应出现break 语句 |
58 | Misplaced continue | 此处不应出现continue 语句 |
59 | Misplaced decimal point | 此处不应出现小数点 |
60 | Must be addressable | 必须是可以编址的 |
61 | Must take address of memory location | 必须存储定位的地址 |
62 | No declaration for function ‘xxx’ | 函数xxx没有声明 |
63 | No type information | 没有类型信息 |
64 | Not a valid expression format type | 不合法的表达式格式 |
65 | Not an allowed type | 不允许使用的类型 |
66 | Numeric constant too large | 数值常太大 |
67 | Out of memory | 内存不够用 |
68 | Parameter ‘xxx’ is never used | 参数xxx 没有用到 |
69 | Pointer required on left side of -> | 符号->的左边必须是指针 |
70 | Possible use of ‘xxx’ before definition | 在定义之前就使用了xxx(警告) |
71 | Possibly incorrect assignment | 赋值可能不正确 |
72 | Redeclaration of ‘xxx’ | 重复定义了xxx |
73 | Redefinition of ‘xxx’ is not identical | xxx 的两次定义不一致 |
74 | Register allocation failure | 寄存器定址失败 |
75 | Repeat count needs an lvalue | 重复计数需要逻辑值 |
76 | Statement missing ; | 语句后缺少“;” |
77 | Sub scripting missing ] | 下标缺少右方括号 |
78 | Symbol limit exceeded | 符号超限 |
79 | Too few parameters in call | 函数调用时的实参少于函数的参数不 |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论