keil软件编译常见错误解释总结和中文翻译

上传人:新** 文档编号:488001397 上传时间:2022-12-06 格式:DOCX 页数:13 大小:32.07KB
返回 下载 相关 举报
keil软件编译常见错误解释总结和中文翻译_第1页
第1页 / 共13页
keil软件编译常见错误解释总结和中文翻译_第2页
第2页 / 共13页
keil软件编译常见错误解释总结和中文翻译_第3页
第3页 / 共13页
keil软件编译常见错误解释总结和中文翻译_第4页
第4页 / 共13页
keil软件编译常见错误解释总结和中文翻译_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《keil软件编译常见错误解释总结和中文翻译》由会员分享,可在线阅读,更多相关《keil软件编译常见错误解释总结和中文翻译(13页珍藏版)》请在金锄头文库上搜索。

1、Keil编译时出现错误和警告的总结和 C 编译器错误信息中文翻译(1) L15 重复调用*WARNING L15: MULTIPLE CALL TO SEGMENTSEGMENT: ?PR?SPI_RECEIVE_WORD?D_SPICALLER1:?PR?VSYNC_INTERRUPT?MAINCALLER2:?C_C51STARTUP该警告表示连接器发现有一个函数可能会被主函数和一个中断服务程序(或者调用中断服务程序的函 数)同时调用,或者同时被多个中断服务程序调用。出现这种问题的原因之一是这个函数是不可重入性函数,当该函数运行时它可能会被一个中断打断,从 而使得结果发生变化并可能会引起一

2、些变量形式的冲突(即引起函数内一些数据的丢失,可重入性函数在任何时候 都可以被 ISR 打断,一段时间后又可以运行,但是相应数据不会丢失)。原因之二是用于局部变量和变量(暂且这样翻译,argumen ts,自变量,变元一数值,用于确定程序或子 程序的值)的内存区被其他函数的内存区所覆盖, 如果该函数被中断, 则它的内存区就会被使用, 这将导致其他函数 的内存冲突。例如,第一个警告中函数WRITE_GMVLX1_REG在D_GMVLX1.C或者D_GMVLX1.A51被定义,它被一个中断 服务程序或者一个调用了中断服务程序的函数调用了,调用它的函数是VSYNC_INTERRUPT,在MAIN.C

3、中。解决方法:如果你确定两个函数决不会在同一时间执行(该函数被主程序调用并且中断被禁止),并且该函数不占 用内存(假设只使用寄存器),则你可以完全忽略这种警告。如果该函数占用了内存,则应该使用连接器(linker)OVERLAY指令将函数从覆盖分析(overlay analysis)中除去,例如:OVERLAY (?PR?_WRITE_GMVLX1_REG?D_GMVLX1 ! *)上面的指令防止了该函数使用的内存区被其他函数覆盖。如果该函数中调用了其他函数,而这些被调用在 程序中其他地方也被调用,你可能会需要也将这些函数排除在覆盖分析(overlay analysis)之外。这种OVERLA

4、Y指 令能使编译器除去上述警告信息。如果函数可以在其执行时被调用,则情况会变得更复杂一些。这时可以采用以下几种方法:1. 主程序调用该函数时禁止中断,可以在该函数被调用时用#pragma disable语句来实现禁止中断的目的。必 须使用OVERLAY指令将该函数从覆盖分析中除去。2. 复制两份该函数的代码,一份到主程序中,另一份复制到中断服务程序中。3. 将该函数设为重入型。例如:void myfunc(void) reentrant 这种设置将会产生一个可重入堆栈,该堆栈被被用于存储函数值和局部变量,用这种方法时重入堆 栈必须在STARTUP.A51文件中配置。这种方法消耗更多的RAM并会

5、降低重入函数的执行速度。(2) 提示无M51文件编译时候提示:F:.XX.M51File has been changed outside the editor, reload ?解决方法:重新生成项目,产生STARTUP.A51即可。(3) L16无调用* WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESSSEGMENT: ?PR?_COMPARE?TESTLCD说明:程序中有些函数例如COMPARE (或片段)以前(调试过程中)从未被调用过或者根本没 有调用它的语句。这条警告信息前应该还有一条信息指示出是哪个函数导致了这一问

6、题。只要做点简单的调整就 可以。不理它也没什么大不了的。解决方法:去掉COMPARE ()函数或利用条件编译#if .Hendif,可保留该函数并不编译。(4) L10和L16主程序名字写错(或无主程序)程序中:void mian (void)编译提示:* WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESSSEGMENT: ?PR?MIAN?MAIN* WARNING L10: CANNOT DETERMINE ROOT SEGMENTProgram Size: data=8.0 xdata=0 code=9修改:缺少主程序(其

7、实是笔误),将 mian 改为 main(5) L16 主程序没用到前面定义的函数 主程序里没用到前面定义的函数,编译时显示:* WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESSSEGMENT: ?PR?DELAY?MAIN(6) L210程序前生成SRC语句Build target Target 1assembling STARTUP.Apiling test.C.linking.BL51 BANKED LINKER/LOCATER V6.00 - SN: K1JXC-94Z4V9COPYRIGHT KEIL ELEKTRO

8、NIK GmbH 1987 - 2005STARTUP.obj,test.objTO test* FATAL ERROR L210: I/O ERROR ON INPUT FILE:EXCEPTION 0021H: PATH OR FILE NOT FOUNDFILE: test.objTarget not created设置上的问题,在程序里屏蔽掉#pragma src即可(7) C206 函数未定义该函数没定义MAIN.C(15): warning C206: delay1: missing function-prototype(8) C141 少分号部分程序:pval = P1 /* R

9、ead P1 into pval */P3 = pval; /* Write pval to P3 */编译提示出错:MAIN.C(22): error C141: syntax error near P3改正: P1 后加;(9) C129汇编与C后缀问题例如写这么一段小程序,保存为cO.c,编译时出现error cl29, miss ; before 0000;如果保存为:c0.asm就不会出现这个错误,保存为c的话,先调用c51编译器,按c语言的要求编译,所以出现错误;可以参考一些书,专门介绍keilc这个编译器的;(10) C101 和 C141 关于数组引号问题定义了如下的数组:un

10、signed chara36=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7e,0x7d,0x7b,0x77,0x6f, 0x5f,0x3f,0x3e,0x3d,0x3b,0x37,0x2f,0x1f,0x1e,0x1d,0x1b,0x17,0x0f,0x0e,0 x0d,0x0b,0x07,0x06,0x05,0x03,0x02,0x01,0x00;可是编译的时候总通不过,错误提示如下:Build target Target 1compiling shaomiao.c.SHAOMIAO.C(3): error C101: 0: invalid char

11、acter constantSHAOMIAO.C(3): error C141: syntax error near xfeSHAOMIAO.C(3): error C101: : invalid character constantTarget not created解决方法:去掉.引号(11) C100和C141和C129程序有中文标点用 keil 编译时出现错误,如下: D:KEILC51INCREG52.H(1): error C100: unprintable character 0xA1skipped同上错误有很多个,还有 D:KEILC51INCREG52.H(2): error

12、 C141: syn tax error near #D:KEILC51INCREG52.H(2):errorC129:missing;before 但是reg52.h头文件是keil自带的(见下),为何会报错呀。回答:程序里有带中文标点,用英文重新写一遍即可(12) A45汇编出现数字、字母混淆MOVPO,A ;put onnext11MOVRO,#0FFH ;14MOVR1,#OFFH ;15;1920DJNZ RO,DLY_LPMOV R0,#OFFH ;编译后:asm(11):errorA45:UNDEFINEDSYMBOL(PASS-2)asm(14):errorA45:UNDEFI

13、NEDSYMBOL(PASS-2)asm(15):errorA45:UNDEFINEDSYMBOL(PASS-2)asm(19):errorA45:UNDEFINEDSYMBOL(PASS-2)asm(20):errorA45:UNDEFINEDSYMBOL(PASS-2)ledtest.ledtest.ledtest.ledtest.ledtest.Target not created注意:字母“0”和数字“0”。主要错在这里。应该输入数字“ 0 ” ,而你输入字母“ 0 ”了。1. Warning 280:i:unreferenced local variable说明局部变量i在函数中未作

14、任何的存取操作解决方法消除函数中i变量的宣告2 Warning 206:Music3:missing function-prototype说明Music3()函数未作宣告或未作外部宣告所以无法给其他函数调用解决方法将叙述void Music3(void)写在程序的最前端作宣告如果是其他文件的函数则要写 成 extern void Music3(void),即作外部宣告3 Compling :C:8051MANN.CError:318:cant open file beep.h说明在编译C:8051MANN.C程序过程中由于main.c用了指令# i nclude “beep.h”,但 却找不到所致解决方法编写一个beep.h的包含档并存入到c:8051的工作目录中4 Compling:C:8051LED.CError 237:LedOn:function already has a body说明LedOn()函数名称重复定义即有两个以上一样的函数名称 解决方法修正其中的一个函数名称使得函数名称都是独立的5 *WARNING 16:UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESSSEGMENT: ?PR?_DELAYX1MS?DELAY说明DelayXlms()函数未被

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 机械/制造/汽车 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号