<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 高效率嵌入式程序開發(fā)技巧

          高效率嵌入式程序開發(fā)技巧

          作者: 時間:2009-07-20 來源:網(wǎng)絡 收藏

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

          本文引用地址:http://www.ex-cimer.com/article/152417.htm

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

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


          圖1 變量映像次序混亂狀況

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

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


          圖2 不同類型局部變量的加法程序

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

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁 1 2 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();