51單片機(jī)ROM與RAM
先說(shuō)說(shuō)這個(gè)4K字節(jié)的程序存儲(chǔ)器或者說(shuō)只讀存儲(chǔ)器,我們寫(xiě)的程序經(jīng)過(guò)編譯器編譯成機(jī)器碼都是存在這個(gè)區(qū)域,所以稱為程序存儲(chǔ)器;但單片機(jī)上電執(zhí)行的時(shí)候,此區(qū)域內(nèi)的數(shù)據(jù)只能讀取而不能寫(xiě)入,他的只讀存儲(chǔ)器的名稱從這而來(lái)。89c51的ROM采用的是FPEROM(Flash Programmable and Erasable Read Only Memory),具體工藝我也不太清楚,號(hào)稱可以擦寫(xiě)1000次,也就是說(shuō)你每天寫(xiě)30次,一個(gè)多月就報(bào)廢了。
在說(shuō)說(shuō)128字節(jié)的隨機(jī)存儲(chǔ)器或者說(shuō)數(shù)據(jù)存儲(chǔ)器,程序運(yùn)行過(guò)程中,一些中間變量存儲(chǔ)在這個(gè)地方,也能從這個(gè)地方獲取需要運(yùn)算的值,所以稱之為隨機(jī)存儲(chǔ)器,也稱為數(shù)據(jù)存儲(chǔ)器。個(gè)人覺(jué)得相當(dāng)于計(jì)算機(jī)的內(nèi)存,掉電丟失。
看看MSC-51指令就知道,所有的數(shù)據(jù)移動(dòng)指令都是對(duì)RAM區(qū)操作的,就是因?yàn)闊o(wú)法改變ROM。
51內(nèi)部的存儲(chǔ)器在物理上可分為4個(gè)區(qū)域:片內(nèi)ROM,片外ROM,片內(nèi)RAM和片外RAM。從邏輯上可分為三個(gè)區(qū)域,64KB片內(nèi)外統(tǒng)一編址的程序存儲(chǔ)器(ROM),128字節(jié)或256字節(jié)的片內(nèi)數(shù)據(jù)存儲(chǔ)器(RAM),64KB片外數(shù)據(jù)存儲(chǔ)器(RAM)。
對(duì)應(yīng)的keil編譯器關(guān)鍵字為:
data:片內(nèi)數(shù)據(jù)存儲(chǔ)器(RAM)低128字節(jié)(51系列片內(nèi)只有128字節(jié),52系列有256字節(jié))
bdata:可位尋址的片內(nèi)RAM
以上兩種類(lèi)型可以快速的存取數(shù)據(jù),常用來(lái)放臨時(shí)性的傳遞變量或使用頻率較高的變量。
idata :片內(nèi)數(shù)據(jù)存儲(chǔ)器(RAM)256字節(jié)
xdata:片外數(shù)據(jù)存儲(chǔ)器64KB
pdata:片外數(shù)據(jù)存儲(chǔ)器低256字節(jié)
code:64KB程序存儲(chǔ)器(如果變量定義在這個(gè)空間,后面就不能修改了,如果有語(yǔ)句改變它的值,編譯器就會(huì)報(bào)錯(cuò)。)
此外,C51還有三種存儲(chǔ)模式(這是在開(kāi)發(fā)環(huán)境里面設(shè)置的):SMALL, COMPACT, LARGE
本文引用地址:http://m.butianyuan.cn/article/201611/318424.htmSMALL模式下,如果不做特別說(shuō)明,參數(shù)及局部變量默認(rèn)為data型,放在片內(nèi)RAM128字節(jié)內(nèi),訪問(wèn)迅速。由于內(nèi)部的RAM有限,如果變量過(guò)多,會(huì)導(dǎo)致頻繁的使用寄存器,而使代碼變的冗長(zhǎng)。此時(shí)棧也在片內(nèi)的RAM,棧長(zhǎng)很關(guān)鍵,因?yàn)闂iL(zhǎng)依賴于不同函數(shù)的嵌套層數(shù)。
COMPACT:不做特別說(shuō)明,參數(shù)及局部變量默認(rèn)為pdata,??臻g在內(nèi)部RAM。
LARGE:參數(shù)及局部變量默認(rèn)為xdata,使用DPTR來(lái)尋址。訪問(wèn)效率低,此外這種數(shù)據(jù)指針不能對(duì)稱操作。
全局變量會(huì)根據(jù)定義的類(lèi)型或者存儲(chǔ)的模式分配在相應(yīng)的存儲(chǔ)區(qū)內(nèi),有固定的地址,如果全局變量過(guò)多則會(huì)導(dǎo)致占用太多內(nèi)存,處理速度變慢。
評(píng)論