單片機(jī)地址空間堆棧的理解

發(fā)布時間:2024-01-29
data –可尋址片內(nèi)ram 0x00-0x7f
bdata—可位尋址片內(nèi)ram
idata—可尋址片內(nèi)ram,允許訪問全部內(nèi)部ram 0x00-0xff
padata—分頁尋址訪問片外ram
xdata—可尋址片外ram 0x0000- 0xffff
code--程序存儲區(qū)單片機(jī)存儲器分rom跟ram之分,ram存放中間結(jié)果,數(shù)據(jù)和經(jīng)常變換的代碼,rom存放code。51單片機(jī)采用的是哈弗結(jié)構(gòu),即數(shù)據(jù)跟代碼擁有單獨的地址空間。存儲器可以分為程序存儲器(eerom,flash之類),內(nèi)部數(shù)據(jù)存儲器(ram),sfr,位地址空間和外部數(shù)據(jù)存儲器。內(nèi)部數(shù)據(jù)存儲器在物理上分為內(nèi)部sram和特殊功能寄存器,而內(nèi)部分為低(0x00-0x7f)和(0x80-0xff),高128字節(jié)地址重復(fù),需要不同的訪問方式。sfr用直接尋址方式,sram需要間接。這里sfr是寄存器,硬件上是中央處理器的內(nèi)部組成部分,訪問速度很快。在低128b的sram,0x00-0x1f是4個通用工作寄存器,每組有r0-r7。使用哪一組,可以通過psw中的rs1,rs0來配置。位尋址是在0x20-0x2f
程序內(nèi)存可以分為幾個區(qū),棧區(qū)(stack),堆區(qū)(heap),全局區(qū)(static),文字常亮區(qū),程序代碼區(qū)。程序編譯之后,全局變量,靜態(tài)變量已經(jīng)分配好內(nèi)存空間,在函數(shù)運行時,程序需要為局部變量分配??臻g,當(dāng)中斷來時,也需要將函數(shù)指針入棧,保護(hù)現(xiàn)場,以便于中斷處理完之后再回到之前執(zhí)行的函數(shù)。棧是從高到低分配,堆是從低到高分配。我們一般說的堆棧指的棧。堆棧又分硬堆棧和軟堆棧,硬堆棧即sp,從片內(nèi)ram的頂部向下生長。軟堆棧在硬堆棧跟全局變量區(qū)之間的空間,c51函數(shù)調(diào)用通過r0-r7和棧來實現(xiàn)。
為什么單片機(jī)啟動時,不需要用bootloader將代碼從rom搬移到ram,而arm則需要。這里我們可以先看看單片機(jī)程序執(zhí)行的過程,單片機(jī)執(zhí)行分三個步驟,取執(zhí)行---分析指令----執(zhí)行指令。取指令的任務(wù)是:根據(jù)pc的值從程序存儲器讀出指令,送到指令寄存器。然后分析執(zhí)行執(zhí)行。這樣單片機(jī)就從內(nèi)部程序存儲器去代碼指令,從ram存取相關(guān)數(shù)據(jù)。要知道ram取數(shù)的速度是遠(yuǎn)高于rom的,但是單片機(jī)因為本身運行頻率不高,所以從rom取指令慢并不影響。而arm不同,cpu運行的頻率高,遠(yuǎn)大于從rom讀寫的速度,所以一般有操作系統(tǒng),都需要將代碼部分拷貝到ram中再執(zhí)行??赐耆牧藛??喜歡就一起來點個 贊 吧!
上一個:櫻桃的藥用
下一個:日本錄像機(jī)品牌排行,我要去日本買哪款攝像機(jī)性價比好

移動硬盤一閃一閃無法打開,西數(shù)移動硬盤指示燈一閃一閃
板栗的繁殖方法-板栗的種植技術(shù)-板栗怎么養(yǎng)
工業(yè)建筑有哪些用途?
夢米p6怎么調(diào)聯(lián)通4g網(wǎng)
直擊旋進(jìn)旋渦流量計工作中與流體的相互嬉戲
魅族ba621是什么型號手機(jī)(魅族bt62型號)
解除合同要走什么程序
最大限度地利用您的電子元器件預(yù)算
氣體活塞式壓力計與液體活塞式壓力計的主要不同點
普洱茶中那些低端茶去哪了?
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos