[摘要]嵌入式系統中的程序往往是運行在有限的硬件資源環境中,而且大多具有實時性的要求,因此要對程序進行優化,盡量提高程序的執行效率,減少程序的存儲空間。討論對嵌入式系統中的程序進行優化的方法和策略。
[關鍵詞]嵌入式系統 優化 程序代碼 面向對象
中圖分類號: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.
作者簡介:
王月青,河北清河人,邢臺職業技術學院信息工程系講師,工學碩士,從事信息技術的教學和研究。