看穿單片機(jī)第二節(jié):存儲(chǔ)器模型
存儲(chǔ)器模型
存儲(chǔ)器對(duì)于整個(gè)計(jì)算機(jī)系統(tǒng)來(lái)說(shuō)是至關(guān)重要的:供CPU執(zhí)行的程序指令、程序運(yùn)行過(guò)程中的變量和數(shù)據(jù)……,它們都要以存儲(chǔ)器作為載體。所以在實(shí)際的應(yīng)用和開(kāi)發(fā)中,人們總是希望單片機(jī)芯片的RAM和ROM容量能盡量大一些。這樣就可以存儲(chǔ)更多的代碼指令,運(yùn)行規(guī)模更大更為復(fù)雜的程序。另外,存儲(chǔ)器本身的讀寫(xiě)速度也就成為了CPU性能的最大瓶頸之一。更為形象的描述如圖1.9所示。
圖1.9 CPU從存儲(chǔ)器取指令以及進(jìn)行變量、數(shù)據(jù)的存儲(chǔ)
ROM,即只讀存儲(chǔ)器,也就是說(shuō)在它上面存儲(chǔ)的內(nèi)容是無(wú)法被CPU直接修改的。(通常只能使用專(zhuān)用的燒錄器來(lái)修改其中的數(shù)據(jù),不過(guò)現(xiàn)在一些新型的單片機(jī)芯片已經(jīng)可以在CPU運(yùn)行過(guò)程中去修改ROM數(shù)據(jù)了,這種技術(shù)被稱(chēng)為“IAP”)所以,ROM通常被用來(lái)固化存儲(chǔ)程序指令代碼和一些無(wú)需修改的數(shù)據(jù),比如字模字庫(kù)、常數(shù)等等。
RAM與ROM不同,它是可讀可寫(xiě)的,因此被稱(chēng)為隨機(jī)讀寫(xiě)存儲(chǔ)器。CPU在運(yùn)行過(guò)程中,可以對(duì)RAM中的任何數(shù)據(jù)進(jìn)行讀寫(xiě)修改操作。這就是C語(yǔ)言中賦值語(yǔ)句在底層得以實(shí)現(xiàn)的物理基礎(chǔ),比如“int a; a=0”,就是將RAM中的某一個(gè)存儲(chǔ)單元寫(xiě)入了一個(gè)數(shù)值0。但如果是“code int a; a=0”的話,編譯的時(shí)候就一定會(huì)報(bào)錯(cuò)。(code關(guān)鍵字在51單片機(jī)C語(yǔ)言中是用來(lái)說(shuō)明“變量”的位置在ROM中,同樣的定義在ARM上使用const)而且,RAM比ROM在讀寫(xiě)速度上要快得多,所以CPU在運(yùn)行程序的時(shí)候,通常都會(huì)把一些代碼指令拷貝到RAM中來(lái),尤其是那些會(huì)被頻繁執(zhí)行的部分(這就是C語(yǔ)言中的.text段,即代碼段)。但是RAM通常比ROM要昂貴的多(關(guān)于這一點(diǎn)大家應(yīng)該有宏觀的感知,一個(gè)U盤(pán)16G才10塊錢(qián),但是電腦內(nèi)存條卻要好幾百),這也就是生產(chǎn)廠商為什么在單片機(jī)芯片中對(duì)于RAM的配比顯得很吝嗇,而對(duì)于ROM則略顯慷慨的原因。
為了更好地講解后面的內(nèi)容,對(duì)于存儲(chǔ)器大家必須明確一點(diǎn),它也算是一個(gè)常識(shí):它是由很多的地址連續(xù)的存儲(chǔ)單元構(gòu)成的,如圖1.10所示。
圖1.10 存儲(chǔ)器是由地址連續(xù)的存儲(chǔ)單元構(gòu)成
總體來(lái)說(shuō),存儲(chǔ)器就是一個(gè)指令和數(shù)據(jù)的容器,它與CPU相互依存,這才使得整個(gè)計(jì)算機(jī)系統(tǒng)得以正常運(yùn)作。此時(shí)一個(gè)極其重要的問(wèn)題便應(yīng)運(yùn)而生:CPU是如何精準(zhǔn)地從存儲(chǔ)器中取出指令和數(shù)據(jù)的,又是如何將數(shù)據(jù)寫(xiě)入到存儲(chǔ)器中的?這一問(wèn)題說(shuō)起來(lái)簡(jiǎn)單,但它卻引申出了一個(gè)關(guān)鍵的技術(shù)—“總線”!