标题: 请问keil中源码中不想注销的函数,怎么在编译时不报错 [打印本页]

作者: 未来可期l    时间: 2023-3-14 14:21
标题: 请问keil中源码中不想注销的函数,怎么在编译时不报错

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

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



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


Snipaste_2023-03-14_14-07-30.png (76.83 KB, 下载次数: 47)

图1

图1

作者: 暖西夏    时间: 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
作者: coody_sz    时间: 2023-3-14 16:27
可以设置的,但是C51我不建议这么做,没调用的会分配内存的,51芯片内存本来就吃紧,不要浪费了。
作者: 清风皓月抚心绕    时间: 2023-3-14 16:33
按照下面这个图勾选上就可以了,勾选之后没用到的函数不会编译进hex文件就不会报错

20160912155348054.jpg (205.11 KB, 下载次数: 49)

20160912155348054.jpg

作者: 清风皓月抚心绕    时间: 2023-3-14 16:38
进入options中的User 将one ELF section per勾选即可;它的作用是将主函数没用到的函数不进行编译
作者: lkc8210    时间: 2023-3-14 17:58
地板和5楼的适用于Keil MDK
Keil C51有另一种方法




REMOVEUNUSED


作者: 未来可期l    时间: 2023-3-14 19:43
lkc8210 发表于 2023-3-14 17:58
地板和5楼的适用于Keil MDK
Keil C51有另一种方法


感谢回复,我搜了一下确实很符合我的需求
作者: 未来可期l    时间: 2023-3-14 19:45
暖西夏 发表于 2023-3-14 15:53
借CSDN上一位大哥的回复            
                                                
             ...

感谢回复,另外我想知道要是用#if...#endof的话,应该用什么条件判断是否使用函数呢
作者: 未来可期l    时间: 2023-3-14 19:45
清风皓月抚心绕 发表于 2023-3-14 16:33
按照下面这个图勾选上就可以了,勾选之后没用到的函数不会编译进hex文件就不会报错

感谢回复




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1