薛亞 朱婭晶
摘要:在嵌入式系統(tǒng)的應用過程中,對于應用軟件有著非常高的要求。在對嵌入式系統(tǒng)進行C語言開發(fā)的過程中,務必要注意對程序代碼的優(yōu)化操作,通過該方法的應用能夠有效提升代碼的運行效率,促進代碼的執(zhí)行質量。雖然在一定程度上C編譯器能夠為代碼提供一定的優(yōu)化服務與幫助,但是從本質上來分析,C編譯器為其提供的優(yōu)化技術僅僅能做到速度和代碼量的平衡。而無法實現提高代碼運行效率以及促進代碼執(zhí)行質量。針對這一問題,有效的解決方法是:設計一個有效又快,且能夠實現代碼執(zhí)行速度和代碼量有效平衡的系統(tǒng)結構。研究將針對這一內容對其進行分析,并提出如何有效優(yōu)化C代碼的方法與措施。
關鍵詞:嵌入式系統(tǒng);C語言;代碼優(yōu)化;方法應用
中圖分類號:TP311 文獻標識碼:A
文章編號:1009-3044(2020)29-0227-02
1 引言
就當前情況而言,C語言已經成為嵌入式系統(tǒng)研究和開發(fā)的主要應用方法,且作為一種系統(tǒng)設計語言,C語言具備簡單、高效的特點,以及兼容多種高級語言的功能。其本身具備強大的可移植功能和應用特征。特別是在嵌入式系統(tǒng)的開發(fā)和應用中.能夠實現低成本、低消耗的產出,實現高質量、高效率的系統(tǒng)開發(fā)和應用。但是,在這一過程中需要探索的問題為:在這一背景下,基于C語言開發(fā)和設計的嵌入式系統(tǒng)在儲存容量以及計算能力等方面的效率較低,所以,研究將針對這一問題提出如何有效提升嵌入式C語言系統(tǒng)開發(fā)代碼的應用效果,實現對C語言代碼的優(yōu)化與完善。
2 C代碼優(yōu)化
目前的C語言編譯器能夠在設計和開發(fā)系統(tǒng)的過程中對相關代碼進行自動優(yōu)化,但是這一優(yōu)化模式是基于代碼的長度與執(zhí)行命令的速度基礎上實現的,且是為了平衡兩者之間的關系。如果在這一基礎上想要實現能方便、更搞笑的C語言代碼執(zhí)行效率,就需要對其進行深度優(yōu)化操作,且需要通過程序員對其進行人工優(yōu)化,這樣便可以有效提成C語言對嵌入式系統(tǒng)開發(fā)的應用質量和應用效率。
2.1 變量使用
在對嵌入式系統(tǒng)進行研究與設計的過程中,需要通過變量的使用對其進行有效的分析,以此實現對系統(tǒng)的完整架構,進而提升C代碼的優(yōu)化質量。在變量使用過程中,可以通過全局變量的方法對其進行應用,該方法的應用比向函數傳遞參數的效果更好,且能夠避免函數在被調用的過程中出現出棧和入棧的情況。但是,在應用全局變量的過程中同樣有“副作用”,比如,變量的次序會讓映像數據布局發(fā)生改變,而且在聲明變量的應用中,還需要通過嚴密的設計方法對其進行控制儲存器的有效分配與精確分布。在這一過程中,最高效的應用辦法為:在編程的過程中,需要將相同的變量融合在一起對其進行應用和定義操作。而且在變量聲明的過程中需要通過英文縮寫對其進行表示,這樣能夠大大降低內存的占有空間,且可以提升運行速度。另外,針對不同類型的數據,設備生成的代碼長度差異性加大,在這一過程中需要盡量選用長度較短的代碼。如,應用int相比long的速度更快。
2.2 數組使用
首先,需要對數組進行初始化操作,為了提升運行速度,可以在初始化的過程中預留數組范圍,這樣程序的運行效率會加倍提升。其次,可以尋找代替數組的方法,如,利用指針代替數組能夠有效解決這一問題。一般情況下,指針的位置就是數據的儲存位置,而數組是所有變量的綜合表現方式。在這一情況下,便可以通過指針的運行來反應數組的索引,進而實現目標代碼編輯的速度與質量不斷提升。相比數組索引,指針運算效率更快,占內存空間更小,而且應用多為數組的差異也會更顯著。在數組的使用過程中,任意一次的循環(huán)都需要對其進行下標“i”值的標記與計算,并且要在C語言編譯器中觀察其指令周期,一般情況下為一次循環(huán)占有四個指令周期。當指針“p”位于array數組位置的時候,任意一次循環(huán)僅需要對“p”進行增量的操作,而且在這一背景下一次循環(huán)只占有兩個指令周期。通過以上兩種方法的應用,相比較之前的運算效率與命令執(zhí)行能力,速度可提升一倍。
2.3 宏的使用
在應用C語言對嵌入式系統(tǒng)進行開發(fā)和設計的過程中,如果想要實現對代碼的完整優(yōu)化,就務必要應用宏對其進行支撐和幫助。這樣,能夠從根本上提升程序的運算效率,促進程序對命令的執(zhí)行速度。從本質上分析,宏并非一種函數表現形式,只是在應用過程中接近于函數模式。在對函數進行調用的過程中,需要通過系統(tǒng)棧對其進行儲存,而且CPU在函數調用的過程中還要做好對數據的恢復準備。在這一背景下,可以有效進行出棧和進棧的操作。由此可見,占用CPU實踐的除了代碼本身之外,對函數進行調用也需要占據一定的時間。但是,通過宏定義對其進行設計便可以規(guī)避這一問題。宏定義能夠提前做好代碼嵌入工作,且可以將之融人開發(fā)系統(tǒng)中,進而省略函數調用環(huán)節(jié),從占用CPU的時間轉變?yōu)榱苏加幂^小的儲存空間。該方法的應用還能夠擺脫參數壓棧、返回參數、C語言call調用以及執(zhí)行return的操作步驟。在提升程序運行速度與執(zhí)行效率的同時降低了操作的煩瑣性。
2.4 循環(huán)程序處理
在系統(tǒng)的多重循環(huán)過程中,需要程序員將最長的循環(huán)內容設置在系統(tǒng)的最內層,同時需要將最短的循環(huán)內容設置在系統(tǒng)的最外層。這樣,能夠有效提升CPU的運行效率,促進CPU的跨切循環(huán)次數。另外,如果在系統(tǒng)的循環(huán)過程中需要進行邏輯判斷,且循環(huán)的次數相對較大,就需要將循環(huán)判斷從系統(tǒng)內部嫁接到系統(tǒng)的外部。通過該方法的應用,能夠實現高效率且頻繁的操作,且可以打破原有模式下的流水線作業(yè)方式,進而使得編譯器在對代碼優(yōu)化的過程中能夠實現對整體代碼的高效處理。
2.5 優(yōu)化分支語言
從發(fā)生的頻率排序對其進行分析,在按照條件選擇執(zhí)行語句的時候,需要結合系統(tǒng)的順序對其進行比較,并且進行相應的匹配處理,以此實現滿足條件的語句執(zhí)行方法應用。同時,為了有效提升分支語句優(yōu)化的速度,還可以結合實際情況對其進行發(fā)生相對頻率的排序處理,在這一背景下需要將最有可能發(fā)生的放在最前端,然后將發(fā)生可能最小的放在最末端,這一方法的應用能夠有效提升程序的計算與執(zhí)行速度。在進行switch語言編譯的過程中,語言編譯器會自動生成if-else-if嵌套代碼,在此需要程序員對其進行順序性比較,然后再對其進行匹配處理,進而實現滿足條件的語句執(zhí)行跳轉。在switch語句中,case標號較多,在此需要程序員對其進行次數的控制,在這一過程中需要將發(fā)生頻率較高的往前設置,將發(fā)生頻率相抵較低的往后放置。抑或者可以將整個switch語句進行轉化,利用嵌套語句的模式將之應用起來,然后將發(fā)生頻率相對較高的編號放在外層,將發(fā)生頻率較低的標號放在內層。另外,如果在switch的任意一種模式中都有很多任務需要完成,便可以將switch語句進行指向函數指針的代替,以此提升任務完成的效率,降低任務完成的難度,并實現代碼替換的目的。
2.6 利用數字優(yōu)化程序
在對程序進行編寫的過程中,需要幾何相應的數學計算方法對其進行程序的運算與處理.并且需要在這一背景下對程序進行相應的檢測,以此實現程序對命令的執(zhí)行能力和執(zhí)行效率,提升程序的運行效率級別。這是程序設計與開發(fā)過程中的一個重要環(huán)節(jié),但是也是容易被人忽略的部分。而且對于部分經驗欠缺的技術人員來說,這一部分的操作相對較為困難。比如,需要求證程序中1-100的總和。在此,可以通過以下兩種方法對其進行求證:
第一是inti,sum=0:
for(i=1:i<101:i++)
{sum+=i;
第二是int sum;
Sum= 100*(100+1)/2;
通過以上兩種方法我們可以分析得出,在第一種方法中,系統(tǒng)需要循環(huán)100次才能解決這一問題,換言之,徐彤最少需要應用100個賦值才能對其進行100次準確的判斷,而且在這一過程中還需要通過200次的加法計算才能得出最終結果。而在第二種應用方法中,系統(tǒng)僅僅需要完成1次加法、1次乘法和1次除法便可以將之準確的計算出來。從以上兩種方法的應用中可以看出,第二種方法不論從簡便性、效率還是代碼編寫的長度等方面均優(yōu)越與第一種。因此,在對其進行嵌入式程序設計的過程中,可以首先選擇應用第二種犯法對其進行程序運行效率的提升與發(fā)展。
2.7 應用位操作代替乘除法
在計算機的應用程序中,數據是其中的最小位,也是可以直接操作的單位。正常情況下,對數據的操作需要借助硬件來完成,在硬件的控制下,數據可以得到相應的變化,完成相應的需求。在此,為了提升應用位操作的效率,并代替乘除法的計算模式,可以對其進行運行效率靈活性的提升。因為乘除法在CPU中無法直接運行,而是需要在一定條件下來實現。
如,除法的應用為:int height,le n;
height= 128/8;
le n=256%8:
乘法的應用為:int height,le n;
height= 128>>3;
le n=256 - (256 >>3<<3);
結合以上兩種模式,代碼生成過程中調用了出發(fā)和取余函數,所以,在這一過程中出現了函數調用的情況,同時還形成了寄存器參與運算的行為。由此可見,通過第二種方法對其進行代碼的生成更加高效快捷。
3 總結
在日常系統(tǒng)設計過程中,嵌入式系統(tǒng)開發(fā)與設計中代碼的優(yōu)化工作需要應用到較大的成本,而且有很多開銷項目屬于“隱藏項目”。同時工作較為復雜,且消耗的資源相對較大。在這一過程中,編程需要盡量通過程序優(yōu)化的方式降低以上問題的發(fā)生概率,縮減不必要的運算環(huán)節(jié),在控制成本的過程中提升系統(tǒng)開發(fā)的整體效率與質量。研究分析了如何有效地提升代碼的運行效率,但是在現實環(huán)境匯總,代碼效率在得到提升和優(yōu)化之后依然會出現其他方面的弊端與問題,甚至會對程序的整體運行造成嚴重的影響。比如,較為常見的有:代碼大小的控制失效、程序可讀性降低等。所以,在后續(xù)的嵌入式系統(tǒng)開發(fā)與設計中,需要通過科學合理的辦法對其進行代碼的優(yōu)化,切不可一味追求速度,也不可一味追求穩(wěn)定。
參考文獻:
[1]楊毅剛,范安宇,鄭一超,等,基于C語言的宿舍管理系統(tǒng)設計 與開發(fā)[J].電腦編程技巧與維護,2017(23):50-52.
[2]張祎.C語言在單片機開發(fā)中的應用分析[J].江蘇科技信息,2017(18):47-48.
[3]胡曉燕,譚躍生,李海榮,等.基于Android系統(tǒng)的移動學習環(huán)境開發(fā)與應用[J].中國現代教育裝備,2016(11):12-14.
[4]封婉.基于C程序設計語言的計算機編程分析[J].職大學報,2015(6):88-89.
【通聯編輯:代影】
作者簡介:朱婭晶(1980-),女,江蘇常州人,高校副教授,碩士,研究方向:計算機軟件。