keil c编译器错误与解决方法

发布者:qin199099最新更新时间:2016-12-14 来源: eefocus关键字: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.C 
Error: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.C 
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 OVERLAP 
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 
C:\8051\INPUT.C 
Error 267 :’DelayX1ms ‘:requires ANSI-style prototype C:\8051\INPUT.C 
说明程序中有调用DelayX1ms 函数但该函数没定义即未编写程序内容或函数已定义但未作宣告 
解决方法编写DelayX1ms 的内容编写完后也要作宣告或作外部宣告可在delay.h 的包含档宣告成外部以便其它函数调用 

8 ***WARNING 1:UNRESOLVED EXTERNAL SYMBOL 
SYMBOL:MUSIC3 
MODULE:C:\8051\MUSIC.OBJ(MUSIC) 
***WARNING 2:REFERENCE MADE TO UNRESOLVED EXTERNAL 
SYMBOL:MUSIC3 
MODULE:C:\8051\MUSIC.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:\8051\OSDM.OBJ (OSDM) 
ADDRESS: 4036H 
说明data 存储空间的地址范围为0~0x7f,当公用变量数目和函数里的局部变量如果存储模式设为SMALL 则局部变量先使用工作寄存器R2~R7 作暂存当存储器不够用时则会以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 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 
该警告表示连接器发现有一个函数可能会被主函数和一个中断服务程序(或者调用中断服务程序的函数)同时调用, 或者同时被多个中断服务程序调用。 出现这种问题的原因之一是这个函数是不可重入性函数,当该函数运行时它可能会被一个中断打断,从而使得结果发生变化并可能会引起一些变量形式的冲突(即引起函数内一些数据的丢失,可重入性函数在任何时候都可以被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)之外。这种OVERLAY 指令能使编译器除去上述警告信息。 
如果函数可以在其执行时被调用,则情况会变得更复杂一些。这时可以采用以下几种方 
法: 
1.主程序调用该函数时禁止中断,可以在该函数被调用时用#pragma disable 语句来实现禁 
止中断的目的。必须使用OVERLAY 指令将该函数 
从覆盖分析中除去。 
2.复制两份该函数的代码,一份到主程序中,另一份复制到中断服务程序中。 
3.将该函数设为重入型。例如: 
void myfunc(void) reentrant { 
... 

这种设置将会产生一个可重入堆栈,该堆栈被被用于存储函数值和局部变量,用这种 
方法时重入堆栈必须在STARTUP.A51 文件中配置。 
这种方法消耗更多的RAM 并会降低重入函数的执行速度。 

11. *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS 
SEGMENT: ?PR?_COMPARE?TESTLCD 
说明:程序中有些函数(或片段)以前(调试过程中)从未被调用过,或者根本没有调用它的语句。 
这条警告信息前应该还有一条信息指示出是哪个函数导致了这一问题。只要做点简单的调整就可以。不理它也没什么大不了的。 
解决方法:去掉COMPARE()函数或利用条件编译#if …..#endif,可保留该函数并不编译。 

关键字:keil  c编译器错误  解决方法 引用地址:keil c编译器错误与解决方法

上一篇:C 编译器错误信息中文翻译
下一篇:利用Keil u4调试,精确实现软件延时

推荐阅读最新更新时间:2024-03-16 15:25

Keil C51处理可重入函数问题的探讨
  在程序设计中,变量具体可以分为四种类型:全局变量、静态全局变量、局部变量、静态局部变量。这几种变量类型对函数的可重入产生的重大的影响,因为不同的编译器采用不同的策略。   针对51的存储区有限,keil c51因此有了覆盖和共享的处理方法。   共享:共享是针对全局变量或静态变量而言的,对全局变量定义后就对其分配了内存,其他变量不会覆盖这一地址,在任何函数或者程序中都可以共享该变量的内存。   覆盖:如果一个程序不再被调用,也不由其他的程序调用,在其他的程序运行之前程序也不在运行,那么这个程序的局部变量可以放在与其他的程序完全相同的RAM空间,这就是覆盖。   所以说C51编译器并不是真正的C编译器。   先说一下keil
[单片机]
STM32F10xxx_Keil中添加的预定义宏
文章目录 更新记录 Use Standard Peripheral Driver 更新记录 version status description date author V1.0 C Create Document 2018.10.15 John Wan status: C―― Create, A—— Add, M—— Modify, D—— Delete。 Use Standard Peripheral Driver    在Keil MDK环境中使用STM32固件库建立工程时,可能会遇到编译不通过的问题。出现如下警告或错误提示: warning:#223-D:function assert_param declar
[单片机]
Keil C51程序调试过程
用MCS-51单片机软件Keil C51编写程序时,经常需要调试,如果不是经常用这个软件的话,很容易忘记这些调试步骤,现在举一个例子 验证延迟函数delay()使其延迟的时间为500ms 供以后复习查考。 源程序写完后,就可以调试了,按照图1所示,先进行第一步和第二步操作,使界面切换到图2的状态,可以看到在文本编辑窗口中,有一个黄色箭头指向13行的位置,说明程序从这个位置开始执行。左上角有一些跟调试相关的按钮,如 全速执行 、 单步进入 ~~~对于我这个例子,目的是验证delay()函数的延迟时间,使其大约为500ms。按照下列方法可以达到我的目的: 图1 编译界面 图2 调试界面 点击 单步跳出 按钮(或功能键F
[单片机]
<font color='red'>Keil</font> <font color='red'>C</font>51程序调试过程
Keil c51的应用及特性解析
Keil c51号称作为51系列单片机最好的开发环境,大家一定都很熟悉。它的一些普通的特性大家也都了解,(书上也都说有)如:因为51内的RAM很小,C51的函数并不通过堆栈传递参数(重入函数除外),局部变量也不存储在堆栈中,而是存在于固定的RAM中及寄存器中。那么看一下下面的程序。 void fun1(unsigned char i) { } 正常情况参数i通过R7传入函数,那么它的实际地址在什么地方呢?就是R7吗?回答这个问题之前我们先来了解keil c51的几个有趣的特性(不考虑重入函数)。 一、函数在调用前定义与在调用后定义产生的代码是有很大差别的(特别是在优化级别大于3级时)。(本人也不太清楚为什么,大概因为在
[单片机]
学51单片机-KEIL的使用与程序的下载
很多人学单片机的时候都会遇到的情况,程序写的漂漂亮亮,原理理解的通通透透,但是.......不会用编译软件,不知道怎么下载程序,貌似大学的时候我老师就没讲过,呵呵。所以今天主要讲一下这两个软件的应用。 注:单片机种类多种多样,编译环境自然也有很多种。学习一种编译软件肯定需要一定的时间,不过软件界面基本都是大同小异,会了一个再去学另一个会很快。还有个现象,很多人喜欢用汉化版,个人感觉没必要。首先,汉化的不一定标准;其次,工具英语就那么几个单词,记下来就OK了,汉化反而会增加不必要的麻烦。 好了,废话少说,开始! 先说keil uvision,第一步,双击打开该软件,界面如下: 写代码的话
[单片机]
学51单片机-<font color='red'>KEIL</font>的使用与程序的下载
Flash Download failed - "Cortex-M3"解决方法
前几天在玩STM32F1的时候,烧录代码的时候出现这样一个错误。 Error:Flash Download failed - Cortex-M3 首先肯定要看配置问题: 采用不同的仿真器,需要配置的选项就不同,这个完全可以自己看产品说明。 当确定配置没有问题后,还是同样的问题出现,可以来到下图的配置框中: 点击“”“Add”后就会出现如下的Programming Algorithm: 在里头找到自己芯片对应的型号,点击“”Add“”添加就可以解决问题了。 如果真的很不凑巧,在Programming Algorithm愣是没找到你需要的型号,可以直接去你安装keil文件夹下: 将MDK keil5AR
[单片机]
Flash Download failed - 解决方法" />
6位8段数码管动态驱动电路原理图及Keil C51驱动程序
/* 6位数码管演示程序: 显示数码从0---99循环,按 P3.2 按键,显示从 0 开始*/ #i nclude reg52.h int count1s; unsigned int count1m; unsigned char dis_bitcount=0; unsigned char display_o ; unsigned char display_q ; unsigned char code SEG ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; unsigned char dis_bitdriver=0; void del
[单片机]
手机RF设计中面临的几个难点及解决方法
一、 关于手机RF干扰问题的解决 针对GSM手机的RF干扰问题,刘俊勇指出,GSM 手机是TDMA工作方式,RF收发并不是同时进行的,减少RF干扰的基本原则是一定要加强匹配和隔离。 在设计时要考虑到发射机处于大功率发射状态,与接收机相比更容易造成干扰,所以一定要特别保证功率放大器(PA)的匹配。另外RF前端滤波器的隔离也是一个 重要的指标。PCB板一般是6层或8层,必须要有足够的接地面以减少RF干扰。 他特别强调射频系统会对数字基带(DBB)、模拟基带(ABB)等产生电磁干扰,而加强射频屏蔽是一个有效的措施。他还指出,手机与基站通信中产生的TDMA噪声、突发噪声会给基带的话音处理中带来比较明显的噪声,应该
[手机便携]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved