1 引言
電腦技術和資訊技術的高速發展的今天,電腦和電腦技術大量應用在人們的日常生活中,嵌入式電腦也得到了廣泛的應用。 嵌入式電腦是指完成一種或多種特定功能的電腦系統,是軟硬體的緊密結合體。具有軟體代碼小、高度自動化、響應速度快等特點。 特別適合於要求即時和多任務的應用體系。嵌入式即時系統是目前蓬勃發展的行業之一。 但是,即時嵌入式系統的特點使得其軟體受時間和空間的嚴格限制,加上運行環境複雜,使得嵌入式系統軟體的開發變得異常困難。 為了設計一個滿足功能、效能和死線要求的系統,為了開發出安全可靠的高效能嵌入式系統,開發語言的選擇十分重要。
2 嵌入式即時程式設計中語言的選擇
隨著嵌入式系統應用範圍的不斷擴大和嵌入式即時作業系統RTOS(Real Time Operating System)的廣泛使用,進階語言編程已是嵌入式系統設計的必然趨勢。因為組合語言和具體的微處理器的硬體結構密切相關,移植性較差,既不宜在複雜系統中使用,又不便於實現軟體重用;而進階語言具有良好的通用性和豐富的軟體支援,便於推廣、易於維護,因此進階語言編程具有許多優勢。目前,在嵌入式系統開發過程中使用的語言種類很多,但僅有少數幾種語言得到了比較廣泛的應用。其中C和C++是應用最廣泛的。C++在支援現代軟體工程、 OOP(Object Oriented Programming,物件導向的程式設計)、結構化等方面對C進行了卓有成效的改進,但在程式碼容量、執行速度、程式複雜程度等方面比C語言程式效能差一些。由於C語言既有低級語言的直接控制硬體的能力,又有進階語言的靈活性,是目前在嵌入式系統中應用最廣泛的程式設計語言。隨著網路技術和嵌入式技術的不斷髮展,Java的應用也得到廣泛應用。
3 C/C++代碼在即時程式設計中的最佳化
雖然使軟體正確是一個工程合乎邏輯的最後一個步驟,但是在嵌入式的系統開發中,情況並不總是這樣的。出於對低價產品的需求, 硬體的設計者需要提供剛好足夠的儲存空間和完成工作的處理能力。所以在嵌入式軟體設計的最後一個階段則變成了對代碼的最佳化。
現代的C和C++編譯器都提供了一定程度上的代碼最佳化。然而,大部分由編譯器執行的最佳化僅涉及執行速度和代碼大小的一個平衡。你的程式能夠變得更快或者更小,但是不可能又變快又變小。經過本人在嵌入式系統設計和實現過程中實踐,下面介紹幾種簡單且行之有效C/C++代碼的最佳化方法。
(1) Inline函數
在C++中,關鍵字Inline可以被加入到任何函數的聲明中。這個關鍵字請求編譯器用函數內部的代碼替換所有對於指出的函數的調用。這樣做在兩個方面快於函數調用。這樣做在兩個方面快於函數調用:第一,省去了調用指令需要的執行時間;第二,省去了傳遞變元和傳遞過程需要的時間。但是使用這種方法在最佳化程式速度的同時,程式長度變大了,因此需要更多的ROM。使用這種最佳化在Inline函數頻繁調用並且只包含幾行代碼的時候是最有效。
(2)用指標代替數組
在許多種情況下,可以用指標運算代替數組索引,這樣做常常能產生又快又短的代碼。與數組索引相比,指標一般能使代碼速度更快,佔用空間更少。使用多維陣列時差異更明顯。下面的代碼作用是相同的,但是效率不一樣。
數組索引 指標運算
For(;;){ p=array
A=array[t++]; for(;;){
a=*(p++);
...... ......
} }
指標方法的優點是,array的地址每次裝入地址p後,在每次迴圈中只需對p增量操作。在數組索引方法中,每次迴圈中都必須進行基於t值求數組下標的複雜運算。
(3)不定義不使用的傳回值
function函數定義並不知道函數傳回值是否被使用,假如傳回值從來不會被用到,應該使用void來明確聲明函數不返回任何值。