打印
[技术问答]

Keil中如何消除UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESS警告

[复制链接]
766|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
123ycli|  楼主 | 2019-4-27 20:24 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
在Keil C中,如果没有显式调用到定义过的函数,就会出现这样的的警告。当出现这样的警告时,可以不用管,因为不影响其它部分。但是,我们知道,即使没有调用这个函数,Keil仍然把它编译连接进整个程序,不过浪费点ROM倒是不心疼。最主要的是,在这个函数中的变量,不会被列入覆盖分析范围内,也就是说这些变量占的空间不能被回收,这对于为数不多的RAM资源可是巨大的浪费啊。。。

当这个不被调用的函数写在C文件中时,可以把它注释掉来解决这个问题。我想知道的是,当我将一组函数包装成lib文件时,又怎么解决问题呢?总不能每次都重新生成lib吧,这样的话移植性不就成问题了?还有,Keil自带的库中必然有很多函数,也必然有很多用不到的,为什么就不没有UNCALLED SEGMENT呢?我猜想它的lib的源代码有什么特殊的地方(我猜的)。小弟请教各位高手解决此问题的方法或技巧。

使用特权

评论回复

相关帖子

沙发
123ycli|  楼主 | 2019-4-27 20:24 | 只看该作者
(1)可以用条件编译啊, #ifdef ** (程序段1) #else (程序段2) #endif**是在前面用#define定义的标识符,作用是如果定义了**,就编译(程序段1),否则编译(程序段2).
如果你一定要考虑可移植性的话,就这样做,否则还是

使用特权

评论回复
板凳
123ycli|  楼主 | 2019-4-27 20:24 | 只看该作者
(2)直接用注释符隐蔽掉,或者直接删掉,会比较快。

使用特权

评论回复
地板
123ycli|  楼主 | 2019-4-27 20:25 | 只看该作者
(3)想不显示这些提示:则可设置如下:

option for target --->bl51 misc --->disable warning ==这里写入16

使用特权

评论回复
5
jerow| | 2019-4-30 23:19 | 只看该作者
支持下,谢谢分享!

使用特权

评论回复
6
ayb_ice| | 2019-5-5 15:44 | 只看该作者
如图:适合新版本,较老的版本不支持这个命令


QQ截图20190505154143.bmp (868.38 KB )

QQ截图20190505154143.bmp

使用特权

评论回复
7
ayb_ice| | 2019-5-5 15:48 | 只看该作者
还有一种通用的方法

就是写段代码,定义一个不会满足的的条件(比如一个uchar型变量强制转换成uint型,结果大于256),调用未使用的函数即可
我以前一直是这么用的,直到出现REMOVEUNUSED出现

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

324

帖子

0

粉丝