keil c语言编程常见错误分析(2)

2019-01-05 12:49

这样会产生一个问题,就是在此函数不是一个可重入函数,而当此函数已经在执行时它可能被另一个ISR所调用。这样就会导致结果是可变的而且很可能会导致一些参数的错误。

另一个问题就是本地变量和参数所使用的内存可能被其他函数的内存覆盖。如果函数是由中断所调用的,则此函数的内存就会被使用。这会引起其它函数的内存错误。 解决方法

有几种方法去解决这个问题

如果你100%确认这个函数的两个副本都不会同时执行(如果此函数是被main调用并且中断是未被使能的)并且此函数没有使用内存(只使用的寄存器),那么你就可以忽略此警告

如果此函数使用了内存,你就要使用OVERLAY directive来将此函数从覆盖分析(overlay anaysis)中移除。举例如下: OVERLAY (?PR?_WRITE_GMVLX1_REG?D_GMVLX1 ! *) 如上语句能阻止被此函数使用的内存遭到覆盖。如果这个函数调用了你程序中其他的在别处的函数,那么你可能需要将这些函数也排除在覆盖分析之外。

如果当此函数在执行时可以被调用,那么事情就会变得比较的复杂。你可能需要:无论何时当从main中调用此函数时,需要关闭中断。你可能需要对被调用的函数使用#pragma disable。你也必须使用

OVERLAY directive将此函数从overlay analysis中移除。 为此函数创建两个副本。一个给main,一个给ISR。 使此函数可重入。

14E:\\VCWORK\\2815.C(826): error C236: '_wrbyte': different

length of parameter lists

子函数里的形参声明的方式不对,需要每个参数都定义一下类型

E:\\VCWORK\\2815.C(743): error C183: unmodifiable lvalue

出现error C183: unmodifiable lvalue的错误,最后发现时存在一个数组是uchar code xx[5],后边把它用作接受串口的缓冲区,显示uchar code是不能改变的,是写在rom中的。应该改成uchar xx[5],这是写在ram中的 原因:修改了不能改变的变量,

E:\\VCWORK\\2815.C(799): error C242: 'array[]': too many initializers

15 ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL:

_WRITE_DATA MODULE: .\\ds18b20start.obj (DS18B20

c/c++语言中有很多地方要用到extern,但是如果没有真正的了解它的意义,会给编程带来很大的麻烦,为了使大家少走弯路,特祥细的说明一下。

对于比较小的程序,一般只有一个c文件和一个头文件,全局变量我们通常会直接定义在c文件中,在程序之前加int i定义。如果要在头文件中定义有以下两种方法:用extern来声明:extern int i;这一句只是对变量i进行声明,在c文件的程序之前必须加上int i进行定义。extern int i=0;这一句声明和定义都做了。

对于大一点的程序,有很多c文件和头文件,这个时候全局变量就必须在头文件中声明(不需要初始化),然后在一个c文件中定义(该初始化的要初始化)。如果在头文件中定义,则编译的时候会出现重复定义的错误。如果只有头文件中声明就会出现没有定义有警告。

*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL: K

MODULE: 222.obj (222)

出现上述错误则是因为变量k重复定义,把你的头文件中的变量定义前加extern(只是变量声明不用初始化),再在某一个你要调用该变量的c文件的程序之前再定义(注意第一个调用的c文件要负责附带初始化该变量,其他调用的c文件就不需要初始化过程啦)

14MAIN.C(85): warning C259: 'parameter': pointer: different mspace

原因,函数调用时候的实参和声明时候的形参存储空间不同,修改成一致即可。

16 E:\\VC\\2815\\2815\\FTOC.C(32): warning C231: '_memcpy': attempt to redefine intrinsic function 17*** ERROR L121: IMPROPER FIXUP

访问内存指令超出指令的寻址范围了,例如 MOVX @Ri 指令超出了PDATA段的范围,或者是ACALL 指令超出了2k的寻址范围. 检查你的调用子函数的命令.特别是那些LCALL,ACALL等

18*** WARNING L2: REFERENCE MADE TO

UNRESOLVED EXTERNAL

SYMBOL: MAIN

MODULE: C:\\KEIL\\C51\\LIB\\C51S.LIB (?C_INIT) ADDRESS: 080DH

在main函数里面C_INIT这个参数有使用,没有申明。或者申明了没有实体。也就是说对于这个参数,编译器无法解析。

19 keil4 warning C316:unterminated conditionals

今天用Keil4写程序时遇到这个问题:warning C316:unterminated conditionals 跑了几个论坛,在审视了一遍代码之后,知道了原因:

像类似XX.C(99):warning C316:unterminated conditionals这种警告的话XX.c文件有一个凌乱的条件编译或预编译。因为C语言中有些头文件中的预编译或宏定义,那么条件编译就避免不了。写条件编译时,可能有忘写一个基本的语句。比如说,你用了条件编译#ifndef而忘记写#endif。因为他们本来就是配套的。有前者必有后者。不能丢掉其中任何一个。一个include文件最后的#endif 少了# 前缀或者没有#endif,都会出现类似警告。就像你写C语句,你不会写了 int i 而不能忘记写 \,否者就不能把一个语句表达完整。 总之,出现上述问题。先看看整个C文件中是否出现上述错误,或整个工程中自己写的那些头文件中里面的条件编译是否都写对了,即:前面写了#ifndef,后面是否有对应的#endif。

20 DS1302.C(86): error C183: unmodifiable lvalue

code的内容只能读,不能改. 定义数组时把code去掉。

21 keil编译警告 ?Argument':conversion:pointer to

non-pointer是什么问题

应该是参数传递错误,指针参数处传递了非指针参数。

22 *** ERROR L114: SEGMENT DOES NOT FIT

块大小与目标设备不符。段溢出了,你的DATA区超过了256字节

你的idata变量太大(CEH),与器件容量不匹配。可能你的单片机型号选成31了,选个256字节内部RAM的应该就行,将定义为data的变量定义为xdata类型,问题解决了。

23 error C193 :bad operand type

% 取模不能用浮点数,

frequence 要转成整型来取模,小数位可以乘10后转整型来得到。

24 常见错误

error 1: Out of memory 内存溢出 error 2: Identifier expected 缺标识符

error 3: Unknown identifier 未定义的标识符 error 4: Duplicate identifier 重复定义的标识符 error 5: Syntax error 语法错误

error 6: Error in real constant 实型常量错误 error 7: Error in integer constant 整型常量错误

error 8: String constant exceeds line 字符串常量超过一行 error 10: Unexpected end of file 文件非正常结束 error 11: Line too long 行太长

error 12: Type identifier expected 未定义的类型标识符 error 13: Too many open files 打开文件太多 error 14: Invalid file name 无效的文件名 error 15: File not found 文件未找到 error 16: Disk full 磁盘满

error 17: Invalid compiler directive 无效的编译命令 error 18: Too many files 文件太多

error 19: Undefined type in pointer def 指针定义中未定义类型 error 20: Variable identifier expected 缺变量标识符 error 21: Error in type 类型错误

error 22: Structure too large 结构类型太长

error 23: Set base type out of range 集合基类型越界

error 24: File components may not be files or objectsfile分量不能是文件或对象 error 25: Invalid string length 无效的字符串长度

error 26: Type mismatch 类型不匹配

error 27:error 27:Invalid subrange base type 无效的子界基类型 error 28:Lower bound greater than upper bound 下界超过上界 error 29:Ordinal type expected 缺有序类型

error 30:Integer constant expected 缺整型常量 error 31:Constant expected 缺常量

error 32:Integer or real constant expected 缺整型或实型常量 error 33:Pointer Type identifier expected 缺指针类型标识符 error 34:Invalid function result type 无效的函数结果类型 error 35:Label identifier expected 缺标号标识符 error 36:BEGIN expected 缺BEGIN error 37:END expected 缺END

error 38:Integer expression expected 缺整型表达式

error 39:Ordinal expression expected 缺有序类型表达式 error 40:Boolean expression expected 缺布尔表达式

error 41:Operand types do not match 操作数类型不匹配 error 42:Error in expression 表达式错误 error 43:Illegal assignment 非法赋值 error 44:Field identifier expected 缺域标识符 error 45:Object file too large 目标文件太大

error 46:Undefined external 未定义的外部过程与函数 error 47:Invalid object file record 无效的OBJ文件格式 error 48:Code segment too large 代码段太长 error 49:Data segment too large 数据段太长 error 50:DO expected 缺DO

error 51:Invalid PUBLIC definition 无效的PUBLIC定义 error 52:Invalid EXTRN definition 无效的EXTRN定义 error 53: Too many EXTRN definitions 太多的EXTRN定义 error 54:OF expected 缺OF

error 55:INTERFACE expected 缺INTERFACE error 56:Invalid relocatable reference 无效的可重定位引用 error 57:THEN expected 缺THEN

error 58:TO or DOWNTO expected 缺TO或DOWNTO error 59:Undefined forward 提前引用未经定义的说明 error 61:Invalid typecast 无效的类型转换 error 62:Division by zero 被零除

error 63:Invalid file type 无效的文件类型

error 64:Cannot read or write variables of this type 不能读写此类型变量 error 65:Pointer variable expected 缺指针类型变量 error 66:String variable expected 缺字符串变量

error 67:String expression expected 缺字符串表达式

error 68:Circular unit reference 单元UNIT部件循环引用 error 69:Unit name mismatch 单元名不匹配 error 70:Unit version mismatch 单元版本不匹配 error 71:Internal stack overflow 内部堆栈溢出

error 72:Unit file format error 单元文件格式错误

error 73:IMPLEMENTATION expected 缺IMPLEMENTATION


keil c语言编程常见错误分析(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:基英二词汇翻译quizzes

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: