keil编译时出现错误和警告总结

发布者:幸福时刻最新更新时间:2018-10-06 来源: eefocus关键字:keil编译  错误  警告 手机看文章 扫描二维码
随时随地手机看文章

1、ERROR L104: MULTIPLE PUBLIC DEFINITIONS重复定义


        c/c++语言中有很多地方要用到extern,但是如果没有真正的了解它的意义,会给编程带来很大的麻烦,为了使大家少走弯路,特祥细的说明一下。


      对于比较小的程序,一般只有一个c文件和一个头文件,全局变量我们通常会直接定义在c文件中,在程序之前加int i定义。如果要在头文件中定义有以下两种方法:用extern来声明:extern int i;这一句只是对变量i进行声明,在c文件的程序之前必须加上int i进行定义。extern int i=0;这一句声明和定义都做了。


    对于大一点的程序,有很多c文件和头文件,这个时候全局变量就必须在头文件中声明(不需要初始化),然后在一个c文件中定义(该初始化的要初始化)。如果在头文件中定义,则编译的时候会出现重复定义的错误。如果只有头文件中声明就会出现没有定义有警告。


   *** ERROR L104: MULTIPLE PUBLIC DEFINITIONS


       SYMBOL: K


       MODULE: 222.obj (222)


出现上述错误则是因为变量k重复定义,把你的头文件中的变量定义前加extern(只是变量声明不用初始化),再在某一个你要调用该变量的c文件的程序之前再定义(注意第一个调用的c文件要负责附带初始化该变量,其他调用的c文件就不需要初始化过程啦)


 


 


2、*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS


 


解决办法: 说明:程序中有些函数(或片段)以前(调试过程中)从未被调用过,或者根本没有调用它的语句。 这条警告信息前应该还有一条信息指示出是哪个函数导致了这一问题。只要做点简单的调整就可以。不理它也没什么大不了的。


 


 


 


3、'DATA':SEGMENT TOO LARGE


 


解决办法:(1)内部直接寻址段使用溢出,可以将Option   for   Target "XXXX "中   的Target属性页中Memory   Model   改为Large:Variables   in   Xdata   即可。


 


(2)数据段超出芯片内部RAM范围,把一些数据变量放到外部数据存储器中去就可以了。


 


 


4、Limit:0800h BYTES


 


解决办法:2K限制说明你的KEIL不是注册版,你到网上找个注册机,算个号,填到KEIL里就能解开这个限制了。


 


 


5、破解keil软件注册报错:ERROR R208: RENEW LICENSE ID CODE (LIC)


 


解决办法:我电脑装上Keil C51 v8.02后,无论如何都不能激活成功,添加license ID一直提示“ ERROR R208: RENEW LICENSE ID CODE (LIC)”。改用修改TOOLS.INI文件的方法:找到keil安装目录下的TOOLS.INI文件,打开它,在最下面写上这一行IC0=LSXJ7-EDJF2-DQA02-3QVZL-FRG8T-C6WID(注册码可以用你的Keil_lic_v2.exe生成),保存退出,然后点 File 下的 License Management 显示已经注册成功。


 


调试后,提示2K代码的限制。这说明Keil其实还没有注册成功。同时编译时还会报错!应用程序错误。


 


关闭所有网络连接,然后进行注册方可。。。。


 


 


6、C8051F020 下载器JTAG U-EC5无法下载


 


解决办法:一种软件对USB口调试器(EC5和ToolStick)进行复位和固件升级。(如果没有显示设备序列号,可以重插上EC5后,点Refresh list),之后点Updata Fireware即可更新为最新固件。


 


 


 


7、keil\tools.ini.file could not be found


 


解决办法:那是因为keil软件没有安装好,重新安装一遍就好了。


8、requires ansi-style prototype



解决办法:原因应该是:你的主函数在调用该函数时,找不到函数原型


 


                   解决办法:把对应函数放在最先定义和声明


 


 


 


 


1)提示无M51文件


 


编译时候提示:


 


F:\...\XX.M51


 


File has been changed outside the editor, reload 


解决方法:

重新生成项目,产生STARTUP.A51即可。


 


(2)L15重复调用


***WARNING L15: MULTIPLE CALL TO SEGMENT


SEGMENT:  


CALLER1: 


CALLER2:


    该警告表示连接器发现有一个函数可能会被主函数和一个中断服务程序(或者调用中断服务程序的函数)同时调用,或者同时被多个中断服务程序调用。


    出现这种问题的原因之一是这个函数是不可重入性函数,当该函数运行时它可能会被一个中断打断,从而使得结果发生变化并可能会引起一些变量形式的冲突(即引起函数内一些数据的丢失,可重入性函数在任何时候都可以被ISR打断,一段时间后又可以运行,但是相应数据不会丢失)。

    原因之二是用于局部变量和变量(暂且这样翻译,arguments,[自变量,变元一数值,用于确定程序或子程序的值])的内存区被其他函数的内存区所覆盖,如果该函数被中断,则它的内存区就会被使用,这将导致其他函数的内存冲突。

    例如,第一个警告中函数WRITE_GMVLX1_REG 在D_GMVLX1.C 或者D_GMVLX1.A51被定义,它被一个中断服务程序或者一个调用了中断服务程序的函数调用了,调用它的函数是VSYNC_INTERRUPT,在MAIN.C中。


解决方法:

    如果你确定两个函数决不会在同一时间执行(该函数被主程序调用并且中断被禁止),并且该函数不占用内存(假设只使用寄存器),则你可以完全忽略这种警告。


关键字:keil编译  错误  警告 引用地址:keil编译时出现错误和警告总结

上一篇:keil中勾选microlib使用printf
下一篇:单片机简单数字滤波算法

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

微软发出警告:iOS与Android端Cortana将在3月31日停止支持
微软 Cortana 很快就会在 iOS 和 Android 设备上消失,现在该应用会提醒用户停止使用。   iOS 和 Android 上的 Cortana 应用将于 2021 年 3 月 31 日停用,推特用户 Rohit Yadav 分享了一张 Android 上 Cortana 应用的截图,提醒用户该应用即将停用,iPhone 端应用也出现了同样的警告。   微软在一份支持文件中详细介绍了即将停用的情况,“正如我们在 7 月宣布的那样,我们将很快结束对 Android 和 iOS 上 Cortana 应用的支持,而 Cortana 作为生产力助手将继续发展。从 2021 年 3 月 31 日起,你创建的 Cort
[手机便携]
KeilMDK4.22 编译STM32工程警告:warning: #223-D
建立工程,编译大量报错和警告: ..\FWlib\src\stm32f10x_usart.c(135): warning: #223-D: function assert_param declared implicitly ..\FWlib\src\stm32f10x_usart.c: assert_param(IS_USART_ALL_PERIPH(USARTx)); ..\FWlib\src\stm32f10x_usart.c: ^ ..\FWlib\src\stm32f10x_usart.c(184): warning: #223-D: function assert_param declared implicit
[单片机]
KeilMDK4.22 <font color='red'>编译</font>STM32工程<font color='red'>警告</font>:warning: #223-D
基于频域水印嵌入方法的MPEG-4形状错误隐藏技术
1 引言 随着网络和多媒体技术的迅速发展,人们对视频应用提出了新的要求,基于内容的交互编码标准 MPEG-4 就是适应这一要求而提出来的。MPEG-4视频编码标准面向内容编码,视频数据以基于内容的方式进行压缩、传输、编辑、检索,与以往视频编码标准的主要区别在于对象的概念,输入的视频不再足象素,而是视频对象,以视频对象作为操作的单位实现传统编码的所有功能。视频对象按照时空关系组成的场景,但是场景的前景对象和背景对象得以独立编码,如图1有两种基本的基于视频对象的视频场景的组成方法,每个场景可以由直接从视频序列中分隔的视频对象组成((a)分隔场景),也可以是现有的视频对象进行组合((b)组成场景)。另外也有可能场景是由上述的两种方
[模拟电子]
基于频域水印嵌入方法的MPEG-4形状<font color='red'>错误</font>隐藏技术
Keil4编译时的最小系统软件
搞了好几个月就没有想到。一直没有去找“为什么离开了那个编译环境就出错,就编译不了”的原因,今天下午花了一下午的时间,做了个到哪里也能编译的模板。核内容如下: 一、最小软件编译系统文件: 二、一定要设置好路径:
[单片机]
<font color='red'>Keil</font>4<font color='red'>编译</font>时的最小系统软件
stm32 栈溢出 错误
今天搞的一个stm32 的程序发生了错误。全局变量遭到了局部变量的篡改。新手感觉很奇特。 看了一些资料,发现时栈区设置太小所导致的,全局变量向上生长,栈区向下生长。stm32的栈顶是程序自动生成的(暂时是这么认为的,有待进一步确定),程序会地洞生成栈顶。并且栈底和全局变量区是紧挨的,因此如果栈溢出的话,会直接将全局变量去的地址拿来自己用,于是全局变量区的地址和栈区的地址重合,导致全局变量遭到局部变量篡改的错误。 看看下面一些专业的解释会更清晰! 对于单片机这种封闭代码的运行平台,内存分配有2个大方向,一个是静态变量,一个是动态变量,具体到作用域,又分为局部变量和全局变量. 全局静态变量:不管是否调用,它都在那里,比如L
[单片机]
stm32 栈溢出 <font color='red'>错误</font>
SPI总线的特点、工作方式及常见错误解答
1.SPI总线 简介   SPI(serial peripheral interface,串行外围设备接口)总线技术是Motorola公司推出的一种同步串行接口。它用于CPU与各种外围器件进行全双工、同步串行通讯。它只需四条线就可以完成MCU与各种外围器件的通讯,这四条线是:串行时钟线(CSK)、主机输入/从机输出数据线(MISO)、主机输出/从机输入数据线(MOSI)、低电平有效从机选择线CS。当SPI工作时,在移位寄存器中的数据逐位从输出引脚(MOSI)输出(高位在前),同时从输入引脚(MISO)接收的数据逐位移到移位寄存器(高位在前)。发送一个字节后,从另一个外围器件接收的字节数据进入移位寄存器中。即完成一个字节数据传输
[嵌入式]
KEIL C51错误的解决办法
有时候在编好一个程序之后,编译链接时,提示说有如下错误。 错误为 ..\校长基金1\TEXT1.C(56): error C100: unprintable character 0xA1 skipped ..\校长基金1\TEXT1.C(56): error C100: unprintable character 0xA2 skipped 但是在这一行,怎么找,也没找到错误。觉得是很正确的,其实,可能就是在第56行是否有在中文输入法下输入的东西,尤其是()这个东西或者是,在你的56行,有中文符号,可能偶尔是你不小心按错键盘没注意到。但是没有显示出来,因为在KEIL C51中,中文符号只能在注释里显示出来。()这个符号除外。可以在
[单片机]
几乎完美 vivo/华为屏下指纹汇顶科技造:错误率极低
  全面屏时代,几乎所有用户都在期盼 屏下指纹 识别的普及,但其技术难度实在太大,甚至苹果、三星都攻关失败,不得不暂时放弃。下面就随手机便携小编一起来了解一下相关内容吧。   但是这道坎终于还是被国产厂商们跨过了。vivo X21、华为Mate RS保时捷设计已经先后上用了 屏下指纹 ,而 汇顶 科技(Goodix)今天骄傲地宣布,vivo、华为采用的都是他家的 屏下指纹 方案。   几乎完美 vivo/华为屏下指纹汇顶科技造:错误率极低   根据官方介绍, 汇顶 的屏下光学指纹识别技术,是将光学指纹传感器完整地集成到OLED显示屏下,实现了“屏幕即指纹识别”,无需设计实体按键,用户直接轻触移动终端显示屏指定区域,即可实现指
[手机便携]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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