预览加载中,请您耐心等待几秒...
1/6
2/6
3/6
4/6
5/6
6/6

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

作者:来源于:发布时间:2007-3-2813:52:00C51优化的C语言交叉编译器KeilC51交叉编译器是一个基于ANSIC标准的针对8051系列MCU的C编译器,生成的可执行代码快速、紧凑,在运行效率和速度上可以和汇编程序得到的代码相媲美。 n和汇编语言相比,用C语言这样的高级语言有很多优势,比如: n对处理器的指令集不必了解,8051CPU的基本结构可以了解,但不是必须的。 n寄存器的分配以及各种变量和数据的寻址都由编译器完成。 n程序拥有了正式的结构(由C语言带来的),并且能被分成多个单独的子函数。这使整个应用系统的结构变得清晰,同时让源代码变得可重复使用。 n选择特定的操作符来操作变量的能力提高了源代码的可读性。 n可以运用和人的思维很接近的词汇和算法表达式。 n编写程序和调试程序的时间得到很大程度的缩短。 nC运行连接库包含一些标准的子程序,如:格式化输出,数字转换,浮点运算。 n由于程序的模块结构技术,使得现有的程序段可以很容易的包含到新的程序中去。 nANSI标准的C语言是一种丰常方便的,获得广泛应用的,在绝大部分系统中都能够很容易得到的语言。 因此,如果需要,现有的程序可以很快地移植到其他的处理器上,节省投资。 和汇编语言的接口你可以很容易在C程序中调用汇编程序,反之依然。函数参数通过CPU寄存器传递,或使用NOREGPARMS参数指示编译器通过固定的存储器传递。从函数返回的值总是通过CPU寄存器传递。除了直接产生目标代码外,你还可以用SRC编译参数指示编译器产生汇编源代码文件(供A51汇编器使用)。例如下面的C语言源代码: unsignedintasmfunc1(unsignedintarg) { return(1+arg); } 用SRC指示C51编译器编译时产生以下汇编文件: ?PR?_asmfunc1?ASM1SEGMENTCODE PUBLICasmfunc1 RSEG?PR?_asmfunc1?ASM1 USING0 asmfunc1: ;----Variable'arg?00'assignedtoRegister'R6/R7'---- MOVA,R7;loadLSBoftheint ADDA,#01H;add1 MOVR7,A;putitbackintoR7 CLRA ADDCA,R6;addcarry&R6 MOVR6,A ?C0001: RET;returnresultinR6/R7 你可以用#pragmaasm和#pragmaendasm预处理指示器来在你的C语言程序中插入汇编指令。 和PL/M-51的接口Intel的PL/M-51是一种流行的编程语言,在很多方面和C语言类似。你很容易就可以将C程序和PL/M-51程序联接起来。 在你用alien声明PL/M-51函数后,你就可以从C语言中调用它们。所有在PL/M-51模块中定义的全局变量都可以在C语言程序中使用。例如: externaliencharplm_func(int,char); PL/M-51编译器和KeilSoftware工具都产生OMF51格式的目标文件。连接程序使用OMF51文件来处理外部字符变量,而不管它们在什么地方声明和使用。 代码优化C51是一个杰出的优化编译器,它通过很多步骤以确保产生的代码是最有效率的(最小和/或最快)。编译器通过分析初步的代码产生最终的最有效率的代码序列,以此来保证你的C语言程序占用最少空间的同时运行的快而有效。 C51编译器提供9个优化级别。每个高一级的优化级别都包括比它低的所有优化级别的优化内容。以下列出的是目前C51编译器提供的所有优化级别的内容: n常量折叠:在表达式及寻址过程中出现的常量被综合为一个单个的常量。 n跳转优化:采用反转跳转或直接指向最终目的的跳转,从而提升了程序的效率。 n哑码消除:永远不可能执行到的代码将自动从程序中剔除。 n寄存器变量:只要可能,局部变量和函数参数被放在CPU寄存器中,不需要为这些变量再分配存储器空间。 n通过寄存器传递参数:最多三个参数通过寄存器传递。 n消除全局公用的子表达式:只要可能,程序中多次出现的相同的子表达式或地址计算表达式将只计算一次。 n合并相同代码:利用跳转指令,相同的代码块被合并。 n重复使用入口代码:需要多次使用的共同代码被移到子程序的前面以缩减代码长度。 n公共块子程序:需要重复使用的多条指令被提取组成子程序。指令被重新安排以最大化一个共用子程序的长度。 对8051的特殊优化n窥孔优化:当能够缩小代码空间或执行时间时,复杂的操作被简单的操作代替。 n访问优化:常量和变量被计算后直接包含在操作中。 n扩展访问优化:用DPTR做存储器指针来增加代码的密度。 n数据覆盖:一个函数的数据和位变量空间是可覆盖的