keil c语言编程常见错误分析要点
Keil C编译器常见警告与错误信息的解决方法
1.Warning280:’i’:unreferenced local variable说明局部变量i在函数中未作任何的存取操作解决方法消除函数中i变量的宣告2Warning206:’Music3’:missing function-prototype说明Music3()函数未作宣告或未作外部宣告所以无法给其他函数调用解决方法将叙述void Music3(void)写在程序的最前端作宣告如果是其他文件的函数则要写成extern void Music3(void),即作外部宣告3Compling:C:\8051\MANN.CError:318:can’t open file‘beep.h’说明在编译C:\8051\MANN.C程序过程中由于main.c用了指令#include“beep.h”,但却找不到所致解决方法编写一个beep.h的包含档并存入到c:\8051的工作目录中4Compling:C:\8051\LED.CError237:’LedOn’:function already has a body说明LedOn()函数名称重复定义即有两个以上一样的函数名称解决方法修正其中的一个函数名称使得函数名称都是独立的5***WARNING16:UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESS SEGMENT:?PR?_DELAYX1MS?DELAY说明DelayX1ms()函数未被其它函数调用也会占用程序记忆体空间解决方法去掉DelayX1ms()函数或利用条件编译#if…..#endif,可保留该函数并不编译6***WARNING6:XDATA SPACE MEMORY OVERLAPFROM:0025HTO:0025H说明外部资料ROM的0025H重复定义地址解决方法外部资料ROM的定义如下Pdata unsigned char XFR_ADC_at_0x25其中XFR_ADC变量的名称为0x25,请检查是否有其它的变量名称也是定义在0x25处并修正它7WARNING206:’DelayX1ms’:missing function-prototypeC:\8051\INPUT.CError267:’DelayX1ms‘:requires ANSI-style prototype C:\8051\INPUT.C说明程序中有调用DelayX1ms函数但该函数没定义即未编写程序内容或函数已定义但未作宣告解决方法编写DelayX1ms的内容编写完后也要作宣告或作外部宣告可在delay.h的包含档宣告成外部以便其它函数调用8***WARNING1:UNRESOLVED EXTERNAL SYMBOLSYMBOL:MUSIC3MODULE:C:\8051\MUSIC.OBJ(MUSIC)***WARNING2:REFERENCE MADE TO UNRESOLVED EXTERNALSYMBOL:MUSIC3MODULE:C:\8051\MUSIC.OBJ(MUSIC)ADDRESS:0018H说明程序中有调用MUSIC函数但未将该函数的含扩档C加入到工程档Prj作编译和连接解决方法设MUSIC3函数在MUSIC C里将MUSIC C添加到工程文件中去9***ERROR107:ADDESS SPACE OVERFLOWSPACE:DATASEGMENT:_DATA_GOUP_LENGTH:0018H***ERROR118:REFERENCE MADE TO ERRONEOUS EXTERNALSYMBOL:VOLUMEMODULE:C:\8051\OSDM.OBJ(OSDM)ADDRESS:4036H说明data存储空间的地址范围为0~0x7f,当公用变量数目和函数里的局部变量如果存储模式设为SMALL则局部变量先使用工作寄存器R2~R7作暂存当存储器不够用时则会以data型别的空间作暂存的个数超过0x7f时就会出现地址不够的现象解决方法将以data型别定义的公共变量修改为idata型别的定义Ambiguous operators need parentheses 不明确的运算需要用括号括起Ambiguous symbol``xxx``不明确的符号Argument list syntax error参数表语法错误Array bounds missing丢失数组界限符Array size toolarge数组尺寸太大Bad character in paramenters参数中有不适当的字符Bad file name format in include directive 包含命令中文件名格式不正确Bad ifdef directive synatax编译预处理ifdef有语法错Bad undef directive syntax编译预处理undef有语法错Bit field too large位字段太长Call of non-function调用未定义的函数Call to function with no prototype调用函数时没有函数的说明Cannot modify a const object不允许修改常量对象Case outside of switch漏掉了case语句Case syntax errorCase语法错误Code has no effect代码不可述不可能执行到Compound statement missing{分程序漏掉"{"Conflicting type modifiers不明确的类型说明符Constant expression required要求常量表达式Constant out of range in comparison 在比较中常量超出范围Conversion may lose significant digits 转换时会丢失意义的数字Conversion of near pointer not allowed 不允许转换近指针Could not find file``xxx``找不到XXX文件Declaration missing;说明缺少";"Declaration syntax error说明中出现语法错误Default outside of switchDefault出现在switch语句之外Define directive needs an identifier 定义编译预处理需要标识符Division by zero用零作除数Do statement must have whileDo-while语句中缺少while部分Enum syntax error枚举类型语法错误Enumeration constant syntax error 枚举常数语法错误Error directive:xxx错误的编译预处理命令Error writing output file写输出文件错误Expression syntax error表达式语法错误Extra parameter in call调用时出现多余错误File name too long文件名太长Function call missing)函数调用缺少右括号Fuction definition out of place函数定义位置错误Fuction should return a value函数必需返回一个值Goto statement missing labelGoto语句没有标号Hexadecimal or octal constant too large 16进制或8进制常数太大Illegal character``x``非法字符xIllegal initialization非法的初始化Illegal octal digit非法的8进制数字Illegal pointer subtraction非法的指针相减Illegal structure operation非法的结构体操作Illegal use of floating point非法的浮点运算Illegal use of pointer指针使用非法Improper use of a typedefsymbol类型定义符号使用不恰当In-line assembly not allowed不允许使用行间汇编Incompatible storage class存储类别不相容Incompatible type conversion不相容的类型转换Incorrect number format错误的数据格式Incorrect use of defaultDefault使用不当Invalid indirection无效的间接运算Invalid pointer addition指针相加无效Irreducible expression tree无法执行的表达式运算Lvalue required需要逻辑值0或非0值Macro argument syntax error宏参数语法错误Macro expansion too long宏的扩展以后太长Mismatched number of parameters in definition 定义中参数个数不匹配Misplaced break此处不应出现break语句Misplaced continue此处不应出现continue语句Misplaced decimal point此处不应出现小数点Misplaced elif directive不应编译预处理elifMisplaced else此处不应出现elseMisplaced else directive此处不应出现编译预处理elseMisplaced endif directive此处不应出现编译预处理endifMust be addressable必须是可以编址的Must take address of memory location 必须存储定位的地址No declaration for function``xxx``没有函数xxx的说明No stack缺少堆栈No type information没有类型信息Non-portable pointer assignment不可移动的指针(地址常数)赋值Non-portable pointer comparison不可移动的指针(地址常数)比较Non-portable pointer conversion不可移动的指针(地址常数)转换Not a valid expression format type不合法的表达式格式Not an allowed type不允许使用的类型Numeric constant too large数值常太大Out of memory内存不够用Parameter``xxx``is never used能数xxx没有用到Pointer required on left side of->符号->的左边必须是指针Possible use of``xxx``before definition 在定义之前就使用了xxx(警告)Possibly incorrect assignment赋值可能不正确Redeclaration of``xxx``重复定义了xxxRedefinition of``xxx``is not identical xxx的两次定义不一致Register allocation failure寄存器定址失败Repeat count needs an lvalue重复计数需要逻辑值Size of structure or array not known结构体或数给大小不确定Statement missing;语句后缺少";"Structure or union syntax error结构体或联合体语法错误Structure size too large结构体尺寸太大Sub scripting missing]下标缺少右方括号Superfluous&with function or array 函数或数组中有多余的"&"Suspicious pointer conversion可疑的指针转换Symbol limit exceeded符号超限Too few parameters in call函数调用时的实参少于函数的参数不Too many default casesDefault太多(switch语句中一个)Too many error or warning messages 错误或警告信息太多Too many type in declaration说明中类型太多Too much auto memory in function 函数用到的局部存储太多Too much global data defined in file 文件中全局数据太多Two consecutive dots两个连续的句点Type mismatch in parameter xxx参数xxx类型不匹配Type mismatch in redeclaration of``xxx``xxx重定义的类型不匹配Unable to create output file``xxx``无法建立输出文件xxxUnable to open include file``xxx``无法打开被包含的文件xxxUnable to open input file``xxx``无法打开输入文件xxxUndefined label``xxx``没有定义的标号xxxUndefined structure``xxx``没有定义的结构xxxUndefined symbol``xxx``没有定义的符号xxxUnexpected end of file in comment started on line xxx 从xxx行开始的注解尚未结束文件不能结束Unexpected end of file in conditional started on line xxx 从xxx开始的条件语句尚未结束文件不能结束Unknown assemble instruction未知的汇编结构Unknown option未知的操作Unknown preprocessor directive:``xxx``不认识的预处理命令xxxUnreachable code无路可达的代码Unterminated string or character constant字符串缺少引号User break用户强行中断了程序Void functions may not return a valueVoid类型的函数不应有返回值Wrong number of arguments调用函数的参数数目错``xxx``not an argumentxxx不是参数``xxx``not part of structurexxx不是结构体的一部分xxx statement missing(xxx语句缺少左括号xxx statement missing)xxx语句缺少右括号xxx statement missing;xxx缺少分号xxx``declared but never used说明了xxx但没有使用xxx``is assigned a value which is never used 给xxx赋了值但未用过Zero length structure结构体的长度为零1.第一种错误信息***WARNING L15:MULTIPLE CALL TO SEGMENTSEGMENT:?PR?_WRITE_GMVLX1_REG?D_GMVLX1CALLER1:?PR?VSYNC_INTERRUPT?MAINCALLER2:?C_C51STARTUP***WARNING L15:MULTIPLE CALL TO SEGMENTSEGMENT:?PR?_SPI_SEND_WORD?D_SPICALLER1:?PR?VSYNC_INTERRUPT?MAINCALLER2:?C_C51STARTUP***WARNING L15:MULTIPLE CALL TO SEGMENTSEGMENT:?PR?SPI_RECEIVE_WORD?D_SPICALLER1:?PR?VSYNC_INTERRUPT?MAINCALLER2:?C_C51STARTUP该警告表示连接器发现有一个函数可能会被主函数和一个中断服务程序(或者调用中断服务程序的函数)同时调用,或者同时被多个中断服务程序调用。
C语言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),即作外部宣告3 Compling :C:\8051\MANN.CError:318:can’t open file ‘beep.h’说明在编译C:\8051\MANN.C 程序过程中由于main.c 用了指令#i nclude “beep.h”,但却找不到所致解决方法编写一个beep.h 的包含档并存入到c:\8051 的工作目录中4 Compling:C:\8051\LED.CError 237:’LedOn’:function already has a body说明LedOn( )函数名称重复定义即有两个以上一样的函数名称解决方法修正其中的一个函数名称使得函数名称都是独立的5 ***WARNING 16:UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESSSEGMENT: ?PR?_DELAYX1MS?DELAY说明DelayX1ms( )函数未被其它函数调用也会占用程序记忆体空间解决方法去掉DelayX1ms( )函数或利用条件编译#if …..#endif,可保留该函数并不编译6 ***WARNING 6 :XDATA SPACE MEMORY OVERLAPFROM : 0025HTO: 0025H说明外部资料ROM 的0025H 重复定义地址解决方法外部资料ROM 的定义如下Pdata unsigned char XFR_ADC _at_0x25 其中XFR_ADC 变量的名称为0x25,请检查是否有其它的变量名称也是定义在0x25 处并修正它7 WARNING 206:’DelayX1ms’: missing function-prototypeC:\8051\INPUT.CError 267 :’DelayX1ms ‘:requires ANSI-style prototype C:\8051\INPUT.C说明程序中有调用DelayX1ms 函数但该函数没定义即未编写程序内容或函数已定义但未作宣告解决方法编写DelayX1ms 的内容编写完后也要作宣告或作外部宣告可在delay.h 的包含档宣告成外部以便其它函数调用8 ***WARNING 1:UNRESOLVED EXTERNAL SYMBOLSYMBOL:MUSIC3MODULE:C:\8051\MUSIC.OBJ(MUSIC)***WARNING 2:REFERENCE MADE TO UNRESOLVED EXTERNALSYMBOL:MUSIC3MODULE:C:\8051\MUSIC.OBJ(MUSIC)ADDRESS:0018H说明程序中有调用MUSIC 函数但未将该函数的含扩档C 加入到工程档Prj 作编译和连接 解决方法设MUSIC3 函数在MUSIC C 里将MUSIC C 添加到工程文件中去9 ***ERROR 107:ADDESS SPACE OVERFLOWSPACE: DATASEGMENT: _DATA_GOUP_LENGTH: 0018H***ERROR 118: REFERENCE MADE TO ERRONEOUS EXTERNALSYMBOL: VOLUMEMODULE: C:\8051\OSDM.OBJ (OSDM)ADDRESS: 4036H说明data 存储空间的地址范围为0~0x7f,当公用变量数目和函数里的局部变量如果存储模式设为SMALL 则局部变量先使用工作寄存器R2~R7 作暂存当存储器不够用时则会以data 型别的空间作暂存的个数超过0x7f 时就会出现地址不够的现象解决方法将以data 型别定义的公共变量修改为idata 型别的定义说明如对编译出错感兴趣的网友能否把你们常遇到的错误信息收集起来并提出最终的解决办法加以归纳以期共享10.***WARNING L15: MULTIPLE CALL TO SEGMENTSEGMENT: ?PR?_WRITE_GMVLX1_REG?D_GMVLX1CALLER1: ?PR?VSYNC_INTERRUPT?MAINCALLER2: ?C_C51STARTUP***WARNING L15: MULTIPLE CALL TO SEGMENTSEGMENT: ?PR?_SPI_SEND_WORD?D_SPICALLER1: ?PR?VSYNC_INTERRUPT?MAINCALLER2: ?C_C51STARTUP***WARNING L15: MULTIPLE CALL TO SEGMENTSEGMENT: ?PR?SPI_RECEIVE_WORD?D_SPICALLER1: ?PR?VSYNC_INTERRUPT?MAINCALLER2: ?C_C51STARTUP该警告表示连接器发现有一个函数可能会被主函数和一个中断服务程序(或者调用中断服务程序的函数)同时调用,或者同时被多个中断服务程序调用。
C51-keil编译常见错误和警告处理
keil错误C51编译器识别错类型有三种1、致命错误:伪指令控制行有错,访问不存在的原文件或头文件等。
2、语法及语义错误:语法和语义错误都发生在原文件中。
有这类错误时,给出提示但不产生目标文件,错误超过一定数量才终止编译。
3、警告:警告出现并不影响目标文件的产生,但执行时有可能发生问题。
程序员应斟酌处理。
D.1 致命错误C_51 FATAL_ERRORACTION: <当前行为>LINE: <错误所在行>ERROR: <错误信息> terminated或C_51 FA TAL ERRORACTION: <当前行为>FILE: <错误所在文件>ERROR: <错误信息> terminatedC_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 字节空间。
keil常见错误
keil常见错误1.warning: #550-D: variable "d" was set but never used描述:变量'd'定义但从未使用,或者是,虽然这个变量你使用了,但编译器认为变量d所在的语句没有意义,编译器把它优化了.解决:仔细衡量所定义的变量d是否有用,若是认定变量d所在语句有意义,那么尝试用volatile关键字修饰变量d,若是真的没有用,那么删除掉以释放可能的内存.2.warning: #1-D: last line of file ends without a newline描述:文件最后一行不是新的一行.编译器要求程序文件的最后一行必须是空行,想了半天没想通为什么要这样.解决:可以不理会.若是觉得出现警告不爽,那么在出现警告的文件的最后一行敲个回车,空出一行.3. warning: #111-D: statement is unreachable描述:声明不可能到达.多出现在这种场合:int main(void){...while(1) //无限循环,这在不使用操作系统的程序中最常见{...}return 0; //这句声明在正常情况下不可能执行到,编译器发出警告 } 解决:不理会.4. warning: C3017W: data may be used before being set描述:变量'data'在使用前没有明确的赋值.如:uint8 i,data; //定义变量i和data,二者都没有明确赋值for ( i = 0; i < 8; i++) //变量'i'在语句中被赋值0{if ( IO1PIN & SO_CC2420 )data |= 0x01; //变量'data'在使用前没有明确赋值,编译器发出警告elsedata &= ~0x01;}解决:应仔细衡量该变量的初始值是否为0,若是,可以不理会这个警告,因为MDK编译器在程序执行前,会将使用到的数据区初始化为0,但若是该变量的初始值不应该是0,忽略这个警告可能会引起致命错误.这个警告应引起足够重视.应养成变量赋初值的习惯,好在有编译器给把关.5. warning: #177-D: variable "temp" was declared but never referenced描述:变量'temp'进行了声明但没有引用.多出现在声明了一个变量,但却没有使用它,它和warning: #550-D: variable "temp" was set but never used不同之处在于temp从没有使用过.解决:若是定义的变量确实没有用,删除掉;若是有用,则在程序中使用. 与该警告类似的还有warning: #177-D: function "MACProcessBeacon" was declared but never referenced6. warning: #940-D: missing return statement at end of non-void function "DealwithInspect2"描述:返回非空的函数"DealwithInspect2"的最后缺少返回值声明.如: int DealwithInspect2(uint32 test){.........//此处应该是return x;返回一个int型数据,若是没有返回值,编译器产生警告}7..warning: #1295-D: Deprecated declaration lcd_init - givearg types描述:在定义函数的时候,如果你写上函数参数,就会有这个警告,比如void timer_init(); 这里就没有形参,如果这样的话,编译器会给出警告.1. error: #65: expected a ";"描述:缺少分号.大多是漏忘';'.解决:双击错误行,在定位到错误点的附近找到没加';'号的语句,加上分号.并不一定在定位到的错误行才却分号,可能是这行的上一行,也可能是下一行.2. error: #65: expected a ";"和error: #20: identifier "xxxx" is undefined一块出现,而且后面的error: #20错误可能一大堆描述:这个错误对于第一次遇上的人来说绝对是个噩梦,当错误出现,满怀希望的双击错误提示,来到错误行时却愕然发现,错误行绝对没有错,于是找找错误行的上一行,下一行,没有错误,再找上上行,下下行...让人无比郁闷的事情出现了:编译提示的所有错误行都不可能有错误出现.其实这最可能是你在.h文件声明外部变量或者函数时,没有在声明语句的最后加分号!如果你有很多模块,如main.c,lcd.c,key.c...有很多头文件,如lcd.h,key.h,若是在lcd.h文件声明函数时没有加分号,那么这种错误可能定为到main.c中,所以要检查所有头文件.解决:仔细检查.h文件,将分号补上.3. Error: L6200E: Symbol flagu multiply defined (by uart0.o and main.o).描述:变量(也是一种符号)flagu多处定义(在uart0.c中和main.c 都定义了).通常错在全局变量定义重复.比如:在main.c中定义全局变量flagu:uint8 flagu=0;在uart0.c中也用到该变量,于是声明此变量,我通常都是先复制定义的变量再在变量前面加关键字extern修饰:extern uint8 flagu=0;然后编译,就会出现上面的连接错误,原因在于,我在uart0.c中是又定义了一个变量,而不是声明变量,因为我给变量赋了初值"flagu=0",这样就重复定义了变量flag.正确的声明方法是去掉赋值部分: extern uint8 flagu;解决办法:找到重复定义的变量,看情况修改一处.4.error: #159: declaration is incompatible with previous "wr_lcd" (declared at line 40)描述:在wr_lcd函数还没有声明之前就已经使用了.多出现在两种情况:第一种,wr_lcd函数体还没有写,就已经用到了它,这种情况多出现在写一个程序的大体结构中,只是简单写一下框架.第二种情况比较常见,函数a调用函数b,但函数b的函数体在函数a的下面:void a(void) //函数a的实体{b(); //调用函数b}void b(void) //函数b的实体{...}这样如果点编译,就会产生error: #159的错误,因为当函数a调用函数b时,发现在这之前都没有函数b的任何声明.解决方法:在函数a调用函数b之前,对函数b进行声明,如:void b(void); //对函数b进行声明void a(void) //函数a的实体{b(); //调用函数b}void b(void) //函数b的实体{...}5. error: #137: expression must be a modifiable lvalue描述:表达式必须是一个可以修改的左值.主要出现在这种现象:a=NUM;NUM是一个数值或表达式,a为一个变量,但a被定义为像const 这种不可更改的类型,导致NUM不能赋值给变量a.解决方法:要么放弃赋值,要么修改变量属性.6.error: #18: expected a ")"如果是出现在c文件中, 多半是因为少了一个")",或者错误行有编译器不识别的字符如果出现在头文件中,错误行又是一个函数声明,多半是因为在函数声明中有编译器不认识的字符.7.error: #7: unrecognized token未识别的标记,多半是切换成了中文标点。
Keil编译常见错误
Error: L6200EError: L6200E: Symbol temp multiply defined (by wenshidu.o and main.o).在编译的时候出现了这个问题,但是检查不出来,希望各位大侠帮帮忙什么变量你给付了两次值你看看是不是那个外部变量你又给赋值了main.c申明,其他.c文件对应的.h文件中用extern引用error: #20error: #20: identifier "TIM2_IRQChannel" is undefined 谁能说说,哪里错了你的固件库里的库文件没有添加进工程里面,所以出现未定义的情况。
TIM2_IRQChannel指定时器2的中断通道没有定义,其实在固件库对这些参数都有定义,宏定义代替了一串寄存器地址数据。
需要将.C文件添加到工程文件中warning: #1-Dmain.c(7): warning: #1-D: last line of file ends without a newline当使用keil编译时,弹出这样的警告信息:main.c(7): warning: #1-D: last line of file ends without a newline这个是由于在main函数的“}”后,没有加回车。
只要在main函数的“}”后加回车键,此警告信息即可消除。
error:#65...test_menu.c(27):error:#65:expected a ";"分数送你了,问题在你回答之前已经解决了,头文件里的结构体定义里的最后一行没有加";" 如NB menu{..};error: #1113:折腾了大半天,才搞明白一个空操作的指令先在网上查有的说是__asm{NOP;},从intrins.h里调用,可犄角旮旯全找了,也没看到什么intrint.h的文件。
如果直接用,就出现error: #1113: Inline assembler not permitted when generating Thumb code最后搜索这条错误,知道是因为__asm("指令");这种语法是内联汇编(inline assembly)的语法。
Keil常见编译错误
Keil编译常见错误Part 1 Warningswarning: #167-D: argument of type "XXXX" is incompatible with parameter of type "YYYY"意义: 类型为XXXX的参数(实参)与类型为YYYY的参数(形参)不一致。
说明: 编译器在编译过程中会检查函数调用时的实参与形参数据类型的匹配情况。
当发现两者不一致时,给出警告。
warning: #177-D: variable "XXXX" was declared but never referenced. 意义: 定义的变量XXXX从未被使用过。
warning: #223-D: function "XXXX" declared implicitly意义: 函数XXXX采用了隐含式的声明。
说明: 函数XXXX在调用时没有定义或编译器没有看到该函数的声明,于是编译器将使用了缺省的数据类型作为该函数的定义。
常见问题:1.函数的定义出现在函数调用之后。
2.函数没有定义warning: #513-D: a value of type "XXXX" cannot be assigned to an entity of type "YYYY"意义: 类型为XXXX的值不能赋值给一个YYYY的实体。
说明: 按照C语言的规则,变量和数值都被赋予一定的数据类型。
在赋值操作时,变量的类型与其所赋的值的类型必须一致。
遇到这类问题时,要仔细观察和思考两者是否存在冲突。
常见问题:warning: #1295-D: Deprecated declaration XXXX - give arg types.意义: 弃用的声明XXXX, 请给出参数的数据类型。
说明: 按照最新C语言标准的要求,函数在声明时必须说明所有参数的类型,以及返回值的类型。
C51-keil编译常见错误和警告处理
C51-keil编译常见错误和警告处理53keil错误;C51编译器识别错类型有三种:1、致命错误:伪指令控制行有错,访问不存在的原文;2、语法及语义错误:语法和语义错误都发生在原文件;3、警告:警告出现并不影响目标文件的产生,但执行;C_51FATAL_ERRORACTION:&l;ERROR:<错误信息>termin;FILE:<错误所在文件>;ERROR:<错误信息>keil错误C51编译器识别错类型有三种1、致命错误:伪指令控制行有错,访问不存在的原文件或头文件等。
2、语法及语义错误:语法和语义错误都发生在原文件中。
有这类错误时,给出提示但不产生目标文件,错误超过一定数量才终止编译。
3、警告:警告出现并不影响目标文件的产生,但执行时有可能发生问题。
程序员应斟酌处理。
D.1 致命错误C_51 FATAL_ERROR ACTION: <当前行为> LINE: <错误所在行>ERROR: <错误信息> terminated 或C_51 FATAL 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分析源程序时发现外部引用名太多。
★Keil 编译时出现错误和警告的总结
和C 编译器错误信息中文翻译
(1)L15 重复调用
***WARNING L15: MULTIPLE CALL TO SEGMENT
SEGMENT: ?PR?SPI_RECEIVE_WORD?D_SPI
CALLER1: ?PR?VSYNC_INTERRUPT?MAIN
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 用了指令#i nclude “beep.h”,但
却找不到所致解决方法编写一个beep.h 的包含档并存入到c:\8051 的工作目录中
3.将该函数设为重入型。例如:
void myfunc(void) reentrant {
...
}
这种设置将会产生一个可重入堆栈,该堆栈被被用于存储函数值和局部变量,用这种方法时重入堆
栈必须在STARTUP.A51 文件中配置。这种方法消耗更多的RAM 并会降低重入函数的执行速度。
(2)提示无M51 文件
x0d','0x0b','0x07','0x06','0x05','0x03','0x02','0x01','0x00'};
附录B KeilC51编译常见错误与警告
317附录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行有中文标点符号“;”。
解决方法:将中文符号改变成英文符号“;” 现象三:318警告编号: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 的相关目录中。
编程时Keil中常见的错误
编程时Keil中常见的错误C51编译器识别错类型有三种:1、致命错误:伪指令控制行有错,访问不存在的原文件或头文件等。
2、语法及语义错误:语法和语义错误都发生在原文件中。
有这类错误时,给出提示但不产生目标文件,错误超过一定数量才终止编译。
3、警告:警告出现并不影响目标文件的产生,但执行时有可能发生问题。
程序员应斟酌处理。
1、致命错误 C_51 FATAL_ERROR ACTION: LINE:ERROR: terminated 或C_51 FATAL ERROR ACTION: FILE:ERROR: terminated C_51 TERMINATED C_51 (1) ACTION 的有关信息*PARSING INVOKE-/#PRAGMA_LINE在对#pragma 指明的控制行作此法分析时出错。
*ALLOCATING MEMORY系统分配存储空间时出错。
编译较大程序需要512k空间。
*OPENING INPUT_FILE打开文件时,未找到或打不开源文件/头文件。
*CREATELIST_FILE/OBJECT_FILE/WORK_FILE不能创建上述文件。
可能磁盘满或文件已存在而且写保护。
*PARSINGSOURCE_FILE/ANALYZING DECLARATIONS 分析源程序时发现外部引用名太多。
*GENERATING INTERMEDIATE CODE源代码被翻译成内部伪代码,错误可能来源于函数太大而超过内部极限。
*WRITING TO FILE在向文件(work,list,prelist或object file)写时发生错误。
(2)ERROR的有关信息 *MEMORY SPACE EXHAUSTED所有可用系统空间耗尽。
至少需要512k 字节空间。
没有足够空间,用户必须检查常驻内存的驱动程序是否太多。
*FILE DOES NOT EXISTFILE 行定的文本文件名未发现。
C51-keil编译常见错误和警告处理-360文档中心
C51-keil编译常见错误和警告处理-360文档中心keil错误C51编译器识别错类型有三种1、致命错误:伪指令控制行有错,访问不存在的原文件或头文件等。
2、语法及语义错误:语法和语义错误都发生在原文件中。
有这类错误时,给出提示但不产生目标文件,错误超过一定数量才终止编译。
3、警告:警告出现并不影响目标文件的产生,但执行时有可能发生问题。
程序员应斟酌处理。
D.1 致命错误C_51 FATAL_ERRORACTION:LINE:ERROR: terminated或C_51 FA TAL ERRORACTION:FILE:ERROR: terminatedC_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 EXISTFILE 行定的文本文件名未发现。
KEIL C编译器错误的解决办法
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),即作外部宣告3 Compling :C:\8051\MANN.CError: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.CError 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 OVERLAPFROM : 0025HTO: 0025H说明外部资料ROM 的0025H 重复定义地址解决方法外部资料ROM 的定义如下Pdata unsigned char XFR_ADC _at_0x25 其中XFR_ADC 变量的名称为0x25,请检查是否有其它的变量名称也是定义在0x25 处并修正它7 WARNING 206:’DelayX1ms’: missing function-prototypeC:\8051\INPUT.CE rror 267 :’DelayX1ms ‘:requires ANSI-style prototype C:\8051\INPUT.C说明程序中有调用DelayX1ms 函数但该函数没定义即未编写程序内容或函数已定义但未作宣告解决方法编写DelayX1ms 的内容编写完后也要作宣告或作外部宣告可在delay.h的包含档宣告成外部以便其它函数调用8 ***WARNING 1:UNRESOLVED EXTERNAL SYMBOLSYMBOL:MUSIC3MODULE:C:\8051\MUSIC.OBJ(MUSIC)***WARNING 2:REFERENCE MADE TO UNRESOLVED EXTERNALSYMBOL:MUSIC3MODULE:C:\8051\MUSIC.OBJ(MUSIC)ADDRESS:0018H说明程序中有调用MUSIC 函数但未将该函数的含扩档C 加入到工程档Prj 作编译和连接解决方法设MUSIC3 函数在MUSIC C 里将MUSIC C 添加到工程文件中去9 ***ERROR 107:ADDESS SPACE OVERFLOWSPACE: DATASEGMENT: _DATA_GOUP_LENGTH: 0018H***ERROR 118: REFERENCE MADE TO ERRONEOUS EXTERNALSYMBOL: VOLUMEMODULE: C:\8051\OSDM.OBJ (OSDM)ADDRESS: 4036H说明data 存储空间的地址范围为0~0x7f,当公用变量数目和函数里的局部变量如果存储模式设为SMALL 则局部变量先使用工作寄存器R2~R7 作暂存当存储器不够用时则会以data 型别的空间作暂存的个数超过0x7f 时就会出现地址不够的现象解决方法将以data 型别定义的公共变量修改为idata 型别的定义--------------------------------------------------------------------------------------------------keil c编译器错误与解决方法2008-05-27 20:191. Warning 280:’i’:unreferenced local variable说明局部变量i 在函数中未作任何的存取操作解决方法消除函数中i 变量的宣告2 Warning 206:’Music3’:missing function-prototype说明Music3( )函数未作宣告或未作外部宣告所以无法给其他函数调用解决方法将叙述void Music3(void)写在程序的最前端作宣告如果是其他文件的函数则要写成extern void Music3(void),即作外部宣告3 Compling :C:\8051\MANN.CError:318:can’t open file ‘beep.h’说明在编译C:\8051\MANN.C 程序过程中由于main.c 用了指令#i nclude “beep.h”,但却找不到所致解决方法编写一个beep.h 的包含档并存入到c:\8051 的工作目录中4 Compling:C:\8051\LED.CError 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 OVERLAPFROM : 0025HTO: 0025H说明外部资料ROM 的0025H 重复定义地址解决方法外部资料ROM 的定义如下Pdata unsigned char XFR_ADC _at_0x25 其中XFR_ADC变量的名称为0x25,请检查是否有其它的变量名称也是定义在0x25 处并修正它7 WARNING 206:’DelayX1ms’: missing function-prototypeC:\8051\INPUT.CError 267 :’DelayX1ms ‘:requires ANSI-style prototype C:\8051\INPUT.C说明程序中有调用DelayX1ms 函数但该函数没定义即未编写程序内容或函数已定义但未作宣告解决方法编写DelayX1ms 的内容编写完后也要作宣告或作外部宣告可在delay.h 的包含档宣告成外部以便其它函数调用8 ***WARNING 1:UNRESOLVED EXTERNAL SYMBOLSYMBOL:MUSIC3MODULE:C:\8051\MUSIC.OBJ(MUSIC)***WARNING 2:REFERENCE MADE TO UNRESOLVED EXTERNALSYMBOL:MUSIC3MODULE:C:\8051\MUSIC.OBJ(MUSIC)ADDRESS:0018H说明程序中有调用MUSIC 函数但未将该函数的含扩档C 加入到工程档Prj 作编译和连接解决方法设MUSIC3 函数在MUSIC C 里将MUSIC C 添加到工程文件中去9 ***ERROR 107:ADDESS SPACE OVERFLOWSPACE: DATASEGMENT: _DATA_GOUP_LENGTH: 0018H***ERROR 118: REFERENCE MADE TO ERRONEOUS EXTERNALSYMBOL: VOLUMEMODULE: C:\8051\OSDM.OBJ (OSDM)ADDRESS: 4036H说明data 存储空间的地址范围为0~0x7f,当公用变量数目和函数里的局部变量如果存储模式设为SMALL 则局部变量先使用工作寄存器R2~R7 作暂存当存储器不够用时则会以data 型别的空间作暂存的个数超过0x7f 时就会出现地址不够的现象解决方法将以data 型别定义的公共变量修改为idata 型别的定义说明如对编译出错感兴趣的网友能否把你们常遇到的错误信息收集起来并提出最终的解决办法加以归纳以期共享10.***WARNING L15: MULTIPLE CALL TO SEGMENTSEGMENT: ?PR?_WRITE_GMVLX1_REG?D_GMVLX1CALLER1: ?PR?VSYNC_INTERRUPT?MAINCALLER2: ?C_C51STARTUP***WARNING L15: MULTIPLE CALL TO SEGMENTSEGMENT: ?PR?_SPI_SEND_WORD?D_SPICALLER1: ?PR?VSYNC_INTERRUPT?MAINCALLER2: ?C_C51STARTUP***WARNING L15: MULTIPLE CALL TO SEGMENTSEGMENT: ?PR?SPI_RECEIVE_WORD?D_SPICALLER1: ?PR?VSYNC_INTERRUPT?MAINCALLER2: ?C_C51STARTUP该警告表示连接器发现有一个函数可能会被主函数和一个中断服务程序(或者调用中断服务程序的函数)同时调用,或者同时被多个中断服务程序调用。
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 PROCESSSEGMENT: ?PR?_DELAYX1MS?DELAY说明DelayX1ms( )函数未被其它函数调用也会占用程序记忆体空间解决方法去掉DelayX1ms( )函数或利用条件编译#if …..#endif,可保留该函数并不编译6 ***WARNING 6 :XDATA SPACE MEMORY OVERLAPFROM : 0025HTO: 0025H说明外部资料ROM 的0025H 重复定义地址解决方法外部资料ROM 的定义如下Pdata unsigned charXFR_ADC _at_0x25 其中XFR_ADC 变量的名称为0x25,请检查是否有其它的变量名称也是定义在0x25 处并修正它7 WARNING 206:’DelayX1ms’: missing function-prototype C:\8051\INPUT.CError 267 :’DelayX1ms ‘:requires ANSI-style prototypeC:\8051\INPUT.C说明程序中有调用DelayX1ms 函数但该函数没定义即未编写程序内容或函数已定义但未作宣告解决方法编写DelayX1ms 的内容编写完后也要作宣告或作外部宣告可在delay.h 的包含档宣告成外部以便其它函数调用8 ***WARNING 1:UNRESOLVED EXTERNAL SYMBOL SYMBOL:MUSIC3解决办法:1.是文件没有添加到工程里。
keil软件编译常见错误解释总结和中文翻译
Keil编译时出现错误和警告的总结和C 编译器错误信息中文翻译(1)L15重复调用***WARNING L15: MULTIPLE CALL TO SEGMENTSEGMENT: ?PR?SPI_RECEIVE_WORD?D_SPICALLER1: ?PR?VSYNC_INTERRUPT?MAINCALLER2: ?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)之外。
keil编译常见报错和解决方法
keil编译常见报错和解决方法Keil是一款常用的嵌入式开发工具,用于编写和调试嵌入式系统的程序。
在使用Keil编译时,我们常常会遇到一些报错信息。
本文将介绍一些常见的Keil编译报错及解决方法,帮助读者快速解决问题。
1. "Error: L6218E: Undefined symbol"错误这个错误通常是由于使用了未定义的变量或函数导致的。
解决方法是检查代码中使用的符号是否正确定义或是否包含了正确的头文件。
如果符号确实未定义,需要在代码中进行定义或者引入相关的头文件。
2. "Error: L6002U: Could not open file"错误这个错误表示编译器无法打开指定的文件。
解决方法是检查文件路径是否正确,文件是否存在,并且是否具有读取权限。
如果文件路径正确但是依然无法打开,可能是文件被其他程序占用或者权限设置不正确,需要解决这些问题后重新编译。
3. "Error: C2513: 'function' : no variable declared before '=' "错误这个错误表示在赋值语句中使用了未声明的变量。
解决方法是检查变量是否正确声明,并确保在赋值之前进行了声明。
如果变量确实未声明,需要在代码中添加相应的变量声明。
4. "Error: C2065: 'variable' : undeclared identifier"错误这个错误表示使用了未声明的变量。
解决方法是检查变量是否正确声明,并确保在使用之前进行了声明。
如果变量确实未声明,需要在代码中添加相应的变量声明。
5. "Error: C1083: Cannot open include file: 'header.h': No such file or directory"错误这个错误表示编译器无法找到指定的头文件。
keil常见错误和解决方法
keil常见错误和解决⽅法1. Warning 280:’i’:unreferenced local variable说明局部变量i 在函数中未作任何的存取操作。
解决⽅法消除函数中i 变量的宣告。
2. Warning 206:’Music3’:missing function-prototype说明Music3( )函数未作宣告或未作外部宣告所以⽆法给其他函数调⽤。
解决⽅法将叙述void Music3(void)写在程序的最前端作宣告如果是其他⽂件的函数则要写成extern void Music3(void),即作外部宣告。
3. Compling :C:\8051\MANN.CError: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.CError 237:’LedOn’:function already has a body说明LedOn( )函数名称重复定义即有两个以上⼀样的函数名称。
解决⽅法修正其中的⼀个函数名称使得函数名称都是独⽴的。
5. ***WARNING 16:UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESSSEGMENT: ?PR?_DELAYX1MS?DELAY说明DelayX1ms( )函数未被其它函数调⽤也会占⽤程序记忆体空间。
解决⽅法去掉DelayX1ms( )函数或利⽤条件编译#if …..#endif,可保留该函数并不编译。
6. ***WARNING 6 :XDATA SPACE MEMORY OVERLAPFROM : 0025HTO: 0025H说明外部资料ROM 的0025H 重复定义地址解决⽅法外部资料ROM 的定义如下Pdata unsigned char XFR_ADC _at_0x25 其中XFR_ADC 变量的名称为0x25,请检查是否有其它的变量名称也是定义在0x25 处并修正它7 .WARNING 206:’DelayX1ms’: missing function-prototypeC:\8051\INPUT.CError 267 :’DelayX1ms ‘:requires ANSI-style prototype C:\8051\INPUT.C说明程序中有调⽤DelayX1ms 函数但该函数没定义即未编写程序内容或函数已定义但未作宣告。
Keil C 编译器常见警告与错误信息的解决方法
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),即作外部宣告3 Compling :C:\8051\MANN.CError: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.CError 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 OVERLAPFROM : 0025HTO: 0025H说明外部资料ROM 的0025H 重复定义地址解决方法外部资料ROM 的定义如下Pdata unsigned char XFR_ADC _at_0x25 其中XFR_ADC 变量的名称为0x25,请检查是否有其它的变量名称也是定义在0x25 处并修正它7 WARNING 206:’DelayX1ms’: missing function-prototypeC:\8051\INPUT.CError 267 :’DelayX1ms ‘:requires ANSI-style prototype C:\8051\INPUT.C说明程序中有调用DelayX1ms 函数但该函数没定义即未编写程序内容或函数已定义但未作宣告解决方法编写DelayX1ms 的内容编写完后也要作宣告或作外部宣告可在delay.h的包含档宣告成外部以便其它函数调用8 ***WARNING 1:UNRESOLVED EXTERNAL SYMBOLSYMBOL:MUSIC3MODULE:C:\8051\MUSIC.OBJ(MUSIC)***WARNING 2:REFERENCE MADE TO UNRESOLVED EXTERNALSYMBOL:MUSIC3MODULE:C:\8051\MUSIC.OBJ(MUSIC)ADDRESS:0018H说明程序中有调用MUSIC 函数但未将该函数的含扩档C 加入到工程档Prj 作编译和连接解决方法设MUSIC3 函数在MUSIC C 里将MUSIC C 添加到工程文件中去9 ***ERROR 107:ADDESS SPACE OVERFLOWSPACE: DATASEGMENT: _DATA_GOUP_LENGTH: 0018H***ERROR 118: REFERENCE MADE TO ERRONEOUS EXTERNALSYMBOL: VOLUMEMODULE: C:\8051\OSDM.OBJ (OSDM)ADDRESS: 4036H说明data 存储空间的地址范围为0~0x7f,当公用变量数目和函数里的局部变量如果存储模式设为SMALL 则局部变量先使用工作寄存器R2~R7 作暂存当存储器不够用时则会以data 型别的空间作暂存的个数超过0x7f 时就会出现地址不够的现象解决方法将以data 型别定义的公共变量修改为idata 型别的定义说明如对编译出错感兴趣的网友能否把你们常遇到的错误信息收集起来并提出最终的解决办法加以归纳以期共享欢迎加入群(电子联盟40110704),共同交流、探讨、提高。
Keil最常见编译错误和警告
今天在EINT的范例里添加了一个函数,即eint.c中添加了一个datawrite()的函数,并在主函数main.c中调用,编译便警告warning: #223-D: function "datawrite()" declared implicitly很奇怪,在eint.c中也有初始化函数EINTInit()同样在main.c中调用没有问题,问什么偏偏这个不行。
但毕竟是个警告,还不是错误,做了个测试IO,while(1){FIO1SET = 1<<19;delaySysTick(10);Data_write(0xff00, 0xff);FIO1CLR = 1<<19;delaySysTick(10);}下载执行后发现,此IO根本没有输出。
看来这个警告还是不能回避的,在网上差了下,有类似问题说是库的原因,具体是什么也没说清楚。
于是尝试着一一打开库文件,打开eint.h,恍然大悟,这里赫然写着extern void EINT0_IRQHandler(void) __irq;extern DWORD EINTInit( void );原来在这里将eint.c中的函数与main.c相关联,也就是在eint.c中添加了新函数,还有在这里声明调用才行。
eint.h中,添加extern void Data_write(WORD addr, BYTE data);即可Error: L6200EError: L6200E: Symbol temp multiply defined (by wenshidu.o and main.o).在编译的时候出现了这个问题,但是检查不出来,希望各位大侠帮帮忙,什么变量你给付了两次值你看看是不是那个外部变量你又给赋值了main.c申明,其他.c文件对应的.h文件中用extern引用error: #20error: #20: identifier "TIM2_IRQChannel" is undefined 谁能说说,哪里错了你的固件库里的库文件没有添加进工程里面,所以出现未定义的情况。
★Keil编译时出现错误和警告的总结
运行,但是相应数据不会丢失)。
原因之二是用于局部变量和变量(暂且这样翻译,arguments,[自变量,变元一数值,用于确定程序或子
程序的值])的内存区被其他函数的内存区所覆盖,如果该函数被中断,则它的内存区就会被使用,这将导致其他函数
的内存冲突。
----
回答:程序里有带中文标点,用英文重新写一遍即可
(12)A45 汇编出现数字、字母混淆
MOV PO,A ;put on next 11
...
MOV RO,#0FFH ; 14
MOV R1,#OFFH ; 15
...
DJNZ RO,DLY_LP ;19
MOV R0,#OFFH ; 20
程序中:
void mian (void)
编译提示:
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?MIAN?MAIN
*** WARNING L10: CANNOT DETERMINE ROOT SEGMENT
应该输入数字“0”,而你输入字母“O”了。
1. Warning 280:’i’:unreferenced local variable
说明局部变量i 在函数中未作任何的存取操作解决方法消除函数中i 变量的宣告
2 Warning 206:’Music3’:missing function-prototype
CALLER2: ?C_C51STARTUP
该警告表示连接器发现有一个函数可能会被主函数和一个中断服务程序(或者调用中断服务程序的函
keil-c语言编程常见错误分析
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 OVERLAPFROM : 0025HTO: 0025H说明外部资料ROM 的0025H 重复定义地址解决⽅法外部资料ROM 的定义如下Pdata unsigned char XFR_ADC _at_0x25 其中XFR_ADC 变量的名称为0x25,请检查是否有其它的变量名称也是定义在0x25 处并修正它7 WARNING 206:’DelayX1ms’: missing function-prototypeC:\8051\INPUT.CError 267 :’DelayX1ms ‘:requires ANSI-style prototypeC:\8051\INPUT.C说明程序中有调⽤DelayX1ms 函数但该函数没定义即未编写程序内容或函数已定义但未作宣告解决⽅法编写DelayX1ms 的内容编写完后也要作宣告或作外部宣告可在delay.h 的包含档宣告成外部以便其它函数调⽤8 ***WARNING 1:UNRESOLVED EXTERNAL SYMBOLSYMBOL:MUSIC3解决办法:1.是⽂件没有添加到⼯程⾥。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
11ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
SYMBOL: USARTDATACOUNT
SEGMENT: ?DT?USART_READWRITE
Ram空间不足:
外部变量:定义处不用加External,声明处要加External
将以data型别定义的公共变量修改为idata型别的定义
12***ERROR 118: REFERENCE MADE TO ERRONEOUS EXTERNAL
8***WARNING 1:UNRESOLVED EXTERNAL SYMBOL
SYMBOL:MUSIC3
解决办法:
1.是文件没有添加到工程里。
2.可能是因为存在没有被调用的已经定义的函数。
3.不知道你有没有把Source group组下面的A51.C删掉,如果没有删,在A51.c上点右键,选择remove file " ".
4 Error 237:’LeddOn( )函数名称重复定义即有两个以上一样的函数名称
解决方法修正其中的一个函数名称使得函数名称都是独立的
5 ***WARNING 16:UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESS
9***WARNING 2:REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL:MUSIC3
MODULE:C:\8051\MUSIC.OBJ(MUSIC)
ADDRESS:0018H
在MUSIC3函数里面MUSIC这个参数有使用,没有申明。或者申明了没有实体。也就是说对于这个参数,编译器无法解析。
10***ERROR 107:ADDESS SPACE OVERFLOW
SPACE: DATA
SEGMENT: _DATA_GOUP_
LENGTH: 0018H
说明data空间已经不够用,原因是你可能有好多函数,而函数内部的局部变量又没有定义其空间,这种情况下,系统会将变量分配到你在Otions for Target对话框里的设置的空间。如果你在下图所示中的Memory Model里设置成Small:variables in DATA,则DATA空间很快便用完,导致data空间不够用。解决的办法有两种,一是通过更改MemoryModel设置,可以设置成pdata或xdata,以便有足够大的空间,但这又带来新的问题,程序运行速度减慢,而且code代码也会加大,因为如果一个局部变量被存放在了xdata空间,汇编语言访问xdata空间的代码大小要比访问data空间的代码大,变量一旦很多,程序的代码也会逐渐增大;二是根据自己的要求设置变量的空间。所以这涉及到代码优化的问题,遇到具体问题时,在运行速度和代码大小之间取得适合自己的情况
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
SYMBOL: VOLUME
MODULE: C:\8051\OSDM.OBJ (OSDM)
SEGMENT: ?PR?_DELAYX1MS?DELAY
说明DelayX1ms( )函数未被其它函数调用也会占用程序记忆体空间解决方法去掉DelayX1ms( )函数或利用条件编译#if …..#endif,可保留该函数并不编译
6 ***WARNING 6 :XDATA SPACE MEMORY OVERLAP
解决方法将叙述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的工作目录中
1. Warning 280:’i’:unreferenced local variable
说明局部变量i在函数中未作任何的存取操作解决方法消除函数中i变量的宣告及即定义的参数在程序中并未调用
2 Warning 206:’Music3’:missing function-prototype
说明Music3( )函数未作宣告或未作外部宣告所以无法给其他函数调用
C:\8051\INPUT.C
Error 267 :’DelayX1ms ‘:requires ANSI-style prototype C:\8051\INPUT.C
说明程序中有调用DelayX1ms函数但该函数没定义即未编写程序内容或函数已定义但未作宣告
解决方法编写DelayX1ms的内容编写完后也要作宣告或作外部宣告可在delay.h的包含档宣告成外部以便其它函数调用
4.建一个新的c文件,里面写一个空的函数,把该文件添加到project中,注意该文件不能再选generate assembler SRC file和assemble SRC file选项。重新编译工程,如果警告该函数没被调用,在主文件中调一下。
5.建一个新的c文件,把主文件中的几个函数移至该文件,把该文件添加到project中,注意该文件不能再选generate assembler SRC file和assemble SRC file选项。重新编译工程