keil优化等级设置
附表:Keil C51中的优化级别及优化作用 级别说明
0 常数合并:编译器预先计算结果,尽可能用常数代替表达式。包括运行地址计算。
优化简单访问:编译器优化访问8051系统的内部数据和位地址。
跳转优化:编译器总是扩展跳转到最终目标,多级跳转指令被删除。
1 死代码删除:没用的代码段被删除。
拒绝跳转:严密的检查条件跳转,以确定是否可以倒置测试逻辑来改进或删除。
2 数据覆盖:适合静态覆盖的数据和位段被确定,并内部标识。BL51连接/定位器可以通过全局数据流分析,选择可被覆盖的段。
3 窥孔优化:清除多余的MOV指令。这包括不必要的从存储区加载和常数加载操作。当存储空间或执行时间可节省时,用简单操作代替复杂操作。
4 寄存器变量:如有可能,自动变量和函数参数分配到寄存器上。为这些变量保留的存储区就省略了。
优化扩展访问:IDATA、XDATA、PDATA和CODE的变量直接包含在操作中。在多数时间没必要使用中间寄存器。
局部公共子表达式删除:如果用一个表达式重复进行相同的计算,则保存第一次计算结果,后面有可能就用这结果。多余的计算就被删除。
Case/Switch优化:包含SWITCH和CASE的代码优化为跳转表或跳转队列。
5 全局公共子表达式删除:一个函数内相同的子表达式有可能就只计算一次。中间结果保存在寄存器中,在一个新的计算中使用。
简单循环优化:用一个常数填充存储区的循环程序被修改和优化。
6 循环优化:如果结果程序代码更快和有效则程序对循环进行优化。
7 扩展索引访问优化:适当时对寄存器变量用DPTR。对指针和数组访问进行执行速度和代码大小优化。
8 公共尾部合并:当一个函数有多个调用,一些设置代码可以复用,因此减少程序大小。
9 公共块子程序:检测循环指令序列,并转换成子程序。Cx51甚至重排代码以得到更大的循环序列。
优化级别说明(仅供参考):其中的 Code Optimization 栏就是用来设置C51的优化级别。共有9个优化级别(书上这么写的),高优化级别中包含了前面所有的优化级别。现将各个级别说明如下:
0级优化:
1、 常数折叠:只要有可能,编译器就执行将表达式化为常数数字的计算,其中包括运行地址的计算。
2、 简单访问优化:对8051系统的内部数据和位地址进行访问优化。
3、 跳转优化:编译器总是将跳转延至最终目标上,因此跳转到跳转之间的命令被删除。
1级优化:
1、 死码消除:无用的代码段被消除。
2、 跳转否决:根据一个测试回溯,条件跳转被仔细检查,以决定是否能够简化或删除。
2级优化:
1、 数据覆盖:适于静态覆盖的数据和位段被鉴别并标记出来。连接定位器BL51通过对全局数据流的分析,选择可静态覆盖的段。
3级优化:
1、“窥孔”优化:将冗余的MOV命令去掉,包括不必要的从存储器装入对象及装入常数的操作。另外如果能节省存储空间或者程序执行时间,复杂操作将由简单操作所代替。
4级优化:
1、 寄存器变量:使自动变量和函数参数尽可能位于工作寄存器中,只要有可能,将不为这些变量保留数据存储器空间。
2、扩展访问优化:来自IDATA、XDATA、PDATA和CODE区域的变量直接包含在操作之中,因此大多数时候没有必要将其装入中间寄存器。
3、局部公共子式消除:如果表达式中有一个重复执行的计算,第一次计算的结果被保存,只要有可能,将被用作后续的计算,因此可从代码中消除繁杂的计算。
4、 CASE/SWITCH语句优化:将CASE/SWITCH语句作为跳转表或跳转串优化。
5级优化:
1、 全局公共子式消除:只要有可能,函数内部相同的子表达式只计算一次。中间结果存入一个寄存器以代替新的计算。
2、 简单循环优化:以常量占据一段内存的循环再运行时被优化。
6级优化:
1、 回路循环:如果程序代码能更快更有效地执行,程序回路将进行循环。
7级优化:
1、 扩展入口优化:在适合时对寄存器变量使用DPTR数据指针,指针和数组访问被优化以减小程序代码和提高执行速度。
8级优化:
1、 公共尾部合并:对同一个函数有多处调用时,一些设置代码可被重复使用,从而减小程序代码长度。
9级优化:
1、 公共子程序块:检测重复使用的指令序列,并将它们转换为子程序。C51甚至会重新安排代码以获得更多的重复使用指令序列。当然,优化级别并非越高越好,应该根据具体要求适当选择。
keil优化等级设置的更多相关文章
- 痞子衡嵌入式:MCUXpresso IDE下设置代码编译优化等级的几种方法
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是MCUXpresso IDE下设置代码编译优化等级的几种方法. 最近公司芯片设计团队正在开发一款全新的基于 Cortex-M33 内核的 ...
- keil优化论
谈到优化,其实很多人都哭笑不得,因为在一个C51软件工程师的生涯中,总要被KEIL的优化耍那么一次到几次.我被耍过,想必看着文章的你也被耍过,如果你回答说不,那只能说你写的C51程序不多! 看看KEI ...
- Keil C51 详细设置
一.target名更改 打开Keil后,左侧Project Workspace中的target可改,方法:右击Target——Manage Compnents——双击待修改项即可,若要添加,使用对话框 ...
- mysql笔记05 优化服务器设置
优化服务器设置 1. MySQL有大量可以修改的参数--但不应该随便去修改.通常只需要把基本的项配置正确(大部分情况下只有很少一些参数时真正重要的),应将更多时间花在schema的优化.索引,以及查询 ...
- loadrunner 脚本优化-检查点设置
脚本优化-检查点设置 by:授客 QQ:1033553122 VuGen判断脚本是否执行成功是根据服务器返回的状态来确定的,如果服务器返回的是HTTP状态为200 OK,那么VuGen就认为脚本正确地 ...
- loadrunner 脚本优化-关联设置
脚本优化-关联设置 by:授客 QQ:1033553122 关联的原理 关联也属于一钟特殊的参数化.一般参数化的参数来源于一个文件.一个定义的table.通过sql写的一个结果集等,但关联所获得的参数 ...
- CC2541工程优化等级的问题
1. 调试工程的时候发现,优化等级稍微调高一级,就容易出问题,只能用None,其他等级会出现数据丢失的现象.
- Keil MDK 无法设置断点【worldsing】
要解决一个问题就怕不知道怎么搜索,或是别人没有遇到过: 同样碰到Keil MDK Debug调试无法设置断点问题,首先来问百度,GOOGLE,一下是我搜索到的结果: 1.keil 不能设置断点,每 ...
- C51 Keil 优化
对程序进行优化,通常是指优化程序代码或程序执行速度.优化代码和优化速度实际上是一个予盾的统一,一般是优化了代码的尺寸,就会带来执行时间的增加,如果优化了程序的执行速度,通常会带来代码增加的副作用,很难 ...
随机推荐
- [连载]JavaScript讲义(03)--- JavaScript面向对象编程
- Unix文件操作
一.概述 Unix文件操作常用函数包括open.close.creat.lseek.dup.dup2.fcntl等, 其中open.creat. fcntl函数需要包含头文件<fcntl.h&g ...
- Android开发艺术探索》读书笔记 (12) 第12章 Bitmap的加载和Cache
第12章 Bitmap的加载和Cache 12.1 Bitmap的高速加载 (1)Bitmap是如何加载的?BitmapFactory类提供了四类方法:decodeFile.decodeResourc ...
- JNI与多线程
在android开发过程中,由于主线程要聚焦于UI交互,为了软件运行流畅必然要用到很多多线程技术.而在JNI机制中专门提供了一些避免线程冲突的函数.了解.学习并掌握如何避免线程冲突问题是一个程序猿的必 ...
- MWEB+七牛 上传图片
MWEB+七牛 上传图片 博客之前的图片也都用的七牛,但编辑和上传分离还是很麻烦,所以一直很心水meb, 上周mweb降到¥50,感觉短期内应该不会再降了,于是果断入手,今天在和使用图床功能遇到了一些 ...
- codevs 2612 最有分解方案 (贪心)
/* 数字不重复 将一个正整数分解成若干的整数的和 数字不重复 且数字不相同 保证不重复的话 贪心策略是从2开始分 然后把最后剩下的数均匀分到后面 证明嘛 这里写的可能不是很严谨 对于一个n 如果我们 ...
- visual studio中的一些实用的快捷键
重置开发环境:使得开发工具恢复默认状态 方法:工具->导入和导出设置导向->重置所有设置->不保存 显示行号: 方法:工具->选项->所有语言->行号 在编程过程中 ...
- eclipse[日文版] 的SVN 上传步骤
可能有些朋友在日企上班,肯定要用到SVN,可是一般就下载和更新,没有用到上传 这里来介绍下上传 1.项目右键 2.点击Share Project 3.点击SVN下一步 4.选择你的上传的服务器地址 5 ...
- 正则表达式匹配(python)
获取图片的python代码 #coding=utf-8 import urllib import re def getHtml(url): page = urllib.urlopen(url) htm ...
- 注册表修改IP地址和DNS等信息
---------------------win8系统 1. 2. 3. --------------------------------------------------------------- ...