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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 八位微控制器的代碼優(yōu)化技巧

          八位微控制器的代碼優(yōu)化技巧

          作者: 時間:2011-02-10 來源:網絡 收藏

          全局變量更好用

          將參數傳遞給函數是一個很好的代碼經驗。在 C 程序中,編譯器可絕對確保調用的子程序不會修改參數。編譯器可處理存儲器管理的問題。不過,這將占用難以承受的大量時間和空間。試考慮下面這段代碼:

          Main()

          {

          Int effectiveGlobal;

          Foo(effectiveGlobal)

          }

          由于變量在 main() 中已經聲明,因此該變量與真正的全局變量之間的真正差別是命名空間 (namespace)。但是,每次調用 foo() 時,編譯器都必須在新的位置存儲 effectiveGlobal。聲明真正的全局變量有助于降低因調用而造成的代碼和數據開銷。

          向編譯器提供盡可能多的信息

          8051 可提供 64K 的地址空間 XDATA、256 字節(jié)的堆棧與間接尋址空間 IDATA 以及 256 字節(jié)的直接尋址空間 DATA 等多個存儲器空間。在大多數情況下,代碼編寫人員都知道指針指向了哪個存儲器空間。如果用戶指定了存儲器空間,編譯器就無需包含對例程中的所有三類存儲器進行尋址的代碼,只需使用一個即可。由于指針無需包含數據空間信息,因此有助于節(jié)約數據空間。

          在我的 8051 編譯器中,上述變量可通過包含 OPTR 字符串的庫例程進行存取。在列表和庫文件中搜索對OPTR的引用可以發(fā)現長變量被多次使用,而且由于在代碼中假定了指針的大小,其中某些長變量還會導致一些問題。

          在變量聲明中使用 const 關鍵詞可以實現兩方面的優(yōu)化:第一,編譯器不必再存儲變量的初始值;第二,編譯器能在編譯時間而非執(zhí)行時間執(zhí)行一些數 學 運 算。查看示例程序的編譯輸出,以確定對 const與 #define 的處理是否真的一樣。以下是我對代碼的測試:

          8位微控制器的代碼優(yōu)化竅門

          經過測試,得到以下輸出,表明它并不清楚 const 變量的值。

          8位微控制器的代碼優(yōu)化竅門

          匯編語言

          不少嵌入式固件工程師信誓旦旦的表示他們始終能比編譯器做得更好,不僅如此,他們還認為應該使用匯編語言重新編寫所有代碼。然而事實上,現代編譯器提供的許多特性已經能趕上人腦的水平了。

          變量共享:一些 8 位處理器尚無有效的機制來存取堆棧上的變量。一般的解決方案是創(chuàng)建調用樹,并在相互不進行調用的函數間共享變量。在匯編程序中要想保持這種結構相當困難,且容易出錯。

          可靠性:任何從事專業(yè)軟件或固件開發(fā)工作的人員都能讀懂 C 語言程序。如果您需要將代碼交給其它開發(fā)人員處理,他們無需掌握那些為發(fā)揮匯編語言的最大效率而需要的所有技巧便可立即開始修改代碼。

          可移植性:C 語言最初的開發(fā)目的之一就是要提供一種非常抽象,以便可以在多種處理器上應用的語言。這一目標至今仍然非常重要。

          代碼共享:許多 8 位編譯器都能在鏈接時間之后進行優(yōu)化,這使得編譯器不僅能執(zhí)行許多人工能完成的優(yōu)化,而且還能完成一些人工所不能完成的優(yōu)化。例如,現在許多編譯器都能搜索不同函數 中 共 有的代碼字符串,并將其合并為一個新的函數。而人類是不可能記住每個編譯周期中執(zhí)行此函數所需要的全部細節(jié)的。

          匯編語言現在仍占有一席之地。不過,在使用匯編語言之前應首先考慮上述所有因素。

          結論

          在撰寫本文的過程中,我將成熟程序的大小從 0x6000 多字節(jié)縮減到了 0x5f2b 字節(jié),節(jié)約了 200 多字節(jié)。該程序過去曾是多次試圖優(yōu)化程序大小的目標。


          上一頁 1 2 3 下一頁

          關鍵詞:

          評論


          相關推薦

          技術專區(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); })();