Keil C 中的一些ERROR和.docx_第1页
Keil C 中的一些ERROR和.docx_第2页
Keil C 中的一些ERROR和.docx_第3页
Keil C 中的一些ERROR和.docx_第4页
Keil C 中的一些ERROR和.docx_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Keil C 中的一些ERROR和WARNING1.LAB100.C(12): error C216: subscript on non-array or too many dimensions原程序如下:#include #include void delay(int);unsigned char code dis_code8=0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a;main()int i,j;P2=0xff;while(1)P2=0x7f;for(i=0;i8;i+) P0=dis_codei; P2=_crol_j,1;j=P2;delay(1); void delay(int x)int i;for(i=0;ix;i+);问题在于P2=_crol_j,1;应该改为P2=_crol_(j,1);2.从网上COPY的程序执行类似的功能,有时候如果现象没出现,或者不明显,可以调整下延迟函数。3.数码管的扫描显示07,延迟函数的延迟时间在1ms左右,是通过人眼的视觉暂留而产生的现象,如果延迟函数设置的太大,则看不到持续显示07的现象。4.用KEILC51调试程序时,出现错误提示为“unprintable character 0XA1 skipped”用KEILC51调试程序时,出现错误提示为“unprintable character 0XA1 skipped”的问题。输入法的问题。在程序行输入中文模式下标点符号,不会显示,但是会出现标题这样的问题。打上/马上就能看到没有显示的标点符号5.* WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESSSEGMENT: ?PR?_COMPARE?TESTLCD说明:程序中有些函数(或片段)以前(调试过程中)从未被调用过,或者根本没有调用它的语句。这条警告信息前应该还有一条信息指示出是哪个函数导致了这一问题。只要做点简单的调整就可以。不理它也没什么大不了的。解决方法:去掉COMPARE()函数或利用条件编译#if .#endif,可保留该函数并不编译。6.LAB99.C(19): error C141: syntax error near , expected const程序如下:#include#includesbit LEDP=P10;unsigned char counter;main()TMOD=0x01;TH0=0x3C;TL0=0xB0;counter=0x0A;EA=1; ET0=1; TR0=1; while(1) ;void timer0_int(void) interruptTH0=0x3C;TL0=0xB0;counter-; if(counter)!=0) counter=0x0A; LEDP=LEDP; 问题在中断函数的写法上,C下面51的中断函数要这么写:void timer0_int(void) interrupt N using M其中的N是不同中断对应的中断号,一般单片机的书上都有说明的,M是这个中断函数在存储空间中所占的bank,一般不要和main函数的一样就可以了,而main函数的在bank0,那么针对51单片机,这个M可以为1,2,37.C51编译警告“* WARNING L1: UNRESOLVED EXTERNAL SYMBOL”* WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: ?C_START MODULE: .STARTUP.obj (?C_STARTUP)* WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: ?C_START MODULE: .STARTUP.obj (?C_STARTUP) ADDRESS: 000DH 如果你在用C51编译器出现上面的警告,并且找遍了网上也没能找出个究竟时,你是否觉得这个问题很难,难得以至于没人能回答呢? 其实这个只是初学者和粗心者才会犯的错误:没把C文件添加到项目中!/另外,还有可能是因为存在没有被调用的已经定义的函数。本文来自CSDN博客,转载请标明出处:/liufei_learning/archive/2010/07/15/5737531.aspx8.* WARNING L15: MULTIPLE CALL TO SEGMENT*原因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函数所调用。解决办法:(1).主程序调用该函数时禁止中断,可以在该函数被调用时用#pragma disable语句来实现禁止中断的目的。必须使用OVERLAY指令将该函数从覆盖分析中除去。(2).复制两份该函数的代码,一份到主程序中,另一份复制到中断服务程序中。(3).将该函数设为重入型。例如:void myfunc(void) reentrant . 这种设置将会产生一个可重入堆栈,该堆栈被被用于存储函数值和局部变量,用这种方法时重入堆栈必须在STARTUP.A51文件中配置。这种方法消耗更多的RAM并会降低重入函数的执行速度。9.void delay(unsigned char i) while(i-) ; main() unsigned char i,k; while(1) i=8; delay(i); i=7; delay(i); k=10; 编译器的意思是我那行程序i=7;没有用,怎么解决这个问题呢实际上是被编译了的,调用函数时传递的的确是7。没有写回到i倒是事实,因为编译器认为后面不再用i了,所以就没有回写。如果你将下面的k=10改成k=i,那么就会将7写回到i,并且keil编译器不会直接使用立即数7,而用一条减1指令,从前面的8减1变成7。10. 单片机中_crol_函数的的意思:_crol_(a,m) 将a循环左移,步进为m_cror_(a,n) 将a循环右移,步进为n11.if(temp-retmin_value)min_value=temp-ret;min_id=i;LAB06.C(72): error C193: -: illegal op-type(s)此处需要强制类型转换,因为上面有一定义 unsigned int ret50. unsigned int temp = 0temp和ret不是同一类型数据。12.用KEILC51调试程序时,出现错误提示为“unprintable character 0XA1 skipped”的问题。输入法的问题,在程序行输入中文模式下标点符号,不会显示,但是会出现标题这样的问题,打上/马上就能看到没有显示的标点符号13.#include stdafx.h#includestdio.h#includeconio.hint main(int argc, char* argv)char a99=,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*;int i,j;printf(%c,aij);return 0;error C242: a: too many initializers如果要使用缺省赋值,则前面的每行不能缺省赋值,只能在最后缺省,也就是你可以对前7行进行完全赋值,后两行缺省,却不能每行中缺一些,还缺行.initializer 初始化14. Warning 280:i?unreferenced local variable说明局部变量i 在函数中未作任何的存取操作解决方法消除函数中i 变量的宣呿15. Warning 206:Music3?missing -prototype说明Music3( )函数未作宣告或未作外部宣告所以无法给其他函数调用解决方法将叙述void Music3(void)写在程序的最前端作宣告如果是其他文件的函数则要写成extern void Music3(void),即作外部宣告16. Compling :C:8051MANN.CError:318:cant open file beep.h?说明在编译C:8051MANN.C 程序过程中由于main.c 用了指令i nclude “beep.h?但却找不到所致解决方法编写一个beep.h 的包含档并存入到c:8051 的工作目录中17. Compling:C:8051LED.CError 237:LedOn? already has a body说明LedOn( )函数名称重复定义即有两个以上一样的函数名称解决方法修正其中的一个函数名称使得函数名称都是独立的18. *WARNING 16:UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESSSEGMENT: ?PR?_DELAYX1MS?DELAY说明DelayX1ms( )函数未被其它函数调用也会占用程序记忆体空间解决方法去掉DelayX1ms( )函数或利用条件编诿if ?.#endif,可保留该函数并不编译19. *WARNING 6 :XDATA SPACE MEMORY OVERLAPFROM : 0025HTO: 0025H说明外部资料ROM 皿025H 重复定义地址解决方法外部资料ROM 的定义如下Pdata unsigned char XFR_ADC _at_0x25 其中XFR_ADC 变量的名称为0x25,请检查是否有其它的变量名称也是定义在0x25 处并修正宿br20. WARNING 206:DelayX1ms? missing -prototypeC:8051INPUT.CError 267 :DelayX1ms ?requires ANSI-style prototype C:8051INPUT.C说明程序中有调用DelayX1ms 函数但该函数没定义即未编写程序内容或函数已定义但未作宣告解决方法编写DelayX1ms 的内容编写完后也要作宣告或作外部宣告可在delay.h 的包含档宣告成外部以便其它函数调甿br21. *WARNING 1:UNRESOLVED EXTERNAL SYMBOLSYMBOL:MUSIC3MODULE:C:8051MUSIC.OBJ(MUSIC)*WARNING 2:REFERENCE MADE TO UNRESOLVED EXTERNALSYMBOL:MUSIC3MODULE:C:8051MUSIC.OBJ(MUSIC)ADDRESS:0018H说明程序中有调用MUSIC 函数但未将该函数的含扩档C 加入到工程档Prj 作编译和连接解决方法设MUSIC3 函数在MUSIC C 里将MUSIC C 添加到工程文件中县br22. *ERROR 107:ADDESS SPACE OVERFLOWSPACE: DATASEGMENT: _DATA_GOUP_LENGTH: 0018H*ERROR 118: REFERENCE MADE TO ERRONEOUS EXTERNALSYMBOL: VOLUMEMODULE: C:8051OSDM.OBJ (OSDM)ADDRESS: 4036H说明data 存储空间的地址范围丿0x7f,当公用变量数目和函数里的局部变量如果存储模式设为SMALL 则局部变量先使用工作寄存器R2R7 作暂存当存储器不够用时则伿br 以data 型别的空间作暂存的个数超迿x7f 时就会出现地址不够的现豿br 解决方法将以data 型别定义的公共变量修改为idata 型别的定乿br 说明如对编译出错感兴趣的网友能否把你们常遇到皿strong style=COLOR: black; BACKGROUND-COLOR: #99ff99错误信息收集起来并提出最终的解决办法加以归纳以期共享(转自:/s/blog_5f0bed160100cmu9.html)23. keilc51 的编程:(1)、 注意程序的输入方法,使用简体中文-美式键盘(2)、 拷贝程序是要注意,防止看不到的乱码产生(3)、 F11、step:以单步执行程序 F10、step over

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论