欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

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

    • 资源ID:6236710       资源大小:108.62KB        全文页数:17页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    1、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:cant open f

    2、ile beep.h 说明在编译C:8051MANN.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?DEL

    3、AY 说明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:DelayX

    4、1ms: missing function-prototype C:8051INPUT.C Error 267 :DelayX1ms :requires ANSI-style prototype C:8051INPUT.C 说明程序中有调用DelayX1ms 函数但该函数没定义即未编写程序内容或函数已定义但未作宣告 解决方法编写DelayX1ms 的内容编写完后也要作宣告或作外部宣告可在delay.h 的包含档宣告成外部以便其它函数调用 8 *WARNING 1:UNRESOLVED EXTERNAL SYMBOL SYMBOL:MUSIC3 解决办法:1.是文件没有添加到工程里。2.可能是因

    5、为存在没有被调用的已经定义的函数。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 fi

    6、le选项。重新编译工程9*WARNING 2:REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL:MUSIC3 MODULE:C:8051MUSIC.OBJ(MUSIC) ADDRESS:0018H 在MUSIC3函数里面MUSIC这个参数有使用,没有申明。或者申明了没有实体。也就是说对于这个参数,编译器无法解析。10 *ERROR 107:ADDESS SPACE OVERFLOW SPACE: DATA SEGMENT: _DATA_GOUP_ LENGTH: 0018H 说明data空间已经不够用,原因是你可能有好多函数,而函数内部的局部变量又没有定

    7、义其空间,这种情况下,系统会将变量分配到你在Otions for Target 对话框里的设置的空间。如果你在下图所示中的 Memory Model 里设置成 Small:variables in DATA,则DATA空间很快便用完,导致data空间不够用。解决的办法有两种,一是通过更改Memory Model设置,可以设置成pdata或xdata,以便有足够大的空间,但这又带来新的问题,程序运行速度减慢,而且code代码也会加大,因为如果一个局部变量被存放在了xdata空间,汇编语言访问xdata空间的代码大小要比访问data空间的代码大,变量一旦很多,程序的代码也会逐渐增大;二是根据自己的

    8、要求设置变量的空间。所以这涉及到代码优化的问题,遇到具体问题时,在运行速度和代码大小之间取得适合自己的情况Project-Option for target-BL51 Locate选项卡,如上图红圈部分所示,根据自己系统的存储器分布情况,可以设置代码区间和XDATA区间。通常默认情况下,代码区间很小,所以会造成107号错误,根据需求,调大该范围即可。11ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT SYMBOL: USARTDATACOUNT SEGMENT: ?DT?USART_READWRITERam空间不足:外部变量:定义处不用加Externa

    9、l,声明处要加External 将以data 型别定义的公共变量修改为idata 型别的定义 12*ERROR 118: REFERENCE MADE TO ERRONEOUS EXTERNAL SYMBOL: VOLUME MODULE: C:8051OSDM.OBJ (OSDM) ADDRESS: 4036H 定义了某某函数或全部变量在不同文件里面想调用它,却在包含头文件里面少了extern语句,或只有主程序和包含头文件没有(EXTERN.定义语句(函数). 如果调试时有些if结构里的语句符合条件没有执行,或者某些语句不符合条件也被执行,那是因为if和else里有相同的语句,编译的时候作优

    10、化处理了。13 WARNING 15 (MULTIPLE CALL TO SEGMENT) 症状原因Warning 15向我们表明了linker发现了一个函数,这个函数不仅在main code里被调用了,而且在ISR(或者被ISR调用的函数中)被调用了。或者是被同时被多个ISR同时调用了。这样会产生一个问题,就是在此函数不是一个可重入函数,而当此函数已经在执行时它可能被另一个ISR所调用。这样就会导致结果是可变的而且很可能会导致一些参数的错误。另一个问题就是本地变量和参数所使用的内存可能被其他函数的内存覆盖。如果函数是由中断所调用的,则此函数的内存就会被使用。这会引起其它函数的内存错误。解决方

    11、法有几种方法去解决这个问题如果你100%确认这个函数的两个副本都不会同时执行(如果此函数是被main调用并且中断是未被使能的)并且此函数没有使用内存(只使用的寄存器),那么你就可以忽略此警告如果此函数使用了内存,你就要使用OVERLAY directive来将此函数从覆盖分析(overlay anaysis)中移除。举例如下: OVERLAY (?PR?_WRITE_GMVLX1_REG?D_GMVLX1 ! *)如上语句能阻止被此函数使用的内存遭到覆盖。如果这个函数调用了你程序中其他的在别处的函数,那么你可能需要将这些函数也排除在覆盖分析之外。如果当此函数在执行时可以被调用,那么事情就会变得

    12、比较的复杂。你可能需要:无论何时当从main中调用此函数时,需要关闭中断。你可能需要对被调用的函数使用#pragma disable。你也必须使用OVERLAY directive将此函数从overlay analysis中移除。 为此函数创建两个副本。一个给main,一个给ISR。 使此函数可重入。14E:VCWORK2815.C(826): error C236: _wrbyte: different length of parameter lists子函数里的形参声明的方式不对,需要每个参数都定义一下类型E:VCWORK2815.C(743): error C183: unmodifia

    13、ble lvalue出现error C183: unmodifiable lvalue的错误,最后发现时存在一个数组是uchar code xx5,后边把它用作接受串口的缓冲区,显示uchar code是不能改变的,是写在rom中的。应该改成uchar xx5,这是写在ram中的原因:修改了不能改变的变量,E:VCWORK2815.C(799): error C242: array: too many initializers15 ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL: _WRITE_DATA MODULE: .ds18b20start.

    14、obj (DS18B20c/c+语言中有很多地方要用到extern,但是如果没有真正的了解它的意义,会给编程带来很大的麻烦,为了使大家少走弯路,特祥细的说明一下。 对于比较小的程序,一般只有一个c文件和一个头文件,全局变量我们通常会直接定义在c文件中,在程序之前加int i定义。如果要在头文件中定义有以下两种方法:用extern来声明:extern int i;这一句只是对变量i进行声明,在c文件的程序之前必须加上int i进行定义。extern int i=0;这一句声明和定义都做了。 对于大一点的程序,有很多c文件和头文件,这个时候全局变量就必须在头文件中声明(不需要初始化),然后在一个c

    15、文件中定义(该初始化的要初始化)。如果在头文件中定义,则编译的时候会出现重复定义的错误。如果只有头文件中声明就会出现没有定义有警告。 * ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL: K MODULE: 222.obj (222)出现上述错误则是因为变量k重复定义,把你的头文件中的变量定义前加extern(只是变量声明不用初始化),再在某一个你要调用该变量的c文件的程序之前再定义(注意第一个调用的c文件要负责附带初始化该变量,其他调用的c文件就不需要初始化过程啦)14MAIN.C(85): warning C259: parameter: po

    16、inter: different mspace原因,函数调用时候的实参和声明时候的形参存储空间不同,修改成一致即可。16 E:VC28152815FTOC.C(32): warning C231: _memcpy: attempt to redefine intrinsic function17* ERROR L121: IMPROPER FIXUP访问内存指令超出指令的寻址范围了,例如 MOVX Ri 指令超出了PDATA段的范围,或者是ACALL 指令超出了2k的寻址范围. 检查你的调用子函数的命令.特别是那些LCALL,ACALL等18* WARNING L2: REFERENCE MA

    17、DE TO UNRESOLVED EXTERNAL SYMBOL: MAIN MODULE: C:KEILC51LIBC51S.LIB (?C_INIT) ADDRESS: 080DH在main函数里面C_INIT这个参数有使用,没有申明。或者申明了没有实体。也就是说对于这个参数,编译器无法解析。19 keil4 warning C316:unterminated conditionals 今天用Keil4写程序时遇到这个问题:warning C316:unterminated conditionals跑了几个论坛,在审视了一遍代码之后,知道了原因:像类似XX.C(99):warning C3

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

    19、文件中里面的条件编译是否都写对了,即:前面写了#ifndef,后面是否有对应的#endif。20 DS1302.C(86): error C183: unmodifiable lvaluecode的内容只能读,不能改. 定义数组时把code去掉。21 keil编译警告 Argument:conversion:pointer to non-pointer是什么问题应该是参数传递错误,指针参数处传递了非指针参数。22 * ERROR L114: SEGMENT DOES NOT FIT块大小与目标设备不符。段溢出了,你的DATA区超过了256字节你的idata变量太大(CEH),与器件容量不匹配。

    20、可能你的单片机型号选成31了,选个256字节内部RAM的应该就行,将定义为data的变量定义为xdata类型,问题解决了。23 error C193 :bad operand type% 取模不能用浮点数,frequence 要转成整型来取模,小数位可以乘10后转整型来得到。24 常见错误error1:Outofmemory内存溢出error2:Identifierexpected缺标识符error3:Unknownidentifier未定义的标识符error4:Duplicateidentifier重复定义的标识符error5:Syntaxerror语法错误error6:Errorinrea

    21、lconstant实型常量错误error7:Errorinintegerconstant整型常量错误error8:Stringconstantexceedsline字符串常量超过一行error10:Unexpectedendoffile文件非正常结束error11:Linetoolong行太长error12:Typeidentifierexpected未定义的类型标识符error13:Toomanyopenfiles打开文件太多error14:Invalidfilename无效的文件名error15:Filenotfound文件未找到error16:Diskfull磁盘满error17:Inv

    22、alidcompilerdirective无效的编译命令error18:Toomanyfiles文件太多error19:Undefinedtypeinpointerdef指针定义中未定义类型error20:Variableidentifierexpected缺变量标识符error21:Errorintype类型错误error22:Structuretoolarge结构类型太长error23:Setbasetypeoutofrange集合基类型越界error24:Filecomponentsmaynotbefilesorobjectsfile分量不能是文件或对象error25:Invalidst

    23、ringlength无效的字符串长度error26:Typemismatch类型不匹配error27:error27:Invalidsubrangebasetype无效的子界基类型error28:Lowerboundgreaterthanupperbound下界超过上界error29:Ordinaltypeexpected缺有序类型error30:Integerconstantexpected缺整型常量error31:Constantexpected缺常量error32:Integerorrealconstantexpected缺整型或实型常量error33:PointerTypeidenti

    24、fierexpected缺指针类型标识符error34:Invalidfunctionresulttype无效的函数结果类型error35:Labelidentifierexpected缺标号标识符error36:BEGINexpected缺BEGIN error37:ENDexpected缺END error38:Integerexpressionexpected缺整型表达式error39:Ordinalexpressionexpected缺有序类型表达式error40:Booleanexpressionexpected缺布尔表达式error41:Operandtypesdonotmatch

    25、操作数类型不匹配error42:Errorinexpression表达式错误error43:Illegalassignment非法赋值error44:Fieldidentifierexpected缺域标识符error45:Objectfiletoolarge目标文件太大error46:Undefinedexternal未定义的外部过程与函数error47:Invalidobjectfilerecord无效的OBJ文件格式error48:Codesegmenttoolarge代码段太长error49:Datasegmenttoolarge数据段太长error50:DOexpected缺DO er

    26、ror51:InvalidPUBLICdefinition无效的PUBLIC定义error52:InvalidEXTRNdefinition无效的EXTRN定义error53:ToomanyEXTRNdefinitions太多的EXTRN定义error54:OFexpected缺OF error55:INTERFACEexpected缺INTERFACE error56:Invalidrelocatablereference无效的可重定位引用error57:THENexpected缺THEN error58:TOorDOWNTOexpected缺TO或DOWNTO error59:Undefinedforward


    注意事项

    本文(keil c语言编程常见错误分析.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


    收起
    展开