通过简单的设置Keil uVision2 可以将目标程序的大小进行最大限度的压缩,通常情况下可以把 目标文件例如 bin文件压缩10K左右。

 

第1步 打开工程属性,鼠标右键点击Target1,选择 “Options for Target 'Target 1'”

 

第2步 选中C51选项卡

在Code Optimization组中,选择 Level,把级别选中9,第9级“Common Block Subroutines”

点击确定后,重新编译你的程序,你会发现程序的目标文件已经大大的减小。

 

下面给出几个实验数据供参考:

(1) 选择Level 0:Constant folding 时的编译结果

 

(2)选择Level 5:Common subexpression elimination时的编译结果

 

(3)选择Level 9 :Common Block Subroutines时的编译结果

 

从以上数据我们可以发现,不同的级别,Keil的优化方式是不一样的。

Progarm Size: data=62.1 xdata=901 code=26046
Progarm Size: data=57.1 xdata=780 code=16352
Progarm Size: data=57.1 xdata=780 code=12997

 

随着优化级别的深入,Keil的编译速度也会变的越来越慢。如果某些时候你的程序太大无法下载进入单片机时,你不妨试试这个方法。

 

附表: Keil C51中的优化级别及优化作用

第0级

常数合并:编译器预先计算结果,尽可能用常数代替表达式。包括运行地址计算。
第1级

死代码删除:没用的代码段被删除。
第2级

数据覆盖:适合静态覆盖的数据和位段被确定,并内部标识。BL51连接/定位器可以通过全局数据流分析,选择可被覆盖的段。

第3级

窥孔优化:清除多余的MOV指令。这包括不必要的从存储区加载和常数加载操作。当存储空间或执行时间可节省时,用简单操作代替复杂操作。

第4级

寄存器变量:如有可能,自动变量和函数参数分配到寄存器上。为这些变量保留的存储区就省略了。
优化扩展访问:IDATA、XDATA、PDATA和CODE的变量直接包含在操作中。在多数时间没必要使用中间寄存器。
局部公共子表达式删除:如果用一个表达式重复进行相同的计算,则保存第一次计算结果,后面有可能就用这结果。多余的计算就被删除。
Case/Switch优化:包含SWITCH和CASE的代码优化为跳转表或跳转队列。

第5级

全局公共子表达式删除:一个函数内相同的子表达式有可能就只计算一次。中间结果保存在寄存器中,在一个新的计算中使用。

第6级

循环优化:如果结果程序代码更快和有效则程序对循环进行优化。

第7级

扩展索引访问优化:适当时对寄存器变量用DPTR。对指针和数组访问进行执行速度和代码大小优化。

第8级

公共尾部合并:当一个函数有多个调用,一些设置代码可以复用,因此减少程序大小。

第9级

公共块子程序:检测循环指令序列,并转换成子程序。Cx51甚至重排代码以得到更大的循环序列。

用微信扫描二维码

为博主 打个赏

金额随意 快来“打”我呀 要买枸杞当归补补~~

不过当你选择了相应的优化级别后,有可能会导致你的程序无法再单片机上准确运行。(因此要注意)

转自 :http://huobengle.iteye.com/blog/1386115

GitHub 加速计划 / vi / vision
15.85 K
6.89 K
下载
pytorch/vision: 一个基于 PyTorch 的计算机视觉库,提供了各种计算机视觉算法和工具,适合用于实现计算机视觉应用程序。
最近提交(Master分支:2 个月前 )
868a3b42 3 天前
e9a32135 12 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐