找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 938|回复: 8
收起左侧

请问keil中源码中不想注销的函数,怎么在编译时不报错

[复制链接]
回帖奖励 20 黑币 回复本帖可获得 20 黑币奖励! 每人限 1 次
ID:1043388 发表于 2023-3-14 14:21 | 显示全部楼层 |阅读模式

图3

图3

如图所示,我在delay.h中保留了void Delay1ms();但是实际在main()中,我并没有用,在编译时就会报warning

*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?DELAY1MS?DELAY

图2

图2


warning的意思我明白。但是我在看stm32的源码的时候,,main函数里也没有调用所有的函数。但是编译就不会报warning。我想问问各位大佬怎么在不注释掉void Delay1ms();的情况下。任然编译后没有warning。或者说stm32是怎么实现在有大量函数不被调用的情况下还能不报错的


图1

图1
回复

使用道具 举报

ID:807182 发表于 2023-3-14 15:53 | 显示全部楼层
借CSDN上一位大哥的回复            
                                                
                                                
***WARNINGL16:UNCALLEDSEGMENT,IGNOREDFOROVERLAYPROCESS
   SEGMENT:?PR?_COMPARE?TESTLCD
说明:程序中有些函数例如COMPARE(或片段)以前(调试过程中)从未被调用过,或者根本没
有调用它的语句。
这条警告信息前应该还有一条信息指示出是哪个函数导致了这一问题。只要做点简单的调整就
可以。不理它也没什么大不了的。但是,我们知道,即使没有调用这个函数,Keil仍然把它编译连接进整个程序,不过浪费点ROM倒是不心疼。最主要的是,在这个函数中的变量,不会被列入覆盖分析范围内,也就是说这些变量占的空间不能被回收,这对于为数不多的RAM资源可是巨大的浪费啊。。。
解决方法:

(1)删除或注释掉COMPARE()函数

(2)或利用条件编译#if…..#endif,可保留该函数并不编译。

   如果你一定要考虑可移植性的话,就这样做,否则还是采取方法(1)

   (3)想不显示这些提示:则可设置如下:
       option for target
       --->bl51 misc
       --->disable warning ==这里写入16
回复

使用道具 举报

ID:1034262 发表于 2023-3-14 16:27 | 显示全部楼层
可以设置的,但是C51我不建议这么做,没调用的会分配内存的,51芯片内存本来就吃紧,不要浪费了。
回复

使用道具 举报

ID:1019324 发表于 2023-3-14 16:33 | 显示全部楼层
按照下面这个图勾选上就可以了,勾选之后没用到的函数不会编译进hex文件就不会报错
20160912155348054.jpg

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:1019324 发表于 2023-3-14 16:38 | 显示全部楼层
进入options中的User 将one ELF section per勾选即可;它的作用是将主函数没用到的函数不进行编译
回复

使用道具 举报

ID:161164 发表于 2023-3-14 17:58 | 显示全部楼层
地板和5楼的适用于Keil MDK
Keil C51有另一种方法
2023-03-14_175742.png

2023-03-14_175751.png

REMOVEUNUSED

回复

使用道具 举报

ID:1043388 发表于 2023-3-14 19:43 来自手机 | 显示全部楼层
lkc8210 发表于 2023-3-14 17:58
地板和5楼的适用于Keil MDK
Keil C51有另一种方法


感谢回复,我搜了一下确实很符合我的需求
回复

使用道具 举报

ID:1043388 发表于 2023-3-14 19:45 来自手机 | 显示全部楼层
暖西夏 发表于 2023-3-14 15:53
借CSDN上一位大哥的回复            
                                                
             ...

感谢回复,另外我想知道要是用#if...#endof的话,应该用什么条件判断是否使用函数呢
回复

使用道具 举报

ID:1043388 发表于 2023-3-14 19:45 来自手机 | 显示全部楼层
清风皓月抚心绕 发表于 2023-3-14 16:33
按照下面这个图勾选上就可以了,勾选之后没用到的函数不会编译进hex文件就不会报错

感谢回复
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表