[摘要]嵌入式系统中的程序往往是运行在有限的硬件资源环境中,而且大多具有实时性的要求,因此要对程序进行优化,尽量提高程序的执行效率,减少程序的存储空间。讨论对嵌入式系统中的程序进行优化的方法和策略。
[关键词]嵌入式系统 优化 程序代码 面向对象
中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)0220063-01
一、引言
嵌入式系统是一个专用计算机系统,完全封装在其所控制的设备内。与通用计算机不同,嵌入式系统执行非常明确的预定义任务。而且,嵌入式系统的外形尺寸、功耗、外部适配器等各种特征必须满足应用的要求和限制;另外,一些嵌入式系统还具有实时性的要求。为了满足嵌入式系统的实时性和有限存储空间的要求,嵌入式程序要尽量提高运行速度,减少存储空间。因此,在嵌入式系统设计中要进行程序的优化以提高系统的性能,缩减产品的尺寸和成本。
对嵌入式程序进行优化主要从两个方面入手:1.设计优化;2.代码优化。
二、设计优化
(一)面向对象程序设计技术
现代的程序设计普遍采用面向对象的设计方法。面向对象程序设计于20世纪60年代提出,以后逐渐发展和完善,出现了java、C++等面向对象的程序设计语言。面向对象程序设计的出现是计算机编程技术的重大进步。它以对象为中心观察、描述和处理问题,按照对象及对象之间的联系来构造软件实体。
面向对象是一种自下而上的程序设计方法,它以数据为中心,类作为表现数据的工具,是划分程序的基本单位。面向对象程序设计的基本方法就是把数据和对数据的处理函数封装在一起,形成一个相对独立的类模块,类实现了数据与函数功能的有机结合。
(二)面向对象设计的优化
类是面型对象程序设计的基础,通过类继承可以最大限度地实现功能代码的重用,减少程序的存储空间。
调整继承关系是优化设计的一个重要方面,继承关系能够为一个类族定义一个协议,并能在类之间实现代码共享以减少冗余。在面向对象设计中,建立良好的继承关系对优化结构是非常重要的。
在设计类继承时,使用自顶向下和自底向上相结合的方法。先创建一些功能类型,然后进行归纳。如果在一组相似的类中存在公共的属性和公共的行为,则可以把这些公共的属性和行为抽取出来重新定义一个类作为基类。
三、代码优化
代码优化,就是采用更精简的程序代码来代替原有的代码,使编译后的程序运行效率更高。以下是一些常用的优化技术和技巧。
(一)尽量定义轻量级的构造方法
在进行类的设计时,要尽量设计轻量级的构造方法。在程序运行过程中,除了创建显示定义的对象外,还要创建很多临时的对象,在创建类型的每个对象时都要调用类型的构造方法。如果构造方法过于复杂,就会降低程序运行的效率。
(二)尽量定义局部变量,减少类成员变量的个数
少用全局变量,多用局部变量。全局变量是放在数据存储器中的,太多的全局变量,会导致编译器无足够的内存分配;而局部变量则大多定位于内部的寄存器中。使用寄存器的操作速度比数据存储器快,指令也更灵活,有利于生成质量更高的代码。
(三)代码替换
使用周期短的指令代替周期长的指令,以降低运算的强度。
1.减少除法运算。用关系运算符两边乘除数避免除法操作,还有一些除法和取模的运算可以用位操作来代替。因为位操作指令只需一个指令周期,而“/”运算则需要调用子程序,代码长,执行慢。例如:
优化前if((a/b)>c)和a=a/4
优化后if(a>(b*c))和a=a>>2
2.减少乘方运算。例如:
优化前a=pow(a,3.0)
优化后a=a*a*a
3.使用自加、自减指令。例如:
优化前a=a+1、a=a-l
优化后a++、a--
对除法来说,使用无符号数比有符号数会有更高的效率。在实际调用中,尽量减少数据类型的强制转换;少用浮点运算,如果运算的结果能够控制在误差之内,则可用长整型代替浮点型。
(四)switch语句和循环语句的优化
编程时,对case值按照可能性排序,将最可能发生的情况放在第一个,最不可能的情况放在最后一个,可以提高switch语句块的执行速度。
循环体是程序优化的一个重要环节,对于一些不需要循环变量参加运算的模块,可以把它放到循环的外面。对于次数固定的循环体,for循环比while循环效率更高,减计数循环比增计数循环速度快。
(五)查表代替计算
在程序中尽量不进行非常复杂的运算,如浮点数的开方。对于这些消耗时间和资源的运算,可以采用空间换取时间的方法。预先将函数值计算出来,置于程序存储区中,以后程序运行时直接查表即可,减小了程序执行过程中重复计算的工作量。
四、结论
嵌入式系统中的程序往往需要满足实时性的要求,而且受到存储空间的限制,因此对嵌入式系统中的程序需要进行反复的优化。进行程序的优化可以从设计和编码两个方面入手。在设计阶段,采用面向对象的设计方法,对类型反复地进行归纳,尽量提高继承程度。和在编码阶段,要在数据定义、功能代码的编写等多个方面进行优化,提高代码的执行效率。
参考文献:
[1]王军安,浅析嵌入式系统软件优化设计[J].计算机工程与应用,2004.
[2]覃征,王志敏等,程序设计方法与优化[M].西安交通大学出版社,2004.
[3]许汝峰译,32位嵌入式系统编程[M].中国电力出版社,2002.
[4]张义青、李华贵,嵌入式程序设计中C/C++代码的优化[J].微计算机信息,2003.
[5]江开耀、张俊栏等,软件工程[M].西安电子科技大学出版社,2004.
作者简介:
王月青,河北清河人,邢台职业技术学院信息工程系讲师,工学硕士,从事信息技术的教学和研究。