在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

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

            作者: 時間:2011-02-10 來源:網(wǎng)絡 收藏

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

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

            glNandDevCapacity = CYAN_NAND_DEV_NUMPAGES_BLOCK * CYAN_NAND_UBLKS_PER_ZONE * (uint32_t)glNandNumZones;

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

            {

            char zoneCtr = glNandNumZones;

            glNandDevCapacity = CYAN_NAND_DEV_NUMPAGES_BLOCK * CYAN_NAND_UBLKS_PER_ZONE;

            while (zoneCtr)

            {

            glNandDevCapacity = 1;

            zoneCtr >>= 1;

            }

            }

            盡管這個例程相當大,但它仍能減少庫的使用并減小代碼的整體大小。

            掌握比編輯器更多的信息

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

            zn = (adj_lba / CYAN_NAND_UBLKS_PER_ZONE);

            glNandRelativeBlkAddr = (adj_lba % CYAN_NAND_UBLKS_PER_ZONE);

            由于我們在預期值方面比編譯器了解的更多,因此我們可以讓編譯器不使用龐大的長除法函數(shù),而采用較小的 16 位版本來替代。

            {

            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;

            }

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



            關(guān)鍵詞:

            評論


            相關(guān)推薦

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

            關(guān)閉