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

          新聞中心

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

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

          作者: 時(shí)間:2011-02-10 來(lái)源:網(wǎng)絡(luò) 收藏

          在上述的映射文件中,我們了解到庫(kù)占用了 1K 的寶貴存儲(chǔ)器空間。深入查看映射文件,通過(guò) Excel 進(jìn)行分析后得到了如圖 2 所示的結(jié)果。我們從圖中移出較小的庫(kù)函數(shù)部分。盡管這些函數(shù)名稱比較晦澀,不過(guò)我們可以對(duì)照庫(kù)參考資料逐一了解其含義。首先,ULDIV 是指無(wú)符號(hào)數(shù)的長(zhǎng)除法 (long division),而圖中第二個(gè)則是指長(zhǎng)乘法 (long multiplication)。

          .map 文件的交叉參考表明我們很幸運(yùn):上述函數(shù)只用于一個(gè)文件中。.lst 文件顯示了長(zhǎng)除法函數(shù)的兩種使用情況以及長(zhǎng)乘法函數(shù)的一種使用情況

          glNandDevCapacity = CYAN_NAND_DEV_NUMPAGES_BLOCK * CYAN_NAND_UBLKS_PER_ZONE * (uint32_t)glNandNumZones;

          在該特定案例中,我們知道 zone 的數(shù)量是一個(gè)二進(jìn)制數(shù),而另兩個(gè)值為常量。因此,我們可用重復(fù) 8 次的左移位 (left shift) 操作替代長(zhǎng)乘法:

          {

          char zoneCtr = glNandNumZones;

          glNandDevCapacity = CYAN_NAND_DEV_NUMPAGES_BLOCK * CYAN_NAND_UBLKS_PER_ZONE;

          while (zoneCtr)

          {

          glNandDevCapacity = 1;

          zoneCtr >>= 1;

          }

          }

          盡管這個(gè)例程相當(dāng)大,但它仍能減少庫(kù)的使用并減小代碼的整體大小。

          掌握比編輯器更多的信息

          成熟的 8 位編譯器包括代碼編寫良好、經(jīng)過(guò)優(yōu)化的庫(kù)函數(shù)。不過(guò),這些函數(shù)須考慮到通過(guò)對(duì)數(shù)據(jù)的了解可自行處理的一些不常見(jiàn)情況。映射文件中顯示的最大庫(kù)函數(shù)就是這樣一個(gè)很好的例子。調(diào)用兩次 ULDIV 例程,以獲得輸入值除以常量后得到的除數(shù)和余數(shù):

          zn = (adj_lba / CYAN_NAND_UBLKS_PER_ZONE);

          glNandRelativeBlkAddr = (adj_lba % CYAN_NAND_UBLKS_PER_ZONE);

          由于我們?cè)陬A(yù)期值方面比編譯器了解的更多,因此我們可以讓編譯器不使用龐大的長(zhǎng)除法函數(shù),而采用較小的 16 位版本來(lái)替代。

          {

          xdata unsigned char lastNibble = adj_lba 0xf;

          adj_lba >>= 4;

          zn = ((uint16_t)adj_lba / (uint8_t)CYAN_NAND_UBLKS_PER_ZONE/16));

          glNandRelativeBlkAddr = ((uint16_t)adj_lba % (uint8_t) (CYAN_NAND_UBLKS_PER_ZONE/16));

          glNandRelativeBlkAddr = (glNandRelativeBlkAddr 4) + lastNibble;

          }

          激進(jìn)的的程序優(yōu)化者甚至可能實(shí)現(xiàn)他們自己的二進(jìn)制長(zhǎng)除法例程。



          關(guān)鍵詞:

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁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); })();