Keil 链接器指令(Linker Directive)之REMOVEUNUSED

在Keil中进行代码开发时,经常会遇到这样的情况:程序源代码中,有一些函数在应用工程中是调用不到的,这时Keil在编译链接生成代码时,就会弹出警告,举例如下:

*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_ADC_GET10BITRESULT?ADC_STC51_HAL
......
Program Size: data=237.5 xdata=2862 code=50260

这表示,生成的程序代码中,存在没有调用的代码段(uncalled segment)。如果要避免这种浪费问题,就需要对Keil开发环境添加一些自定义设置。

首先,在Project窗口,右键“”Option for Target...“”,在打开的对话框中,选择"Device"选项栏,在右边勾选使用LX51链接器来代替BL51,具体如下图所示:


然后同样在该窗口的“LX51 Misc”选项栏的Misc controls中填入命令:"REMOVEUNUSED",具体如下图所示:

之后点击OK按钮,保存设置选项,再生成可执行代码,Keil就不会再弹出这类警告了,并且生成的代码量和之前有明显差别:

Program Size: data=84.4 xdata=2862 const=12970 code=33381
之前的代码段大小是:50260bytes,现在的代码段大小是:12970+33381=46351bytes,减少了约4Kbytes的代码量。之前的数据量:data = 237.5bytes,现在的数据量:84.4bytes,减少了约150bytes的数据量。所以这样做确实可以去掉应用工程中调用不到的代码,精简体积。

接下来具体研究下链接器命令“”REMOVEUNUSED“”,通过查询Keil->uVision Help手册,在主题为"REMOVEUNUSED"的文章中,有其详细介绍:

The REMOVEUNUSED directive removes unused program and data segments provided that Data Overlaying is enabled. When you apply this directive unused functions along with the related data segments are deleted in the final executable program.(该指令用于在生成可执行代码时,移除没有使用到的程序和数据段,并使能数据覆盖功能)

使用方式:无参数,直接输入;输入位置:Options — LX51 Misc — Misc Controls.

综上所述,总结归纳如下:

1、在Keil代码中,未调用到的函数和变量默认会添加到生成的可执行程序,这样导致程序更大,并且对MCU的存储空间大小要求更高;

2、在Keil中,设定使用LX51链接器,并使用指令"REMOVEUNUSED",可以在生成可执行代码时,移除没有用到的代码和数据,有效地缩减了生成代码的大小;

3、使用该指令,会使能数据覆盖(Data Overlaying)功能【待研究】


官方链接:http://www.keil.com/support/man/docs/lx51/lx51_removeunused.htm




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值