Keil C51中的优化级别及优化作用

发布者:幸福花开最新更新时间:2015-10-14 来源: eefocus关键字:Keil  C51  优化级别  优化作用 手机看文章 扫描二维码
随时随地手机看文章
级别 说明

   常数合并:编译器预先计算结果,尽可能用常数代替表达式。包括运行地址计算。
     优化简单访问:编译器优化访问8051系统的内部数据和位地址。
     跳转优化:编译器总是扩展跳转到最终目标,多级跳转指令被删除。


   死代码删除:没用的代码段被删除。
     拒绝跳转:严密的检查条件跳转,以确定是否可以倒置测试逻辑来改进或删除。


   数据覆盖:适合静态覆盖的数据和位段被确定,并内部标识。BL51连接/定位器可以通

     过全局数据流分  ,选择可被覆盖的段。


   窥孔优化:清除多余的MOV指令。这包括不必要的从存储区加载和常数加载操作。当存 

     储空间或执行时间可节省时,用简单操作代替复杂操作。


   寄存器变量:如有可能,自动变量和函数参数分配到寄存器上。为这些变量保留的存 储区就省略了。
     优化扩展访问:IDATA、XDATA、PDATA和CODE的变量直接包含在操作中。在多数时间没

     必要使用中间寄存器。
     局部公共子表达式删除:如果用一个表达式重复进行相同的计算,则保存第一次计算

     结果,后面有可能就用这结果。多余的计算就被删除。
     Case/Switch优化:包含SWITCH和CASE的代码优化为跳转表或跳转队列。


   全局公共子表达式删除:一个函数内相同的子表达式有可能就只计算一次。中间结果

     保存在寄存器中,在一个新的计算中使用。
     简单循环优化:用一个常数填充存储区的循环程序被修改和优化。


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


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

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

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

关键字:Keil  C51  优化级别  优化作用 引用地址:Keil C51中的优化级别及优化作用

上一篇:虚拟串口以及在Proteus中的使用
下一篇:51单片机与GPS串口通信

推荐阅读最新更新时间:2024-03-16 14:35

单片机c语言教程:C51运算符和表达式(指针和地址运算符)
我们学习数据类型时,学习过指针类型,知道它是一种存放指向另一个数据的地址的变量类型。指针是单片机C语言中一个十分重要的概念,也是学习单片机C语言中的一个难点。对于指针将会在第九课中做详细的讲解。在这里我们先来了解一下单片机C语言中供给的两个专门用于指针和地址的运算符: * 取内容 & 取地址取内容和地址的一般形式分别为: 变量 = * 指针变量 指针变量 = & 目标变量 取内容运算是将指针变量所指向的目标变量的值赋给左边的变量;取地址运算是将目标变量的地址赋给左边的变量。要注意的是:指针变量中只能存放地址(也就是指针型数据), 一般情况下不要将非指针类型的数据赋值给一个指针变量。 下面来看一个例子,并用一个图表和实
[单片机]
单片机c语言教程:<font color='red'>C51</font>运算符和表达式(指针和地址运算符)
编写一个简单的C51程序
简 介: 对于嵌入式系统,如果没有运行RTOS,那么程序开发中的 主函数(main())需要通过某种机制使其永远愉快的运行下去,它没有终点。如果想从main函数中退出,具体干什么是由所使用的C语言编译器决定的。 01 问题提出 今天在CSDN的 单片机led模块定义函数的问题 中看到一个有趣的问题。提问者在进行基本的C51编程实验,编写了一个简单的C51程序如下: #includevoidtest(num){switch(num){case1:P2_0=0;P2_1=0;break; } }voidmain(void){ test(1); } 程序执行完之后,可以看到实验板上的有两个LED被点亮,另外六个居然微微发亮。 如
[单片机]
编写一个简单的<font color='red'>C51</font>程序
Keil软件仿真的串口调试技巧
引言   在单片机系统中,串口(UART,通用异步收发接口)是一个非常重要的组成部分。通常使用单片机串口通过RS232/RS485电平转换芯片与上位机连接,以进行上位机与下位机的数据交换、参数设置、组成网络以及各种外部设备的连接等。RS232/RS485串行接口总线具有成本低、简单可靠、容易使用等特点,加上其历史悠久,所以目前应用仍然非常广泛;特别对于数据量不是很大的场合,串口通信仍然是很好的选择,有着广阔的使用前景。   在单片机编程中,串口占了很重要的地位。传统方式串口程序的调试,往往是利用专用的单片机硬件仿真器。在编写好程序后,利用仿真器来设置断点,观察变量和程序的流程,逐步对程序进行调试,修正错误。使用硬件仿真器的确是
[单片机]
<font color='red'>Keil</font>软件仿真的串口调试技巧
Keil MDK中使用pc-lint的详细方法
keil MDK版本:V4.03 PC-lint版本: V8.0 关于pc-lint的强大作用,网上有很多,这里不想再复述,只说一句:能通过pc-lint检验的程序不一定没有问题,但通过了pc-lint检验的程序,质量的提高也是不言而喻的。 首先安装keil MDK和PC-lint这两个软件,网上的PC-lint大多是安装好的压缩包,直接解压到C盘即可。请支持正版!!(咳,心虚中...) 方法十分简单,因为keil MDK中已经给出了pc-lint对应keil ARM编译器的配置文件:CO-KCARM.LNT。 首先打开mdk,选择Tools – Setup PC Lint,弹出如图1所示的PC-lint配置界面。
[单片机]
<font color='red'>Keil</font> MDK中使用pc-lint的详细方法
c51 1ms-6MHZ延时程序
#include reg52.h void delay(unsigned char n) //约n(ms)延时 { unsigned char i,j,k; for(k=0;k n;k++) { for(j=0;j 5;j++) // 约1ms延时 { for(i=0;i 31;i++) //约0.1ms延时 {;} } } } main() { while(1) { delay(15); } } /*约15ms延时 ,需较准确延时: 1、在 keil uvision3\project\options for target\target\
[单片机]
c51: 用定时器T0 ,P0输出1s 方波,中断
/* T0工作方式2,自动重载8位定时器。 设 频率:f, 定时器初值 val ,定时时间 T。 关系式 T=(2^8-val)*12/f */ //任务:f=12MHZ ,T0工作方式2,定时250us,中断2000次,P0口翻转,使P0口输出1s 的方波。 #include reg52.h #define uint unsigned int //定义全局变量 uint counter; init_T0() { TMOD=0x02; //定时器工作方式 TL0=0x06; //时间常数 TH0=0x06; IE=0x82; //开中断 TR0=1; //T
[单片机]
C51编程中几个重要模块
说明 本文档包括单片机系统中常用到的时钟中断、通讯及键盘扫描等模块(见所附源程序)的说明。这些模块使用前后台系统模型。为达到最大的灵活性, 需要在用户工程中定义config.h文件, 在其中定义各模块可选参数的设置,而不是直接更改源代码。 这些可选内容大部分为宏定义,如果不定义宏相应的功能在编译时被屏蔽,不会增加代码长度。 具体可选内容见各模块中的说明。 在Config.h文件中还要包含一个单片机硬件的资源头文件。 各模块使用了定义在Common.h中的一些数据类型。如:BIT(bit) BYTE(unsigned char)等,具体请参见源程序。 时钟模块 在单片机软件设计中, 时钟是重要资源, 为了充分利用时钟资源
[单片机]
Keil C51单片机开发心得简介
用Keil写C51程序是最好不过的了。用伟福也可以写,但伟福的编辑能力就相差太远了。个人喜欢用Keil写代码,然后用伟福硬件仿真(只有WAVE的仿真头)。不过Keil是好用,但写代码关键还是C51水平,也就是编程能力,写C程序就离不开模块化这个词了。C51和A51,要扬长避短,发挥C的长处,就得将C模块化好。刚刚开始的时候就只是熟悉C51的语法规则了,熟悉了这个然后再追求程序的可读性和可移植性。 下面是使用Keil C51的一点心得: 1、程序可读性的提高 要提高程序的可读性,就得养成一良好的编程习惯了,例如变量用小写,常量用大写,函数第一个字母用大写等等。这样成习惯以后,自己看代码就会一目了然。另外还要灵活的在KEIL中使用
[单片机]
<font color='red'>Keil</font> <font color='red'>C51</font>单片机开发心得简介
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved