<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 淺談51單片機內存優(yōu)化

淺談51單片機內存優(yōu)化

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

上面的代碼中,循環(huán)是臃腫的,變量 j 完全不必要,那么將代碼改成

UCHAR i;

UCHAR j;

for(i = 0; i LEN; ++i )

{

tt1[i] = 0x55;

}

再編譯看看,出錯了吧!

因為不知道該如何使用 j,所以沒(méi)能優(yōu)化,j 須占 RAM 空間,RAM 就溢出了。

(智能一點(diǎn)的會(huì )自動(dòng)將這個(gè)無(wú)用的變量去掉,但這個(gè)不在討論之列了)

另外,對 idata 的定義的變量最好放在 data 變量之后

對于這一種定義

uchar c1;

idata uchar c2;

uchar c3;

變量 c2 肯定會(huì )以間接尋址,但它有可能落在 data 區域,就浪費了一個(gè)可直接尋址的空間

變量?jì)?yōu)化一般要注意幾點(diǎn):

①讓盡可能多的變量使用直接尋址,提高速度

假如有兩個(gè)單字節的變量,一個(gè)長(cháng)119的字符型數組

因為總長(cháng)超過(guò) 120 字節,不可能都定義在 data 區

按這條原則,定義的方式如下:

data UCHAR tab[119];

data UCAHR c1;

idata UCHaR c2;

但也不是絕的,如果 c1, c2 需要以極高的頻率訪(fǎng)問(wèn),而 tab 訪(fǎng)問(wèn)不那么頻繁

則應該讓訪(fǎng)問(wèn)量大的變量使用直接尋址:

data UCAHR c1;

data UCHaR c2;

idata UCHAR tab[119];

這個(gè)是要根據具體項目需求來(lái)確定的

②提高內存的重復利用率

就是盡可能的利用局部變量,局部變量還有個(gè)好處是訪(fǎng)問(wèn)速度比較快

由前面的例子可以看出,局部變量 i, j 是沒(méi)有單獨占用內存的

子程序中使用內存數目不大的變量盡量定義為局部變量

③對于指針數組的定義,盡可能指明存儲類(lèi)型

盡量使用無(wú)符號類(lèi)型變量

一般指針需要一個(gè)字節額外的字節指明存儲類(lèi)型

8051 系列本身不支持符號數,需要外加庫來(lái)處理符號數,一是大大降低程序運行效率,二是需要額外的內存

④避免出現內存空洞

可以通過(guò)查看輸出符號表文件(.M51)查看

對前面的代碼,M51文件中關(guān)于內存一節如下:

* * * * * * * D A T A M E M O R Y * * * * * * *

REG 0000H 0008H ABSOLUTE "REG BANK 0"

DATA 0008H 0078H UNIT ?DT?TEST

IDATA 0080H 007FH UNIT ?ID?TEST

IDATA 00FFH 0001H UNIT ?STACK

第一行顯示寄存器組0從地址0000H開(kāi)始,占用0008H個(gè)字節

第二行顯示DATA區變量從0008H開(kāi)始,占用0078H個(gè)字節

第三行顯示IDATA區變量從0080H開(kāi)始,占用007F個(gè)字節

第四行顯示堆棧從00FFH開(kāi)始,占0001H個(gè)字節

由于前面代碼中變量定義比較簡(jiǎn)單,且連續用完了所有空間,所以這里顯示比較簡(jiǎn)單

變量定義較多時(shí),這里會(huì )有很多行

如果全局變量與局部變量分配不合理,就有可能出現類(lèi)似下面的行

0010H 0012H *** GAP ***

該行表示從0010H開(kāi)始連續0012H個(gè)字節未充分利用或根本未用到

出現這種情況最常見(jiàn)的原因是局變量太多、多個(gè)子程序中的局部變量數目差異太大、使用了寄存器切換但未充分利用。


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>