单片机原理与应用keil错误解释

上传人:woxinch****an2018 文档编号:38984207 上传时间:2018-05-10 格式:DOC 页数:11 大小:71.50KB
返回 下载 相关 举报
单片机原理与应用keil错误解释_第1页
第1页 / 共11页
单片机原理与应用keil错误解释_第2页
第2页 / 共11页
单片机原理与应用keil错误解释_第3页
第3页 / 共11页
单片机原理与应用keil错误解释_第4页
第4页 / 共11页
单片机原理与应用keil错误解释_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《单片机原理与应用keil错误解释》由会员分享,可在线阅读,更多相关《单片机原理与应用keil错误解释(11页珍藏版)》请在金锄头文库上搜索。

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),即作外部宣告 3 Compling :C:8051MAN

2、N.C Error:318:cant open file beep.h 说明在编译 C:8051MANN.C 程序过程中由于 main.c 用了指令#include “beep.h”,但 却找不到所致 解决方法编写 一个 beep.h 的包含档并存入到 c:8051 的工作目录中 4 Compling:C:8051LED.C Error 237:LedOn:function already has a body 说明 LedOn( )函数名称重复定义即有两个以上一样的函数名称 解决方法修正其中的一个函数名称使得函数名称都是独立的 5 *WARNING 16:UNCALLED SEGMENT,I

3、GNORED FOR OVERLAY PROCESS SEGMENT: ?PR?_DELAYX1MS?DELAY 说明 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_A

4、DC 变量的名称为 0x25,请检查是 否有其它的变量名称也是定义在 0x25 处并修正它 7 WARNING 206:DelayX1ms: missing function-prototype C:8051INPUT.C Error 267 :DelayX1ms :requires ANSI-style prototype C:8051INPUT.C 说明程序 中有调用 DelayX1ms 函数但该函数没定义即未编写程序内容或函数 已定义但未作宣告 解决方法编写 DelayX1ms 的内容编写完后也要作宣告或作外部宣告可在 delay.h 的包含档宣告成外部以便其它函数调用 8 *WARNI

5、NG 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 SPA

6、CE 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 存储空间的地址范围为 00x7f,当公用变量数目和函数里的局部变量如果存 储模式设为 SMALL 则局部变量先使用工作寄存器 R2R7 作暂存当存储器不够用时则会 以 data 型别的空间作暂存的个数超过 0x7f 时就会出现地址不够的现象 解决方

7、法将以 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 vo

8、id Music3(void),即作外部宣告 3 Compling :C:8051MANN.C Error:318:cant open file beep.h 说明在编译 C:8051MANN.C 程序过程中由于 main.c 用了指令i nclude “beep.h”,但 却找不到所致解决方法编写一个 beep.h 的包含档并存入到 c:8051 的工作目录中 4 Compling:C:8051LED.C Error 237:LedOn:function already has a body 说明 LedOn( )函数名称重复定义即有两个以上一样的函数名称 解决方法修正其中的一个函数名称使得

9、函数名称都是独立的 5 *WARNING 16:UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESS SEGMENT: ?PR?_DELAYX1MS?DELAY 说明 DelayX1ms( )函数未被其它函数调用也会占用程序记忆体空间解决方法去掉 DelayX1ms( )函数或利用条件编译#if .#endif,可保留该函数并不编译 6 *WARNING 6 :XDATA SPACE MEMORY OVERLAP FROM : 0025H TO: 0025H 说明外部资料 ROM 的 0025H 重复定义地址 解 决方法外部资料 ROM 的定义如下 Pdat

10、a unsigned char XFR_ADC _at_0x25 其中 XFR_ADC 变量的名称为 0x25,请检查是否有其它的变量名称也是定义在 0x25 处并修正它7 WARNING 206:DelayX1ms: missing function-prototype C:8051INPUT.C Error 267 :DelayX1ms :requires ANSI-style prototype C:8051INPUT.C 说明程序中有调用 DelayX1ms 函数但该函数没定义即未编写程序内容或函数已定义但未 作 宣告 解决方法编写 DelayX1ms 的内容编写完后也要作宣告或作外部

11、宣告可在 delay.h 的包含 档 宣告成外部以便其它函数调用 8 *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 里

12、将 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 存储空间的地址范围为 00x7f,当公用变量数目和函数里的局部变量如果存 储模式设为 SMALL 则局部变量先使用工作寄存器 R2R7 作暂存当存储器不够用时则会

13、 以 data 型别的空间作暂存的个数超过 0x7f 时就会出现地址不够的现象 解决方法将以 data 型别定义的公共变量修改为 idata 型别的定义 说明如对编译出错感兴趣的网友能否把你们常遇到的错误信息收集起来并提出最终的 解决办法 加以归纳以期共享 10.*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 S

14、EGMENT 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?MAINCALLER2: ?C_C51STARTUP 该警告表示连接器发现有一个函数可能会被主函数和一个中断服务程序(或者调用中断 服务程序的函数)同时调 用, 或者同时被多个中断服务程序调用。

15、出现这种问题的原因之一是这个函数是不可重入性函数,当该函数运行时它可能会被一 个中断打 断,从而使得结果发生变化 并可能会引起一些变量形式的冲突(即引起函数内一些数据的丢失,可重入性函数在任何时 候都可以被 ISR 打断,一段时间后又可以 运行,但是相应数据不会丢失)。 原因之二是用于局部变量和变量(暂且这样翻译,arguments,自变量,变 元一数值,用于 确定程序或子程序的值)的内存区被其他函数的内存区所覆盖,如果该函数被中断,则它的 内存区就会 被使用,这将导 致其他函数的内存冲突。 例如,第一个警告中函数 WRITE_GMVLX1_REG 在 D_GMVLX1.C 或者 D_GMVL

16、X1.A51 被定义, 它被一个中断服务程序或者一个调用了中断 服务程序的函数调用了,调用它的函数是 VSYNC_INTERRUPT,在 MAIN.C 中。 解决方法: 如果你确定两个函数决不会在同一时间执行(该函数被主程序调用并且中断被禁止),并 且该函数不占用内存(假设只 使用寄存器), 则你可以完全忽略这种警告。 如果该函数占用了内存,则应该使用连接器(linker)OVERLAY 指令将函数从覆盖分析 (overlay analysis)中除去,例如: OVERLAY (?PR?_WRITE_GMVLX1_REG?D_GMVLX1 ! *) 上面的指令防止了该函数使用的内存区被其他函数

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

最新文档


当前位置:首页 > 中学教育 > 其它中学文档

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