清风皓月抚心绕 发表于 2023-3-14 16:33 感谢回复 |
暖西夏 发表于 2023-3-14 15:53 感谢回复,另外我想知道要是用#if...#endof的话,应该用什么条件判断是否使用函数呢 |
lkc8210 发表于 2023-3-14 17:58 感谢回复,我搜了一下确实很符合我的需求 |
地板和5楼的适用于Keil MDK Keil C51有另一种方法 ![]() ![]() REMOVEUNUSED |
进入options中的User 将one ELF section per勾选即可;它的作用是将主函数没用到的函数不进行编译 |
可以设置的,但是C51我不建议这么做,没调用的会分配内存的,51芯片内存本来就吃紧,不要浪费了。 |
借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 |