日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 嵌入式教程
[導讀]高效率嵌入式程序開發(fā)技巧

摘  要:嵌入式系統(tǒng)對應用軟件的質量要求很高,在嵌入式開發(fā)中須注意對代碼進行優(yōu)化,盡可能地提高代碼效率。雖然C編譯器都提供了一定程度的代碼優(yōu)化,但大部分由編譯器執(zhí)行的優(yōu)化技術僅涉及執(zhí)行速度和代碼大小的平衡,不可能使程序既快又小,因而必須在編寫程序時采取必要的措施。本文針對高效率嵌入式程序開發(fā)提供了一些編程技巧,對實際系統(tǒng)開發(fā)具有重要作用。
關鍵詞:編譯器; 程序開發(fā); 代碼優(yōu)化

引言
    在多媒體、通信等計算復雜度高的應用中,為了滿足制造費用、功耗、性能以及實時性等諸多限制條件的要求,嵌入式系統(tǒng)程序往往需要特殊設計。這使得設計師在設計面向特定應用的嵌入式軟件時,需要有一套切實可行的編程準則。而在實際程序設計中,工程師尤其需要考慮對變量的使用和循環(huán)程序的處理。

變量使用
    在進行實際程序開發(fā)時,變量的使用至關重要,其中使用全局變量比向函數傳遞參數更加有效,這樣免去了函數調用時參數入棧和出棧的需要。當然,使用全局變量會對程序有一些副作用。變量定義的次序會導致最終映像中數據布局的不同,如圖1所示。

740)this.width=740" border="0" />
                     圖1 變量映像次序混亂狀況

    由此可見,在聲明變量時,需要考慮怎樣最佳地控制存儲器布局。最好的方法是在編程的時候,把所有相同類型的變量放在一起定義。

    通常,工程師設法使用short或char來定義變量以節(jié)省存儲器空間。在函數的局部變量數目有限的情況下,編譯器會把局部變量分配給內部寄存器,每個變量占用一個寄存器。在這種情況下,使用short和char型變量不但不會節(jié)省空間,反而會帶來其它的副作用。如圖2所示:假定a是任意可能的寄存器,存儲函數的局部變量。同樣完成加1的操作,32位的int型變量最快,只用一條加法指令。而8位和16位變量,完成加法操作后,還需要在32位的寄存器中進行符號擴展。其中,帶符號的變量,要用邏輯左移和算術右移兩條指令才能完成符號擴展;無符號的變量,要使用一條邏輯與指令對符號位進行清零。所以,使用32位的int或unsigned int局部變量最有效。某些情況下,函數從外部存儲器讀入局部變量進行計算,這時候,需要把不是32位的變量轉換成32位。至于把8位或16位變量擴展成32位后,隱藏了原來可能溢出異常這個問題,需要進一步仔細考慮。

740)this.width=740" border="0" />
         圖2 不同類型局部變量的加法程序

    在程序中,經常會使用switch case語句,每一個由機器語言實現(xiàn)的測試和跳轉僅僅是為了決定下一步要做什么,就浪費了處理器時間。為了提高速度,可以把具體的情況按照它們發(fā)生的相對頻率排序。即把最可能發(fā)生的情況放在第一,發(fā)生概率小的情況放在最后,這樣會減少代碼平均執(zhí)行時間。[!--empirenews.page--]

    通常,工程師總是竭力避免使用冗余變量,以精簡程序。一般情況下這樣做是正確的,但是也有例外,如下所示:
int f(void);
int g(void);             
 file://f()和g()不訪問全局變量errs
int errs;            file://全局變量
void test1(void)
{ errs += f();
                errs += g();
}
void test2(void)
{ int localerrs = errs;  
// 定義冗余的局部變量
     localerrs += f();
     localerrs += g();
     errs = localerrs;
}
    在第一種情況test1()里,每次訪問全局變量errs時都要先從相應的存儲器下載到寄存器里,經f()或g()函數調用后再存儲回原來的存儲器里面。在該例子中,一共要進行兩次這樣的下載/存儲操作。而在第二種情況test2()里,局部變量localerrs被分配以寄存器,這樣一來,整個函數就只需要一次下載/存儲全局變量存儲器了。盡量節(jié)省存儲器訪問的次數,對于提高系統(tǒng)性能非常有用。

循環(huán)程序的處理
    計數循環(huán)是程序中常用的流程控制結構。在C中,類似下面的for循環(huán)比比皆是:
    for(loop=1;loop<=limit;loop++)

    這種累加計數的方法符合一般的自然思維習慣,所以比下面的遞減計數方法使用更多:
    for(loop<=limit;loop!=0; loop--)
    這兩者在邏輯上并沒有效率差異,但是映射到具體的體系結構中,就產生了很大的不同。

    累加法比遞減法多用了一條指令,當循環(huán)次數比較多的時候,這兩段代碼就會在性能上產生明顯的差異。分析其本質原因,在于當進行一個非零常數比較時,必須用專門的CMP指令來執(zhí)行;而當一個變量與零進行比較時,ARM指令可以直接利用條件執(zhí)行的特性(NE)來進行判斷。很多時候循環(huán)展開由編譯器自動完成,不過應注意對中間變量或結果被更改的循環(huán),編譯程序往往拒絕展開,這時候就需要工程師自己來做展開工作了。

    尤其值得注意的是,在有內部指令cache的CPU上(如ARM946ES芯片),因為循環(huán)展開的代碼很大,往往會出現(xiàn)高速緩沖存儲器溢出。這時展開的代碼會頻繁地在CPU的高速緩沖存儲器和內存之間來回調用,又因為高速緩沖存儲器速度很高,所以此時循環(huán)展開反而會變慢。同時,循環(huán)展開會影響矢量運算優(yōu)化。

    ARM處理器核對NZ(零比較轉移)有特別的指令處理,速度非???,如果你的循環(huán)對方向不敏感,可以由大向小循環(huán)。需要注意的是,如果指針操作使用了i值,這種方法可能引起指針索引超界的嚴重錯誤(i = MAX+1)。當然你可以通過對i做加減運算來糾正,但是如果這樣就沒有提高效率的作用了。

結語
    本文對高效率嵌入式ARM程序開發(fā)總結了一些編程技巧。在實際的嵌入式系統(tǒng)開發(fā)中,可以大大的提高系統(tǒng)的性能,特別是在多媒體和通信等復雜度高的應用中,對程序設計具有指導意義。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

成都2022年10月19日 /美通社/ -- 近期,平安養(yǎng)老險積極籌備個人養(yǎng)老金的產品設計和系統(tǒng)開發(fā)工作,發(fā)展多樣化的養(yǎng)老金融產品,推動商業(yè)養(yǎng)老保險、個人養(yǎng)老金、專屬商業(yè)養(yǎng)老保險等產品供給。 搭養(yǎng)老政策東風 ...

關鍵字: 溫度 BSP 東風 大眾

廣東佛山2022年10月19日 /美通社/ -- 空間是人居生活的基礎單元,承載著生存與活動的最基本功能。而對于理想空間的解構意義卻在物理性容器之外,體現(xiàn)出人們對于空間和生活深層關系的思考,同時也塑造著人與空間的新型連接...

關鍵字: 溫度 BSP 智能化 進程

上海2022年10月19日 /美通社/ -- 10月17日晚間,安集科技披露業(yè)績預告。今年前三季度,公司預計實現(xiàn)營業(yè)收入7.54億元至8.33億元,同比增長60.24%至77.03%;歸母凈利潤預計為1.73億...

關鍵字: 電子 安集科技 BSP EPS

北京2022年10月19日 /美通社/ -- 10月18日,北京市經濟和信息化局發(fā)布2022年度第一批北京市市級企業(yè)技術中心創(chuàng)建名單的通知,諾誠健華正式獲得"北京市企業(yè)技術中心"認定。 北京市企業(yè)技...

關鍵字: BSP ARMA COM 代碼

北京2022年10月18日 /美通社/ -- 10月14日,國際數據公司(IDC)發(fā)布《2022Q2中國軟件定義存儲及超融合市場研究報告》,報告顯示:2022年上半年浪潮超融合銷售額同比增長59.4%,近5倍于...

關鍵字: IDC BSP 數字化 數據中心

上海2022年10月18日 /美通社/ -- 2022年9月5日,是首都銀行集團成立60周年的紀念日。趁著首都銀行集團成立60周年與首都銀行(中國)在華深耕經營12年的“大日子”,圍繞作為外資金融機構對在華戰(zhàn)略的構想和業(yè)...

關鍵字: 數字化 BSP 供應鏈 控制

東京2022年10月18日  /美通社/ -- NIPPON EXPRESS HOLDINGS株式會社(NIPPON EXPRESS HOLDINGS, INC.)旗下集團公司上海通運國際物流有限公司(Nipp...

關鍵字: 溫控 精密儀器 半導體制造 BSP

廣州2022年10月18日 /美通社/ -- 10月15日,第 132 屆中國進出口商品交易會("廣交會")于"云端"開幕。本屆廣交會上高新技術企業(yè)云集,展出的智能產品超過140,...

關鍵字: 中國智造 BSP 手機 CAN

經過幾十年發(fā)展,嵌入式技術已經用在了我們生活中的方方面面,但是嵌入式始終都帶有小眾,專業(yè)性強的屬性,讓很多非嵌入式領域的同學望而卻步。近十幾年的發(fā)展,物聯(lián)網覆蓋了越來越多領域,包括了家居,商業(yè),工業(yè),農業(yè)等領域,不僅吸引...

關鍵字: 嵌入式 物聯(lián)網 技術

隨著IT技術飛速發(fā)展,互聯(lián)網已經進入了“物聯(lián)網”時代。物聯(lián)網中需要的大量設備不在依賴人與人之間的交互產生聯(lián)系,更多通過協(xié)議、通信、程序設計等方式連接到一處。即 “物聯(lián)網”的目的則是讓所有的物品都具有計算機的智能但并不以通...

關鍵字: 嵌入式 物聯(lián)網 計算機

嵌入式教程

6897 篇文章

關注

發(fā)布文章

編輯精選

技術子站

關閉