常见错误信息由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“消息写作常见错误”。
Keil C 编译器常见警告与错误信息的解决方法
1)如果两个或更多c文件都需要使用某非bit型变量,那么声明是应将相应存储类型同时注明,即如果定义“uchar idata cntembuf;”,那么应声明为“extern uchar idata cntembuf;”或者“extern idata cntembuf;”;
2)如果是bit型变量,则数据类型“bit”必须注明,而存储类型可以省略;
LN认为,keil里之所以将bit变量和其他类型变量分开处理,是keil面向的处理器都是51内核的,而51内核bit变量只存在于特殊功能寄存器和内存的位寻址区(bdata区),而特殊功能寄存器中的位变量若在两个以上文件中使用各各文件都只能用类似于sbit abcd = P1^6;的形式进行声明,并且keil不检测abcd这个位变量在不同文件中是否代替相同位(例如,可以在另一个c文件中声明为:sbit abcd = P0^5;等),这样一来,用extern声明的bit变量就只有在bdata区了,所以,允许在在一个c文件中定义位变量后,在其它c文件中省略“bdata”这个存储类型;
而非bit型变量则可以在特殊功能寄存器,内存,外存,所以声明时要使存储类型与定义时的存储类型相同(也可以在定义和声明时都不规定存储类型,而又编译器根据编译模式自动分配)。
1.Warning 280:‟i‟:unreferenced local variable
说明局部变量i 在函数中未作任何的存取操作解决方法消除函数中i 变量的宣告Warning 206:‟Music3‟:miing function-prototype
说明Music3()函数未作宣告或未作外部宣告所以无法给其他函数调用
解决方法将void Music3(void)写在程序的最前端作宣告如果是其他文件的函数则要写成extern void Music3(void),即作外部宣告。Compling :C:8051MANN.C
Error:318:can‟t open file „beep.h‟
说明在编译C:8051MANN.C 程序过程中由于main.c 用了指令#i nclude “beep.h”,但却找不到所致解决方法编写一个beep.h 的包含档并存入到c:8051 的工作目录中Compling:C:8051LED.C
Error 237:‟LedOn‟:function already has a body
说明LedOn()函数名称重复定义即有两个以上一样的函数名称
解决方法修正其中的一个函数名称使得函数名称都是独立的***WARNING 16:UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESSSEGMENT: ?PR?_DELAYX1MS?DELAY
说明DelayX1ms()函数未被其它函数调用也会占用程序记忆体空间解决方法去掉DelayX1ms()函数或利用条件编译#if …..#endif,可保留该函数并不编译***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:‟DelayX1ms‟: miing function-prototype
C:8051INPUT.C
Error 267 :‟DelayX1ms „:requires ANSI-style prototype C:8051INPUT.C
说明程序中有调用DelayX1ms 函数但该函数没定义即未编写程序内容或函数已定义但未作声明。
解决方法:编写DelayX1ms 的内容,编写完后也要作声明或作外部声明可在delay.h 的包含档声明成外部以便其它函数调用。***WARNING 1:UNRESOLVED EXTERNAL SYMBOL
SYMBOL:MUSIC3
MODULE:C:8051MUSIC.OBJ(MUSIC)
***WARNING 2:REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL:MUSIC3
MODULE:C:8051MUSIC.OBJ(MUSIC)
ADDRESS:0018H
说明程序中有调用MUSIC 函数但未将该函数的包含文档C 加入到工程文档Prj 作编译和连接。
解决方法:设MUSIC3 函数在MUSIC.C 里。将MUSIC C 添加到工程文件中去9 ***ERROR 107:ADDESS SPACE OVERFLOW
SPACE: DATA
SEGMENT: _DATA_GOUP_
LENGTH: 0018H
***ERROR 118: REFERENCE MADE TO ERRONEOUS EXTERNAL
SYMBOL: VOLUME
MODULE: C:8051OSDM.OBJ(OSDM)
ADDRESS: 4036H
说明data 存储空间的地址范围为0~0x7f,当公用变量数目和函数里的局部变量如果存储模式设为SMALL 则局部变量先使用工作寄存器R2~R7 作暂存当存储器不够用时则会以data 型别的空间作暂存的个数超过0x7f 时就会出现地址不够的现象。
解决方法:将以data 型别定义的公共变量修改为idata 型别的定义说明定义了全局变量而没有外部External声明:reference made to erroneous externalRam空间不足:public refers to ignore segment
外部变量:定义处不用加External,声明处要加External
将以data 型别定义的公共变量修改为idata 型别的定义*** ERROR L118: REFERENCE MADE TO ERRONEOUS EXTERNAL
定义了某某函数或全部变量在不同文件里面想调用它,却在包含头文件里面少了extern语句,或只有主程序和包含头文件没有(EXTERN......定义语句(函数)).如果调试时有些if结构里的语句符合条件没有执行,或者某些语句不符合条件也被执行,那是因为if和else里有相同的语句,编译的时候作优化处理了。WARNING 15(MULTIPLE CALL TO SEGMENT)症状
我添加了一个中断处理程序(ISR)到我的项目中,然而我却得到了如下的警告: ***WARNING L15:MULTIPLE CALL TO SEGMENT
SEGMENT:?PR?_WRITE_GMVLX1_REG?D_GMVLX1
CALLER1:?PR?VSYNC_INTERRUPT?MAIN
CALLER2:?C_C51STARTUP
***WARNING L15:MULTIPLE CALL TO SEGMENT
SEGMENT:?PR?_SPI_SEND_WORD?D_SPI
CALLER1:?PR?VSYNC_INTERRUPT?MAIN
CALLER2:?C_C51STARTUP
***WARNING L15:MULTIPLE CALL TO SEGMENT
SEGMENT:?PR?SPI_RECEIVE_WORD?D_SPI
CALLER1:?PR?VSYNC_INTERRUPT?MAIN
CALLER2:?C_C51STARTUP
上面这些都是什么?我该如何解决这个问题呢?
原因
Warning 15向我们表明了linker发现了一个函数,这个函数不仅在main code里被调用了,而且在ISR(或者被ISR调用的函数中)被调用了。或者是被同时被多个ISR同时调用了。这样会产生一个问题,就是在此函数不是一个可重入函数,而当此函数已经在执行时它可能被另一个ISR所调用。这样就会导致结果是可变的而且很可能会导致一些参数的错误。另一个问题就是本地变量和参数所使用的内存可能被其他函数的内存覆盖。如果函数是由中断所调用的,则此函数的内存就会被使用。这会引起其它函数的内存错误。
举例来说,对于你的第一个警告,WRITE_GMVLX1_REG是会被多个root所调用。其被定义在D_GMVLX1.C或者D_GMVLX1.A51中。他不仅会被ISR(或者被ISR调用的函数)而且也会被MAIN.C中的VSYNC_INTERRUPT函数所调用。
解决方法
有几种方法去解决这个问题
如果你100%确认这个函数的两个副本都不会同时执行(如果此函数是被main调用并且中断是未被使能的)并且此函数没有使用内存(只使用的寄存器),那么你就可以忽略此警告。如果此函数使用了内存,你就要使用OVERLAY directive来将此函数从覆盖分析(overlay anaysis)中移除。举例如下:
OVERLAY(?PR?_WRITE_GMVLX1_REG?D_GMVLX1!*)
如上语句能阻止被此函数使用的内存遭到覆盖。如果这个函数调用了你程序中其他的在别处的函数,那么你可能需要将这些函数也排除在覆盖分析之外。
如果当此函数在执行时可以被调用,那么事情就会变得比较的复杂。你可能需要:
无论何时当从main中调用此函数时,需要关闭中断。你可能需要对被调用的函数使用#pragma disable。你也必须使用OVERLAY directive将此函数从overlay analysis中移除。为此函数创建两个副本。一个给main,一个给ISR。
使此函数可重入。举例如下:
void myfunc(void)reentrant {
}
上面的定义会产生一个用来存储参数和本地变量的可重入的栈。如果使用了这种方法那么这个可重入的栈必须在STARTUP.A51中配置。这样会花费更多的RAM并且会减缓可冲入函数的执行
Visual C++ 6.0常见的语法错误信息1、error C2018: unknown character '0xa1'不认识的字符'0xa1'。(一般是汉字或中文标点符号)2、error C2065: 'I„„' : undeclared......
汇编中常见的一些错误信息ml.exe错误信息:FATAL严重错误cannot open file不能打开文件I/O error closing fileI/O错误 正在关闭文件I/O error writing fileI/O错误 正在写文......
FT-R5055错误信息表1 SET FILM MAG 供片盒没装,装供片盒2 SET COLLECT BOX 收片盒没装,装收片盒3 CHANGE COL BOX 收片盒胶片没取完,将胶片取出4 MATERIAL EXIST 胶片位置错误,......
$1 表示按下紧急停止(EMERGENCY)开关。 $2 表示按下正面的紧急停止(EMERGENCY)开关。 $3 表示按下背面的紧急停止(EMERGENCY)开关。 $4 表示按下Teaching Box的马达自由(Free......
Subversion 错误信息一览表 注意:1.不同的客户端(命令行,TortoiseSVN, AnkhSVN, Subclipse等)的出错信息可能稍有不同。2.下面表格中的出错信息以 http://svn.moon.oxp.com/#wor......