- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C高效程序设计的技巧
摘要:该文从基于8051核的MCU结构特征出发,结合C语言自身特点,给出若干高效C程序设计的技巧。实践证明,在C程序设计中依据8051的功能特性对源代码进行优化,能大幅度提高最终程序的执行效率。
关键词:MCU;结构特征;程序设计;技巧
中图分类号:TP393文献标识码:A文章编号:1009-3044(2009)32-8943-03
Efficient C Language Programming Skills
CHAI Shou-li1, GAO Liang2
(1.Shandong Yingcai University of Computer Science, Jinan 250104, China; 2.Anhui University of Computer Science, Hefei 230039, China)
Abstract: This paper from the 8051 core MCU based on structural features, combined features of C language itself is given a number of highly efficient C programming skills. Practice has proved that, in the C program design features based on 8051 to optimize the source code, can greatly improve the efficiency of the final implementation of the procedures.
Key words: MCU; structural features; programming; skills
C语言凭借自身的结构化设计思想和对底层的数据的强大处理能力逐渐成为嵌入式开发的主流语言。虽然目前大部分C集成开发工具都具有优化能力,而且优化的结果有时比使用汇编语言编写的程序效果还好,然而,这些优化工作大部分是针对程序和算法本身的优化,而针对MCU体系结构的进行的优化很少或者几乎没有,本文就是针对这个问题,给出几种解决方法。
1 巧妙地利用寄存器变量
使用寄存器变量可以提升程序运行的速度,节约程序运行的时间,因为CPU对寄存器的寻址时间是最短的,可以在一个机器周期内完成。
假设有语句for(i=0;i10;i++);对变量i的位置的不同申明将会得到不同的结果。
在keil c中作如下定义
unsigned char i;编译产生的汇编语言如下:
CLR A
MOV R7,A
LOOP: INC R7
CJNE R7,#0x0A,LOOP
unsigned char idata i;编译产生的汇编语言如下:
CLR A
MOV R0,#0x08
MOV @R0,A
LOOP: MOV RO,#0x08
INC @R0
MOV A,@RO
CJNE A,#0x0A,LOOP
unsigned char xdata i;编译产生的汇编语言如下:
CLR A
MOV DPTR,#0x0000
MOVX @DPTR,A
LOOP: MOV DPTR,#0x0000
MOVXA,@DPTR
INC A
MOVX @DPTR,A
MOVX A,@DPTR
CJNE A,#0x0A,LOOP
通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果。通过上述分析,可以看见,当编译器将变量i作为寄存器(R7)变量处理的时候,产生的目标代码最小,且可以在一个机器周期内寻址。程序员必须熟悉每个寄存器的一般用途和特殊用途,只有这样,才能在程序中做到正确、合理地使用它们。
但是,由于基于8051核的MCU资源有限,寄存器显得极其宝贵,所以,寄存器变量通常被定义为局部频繁使用的操作,如上例,在一个子函数中操作完了即可被销毁,或者系统频繁使用的全局变量,对其他情况要尽量避免使用。读者在使用的时候可以仔细查阅编译器说明手册。
2 利用移位实现快速乘除操作
大部分MCU都选配一个辅助处理器,该处理器主要完成对数据进行逻辑与、或、非、循环、移位等基本操作,人们将之称为布尔处理功能。巧妙的利用移位寄存器可以实现快速的乘除运算。设有如下代码:
unsigned char mul,div,x,y; //申明变量
mul =
文档评论(0)