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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > Keil C51中的優(yōu)化級別及優(yōu)化作用

          Keil C51中的優(yōu)化級別及優(yōu)化作用

          作者: 時間:2016-11-26 來源:網(wǎng)絡 收藏
          級別說明

          0常數(shù)合并:編譯器預先計算結(jié)果,盡可能用常數(shù)代替表達式。包括運行地址計算。
          優(yōu)化簡單訪問:編譯器優(yōu)化訪問8051系統(tǒng)的內(nèi)部數(shù)據(jù)和位地址。
          跳轉(zhuǎn)優(yōu)化:編譯器總是擴展跳轉(zhuǎn)到最終目標,多級跳轉(zhuǎn)指令被刪除。

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


          1死代碼刪除:沒用的代碼段被刪除。
          拒絕跳轉(zhuǎn):嚴密的檢查條件跳轉(zhuǎn),以確定是否可以倒置測試邏輯來改進或刪除。


          2數(shù)據(jù)覆蓋:適合靜態(tài)覆蓋的數(shù)據(jù)和位段被確定,并內(nèi)部標識。BL51連接/定位器可以通

          過全局數(shù)據(jù)流分,選擇可被覆蓋的段。


          3窺孔優(yōu)化:清除多余的MOV指令。這包括不必要的從存儲區(qū)加載和常數(shù)加載操作。當存

          儲空間或執(zhí)行時間可節(jié)省時,用簡單操作代替復雜操作。


          4寄存器變量:如有可能,自動變量和函數(shù)參數(shù)分配到寄存器上。為這些變量保留的存儲區(qū)就省略了。
          優(yōu)化擴展訪問:IDATA、XDATA、PDATA和CODE的變量直接包含在操作中。在多數(shù)時間沒

          必要使用中間寄存器。
          局部公共子表達式刪除:如果用一個表達式重復進行相同的計算,則保存第一次計算

          結(jié)果,后面有可能就用這結(jié)果。多余的計算就被刪除。
          Case/Switch優(yōu)化:包含SWITCH和CASE的代碼優(yōu)化為跳轉(zhuǎn)表或跳轉(zhuǎn)隊列。


          5全局公共子表達式刪除:一個函數(shù)內(nèi)相同的子表達式有可能就只計算一次。中間結(jié)果

          保存在寄存器中,在一個新的計算中使用。
          簡單循環(huán)優(yōu)化:用一個常數(shù)填充存儲區(qū)的循環(huán)程序被修改和優(yōu)化。


          6循環(huán)優(yōu)化:如果結(jié)果程序代碼更快和有效則程序?qū)ρh(huán)進行優(yōu)化。


          7擴展索引訪問優(yōu)化:適當時對寄存器變量用DPTR。對指針和數(shù)組訪問進行執(zhí)行速度和代碼大小優(yōu)化。

          8公共尾部合并:當一個函數(shù)有多個調(diào)用,一些設置代碼可以復用,因此減少程序大小。

          9公共塊子程序:檢測循環(huán)指令序列,并轉(zhuǎn)換成子程序。Cx51甚至重排代碼以得到更大的循環(huán)序列。



          評論


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