微控制器位址空間,堆疊理解

2021-06-21 14:03:30 字數 1075 閱讀 4800

data –可定址片內ram 0x00-0x7f

bdata—可位定址片內ram

idata—可定址片內ram,允許訪問全部內部ram 0x00-0xff

padata—分頁定址訪問片外ram

xdata—可定址片外ram 0x0000- 0xffff

code--程式儲存區微控制器儲存器分rom跟ram之分,ram存放中間結果,資料和經常變換的**,rom存放code。51微控制器採用的是哈弗結構,即資料跟**擁有單獨的位址空間。儲存器可以分為程式儲存器(eerom,flash之類),內部資料儲存器(ram),sfr,位位址空間和外部資料儲存器。內部資料儲存器在物理上分為內部sram和特殊功能暫存器,而內部分為低(0x00-0x7f)和(0x80-0xff),高128位元組位址重複,需要不同的訪問方式。sfr用直接定址方式,sram需要間接。這裡sfr是暫存器,硬體上是**處理器的內部組成部分,訪問速度很快。在低128b的sram,0x00-0x1f是4個通用工作暫存器,每組有r0-r7。使用哪一組,可以通過psw中的rs1,rs0來配置。位定址是在0x20-0x2f

程式記憶體可以分為幾個區,棧區(stack),堆區(heap),全域性區(static),文字常亮區,程式**區。程式編譯之後,全域性變數,靜態變數已經分配好記憶體空間,在函式執行時,程式需要為區域性變數分配棧空間,當中斷來時,也需要將函式指標入棧,保護現場,以便於中斷處理完之後再回到之前執行的函式。棧是從高到低分配,堆是從低到高分配。我們一般說的堆疊指的棧。堆疊又分硬堆疊和軟堆疊,硬堆疊即sp,從片內ram的頂部向下生長。軟堆疊在硬堆疊跟全域性變數區之間的空間,c51函式呼叫通過r0-r7和棧來實現。

為什麼微控制器啟動時,不需要用bootloader將**從rom搬移到ram,而arm則需要。這裡我們可以先看看微控制器程式執行的過程,微控制器執行分三個步驟,取執行---分析指令----執行指令。取指令的任務是:根據pc的值從程式儲存器讀出指令,送到指令暫存器。然後分析執行執行。這樣微控制器就從內部程式儲存器去**指令,從ram訪問相關資料。要知道ram取數的速度是遠高於rom的,但是微控制器因為本身執行頻率不高,所以從rom取指令慢並不影響。而arm不同,cpu執行的頻率高,遠大於從rom讀寫的速度,所以一般有作業系統,都需要將**部分拷貝到ram中再執行。

51微控制器 堆疊

堆疊的作用是用在呼叫子程式或中斷程式時保護現場,因為51微控制器的暫存器是十分有限的,而相對來說普通資料儲存器更充足,通過入棧將暫存器中的內容臨時儲存到堆疊中 普通資料儲存器 這是乙個用時間換取空間的程式設計方式。51微控制器的堆疊是向上生長的,就是堆疊不為空時,棧底位址小於棧頂位址,當將資料入棧時...

分析微控制器堆疊,分享個人理解

看關於微控制器方面的書籍的時候,總是能看到別人說的一些堆疊啊什麼的操作,之前看到這個術語就直接跳過,沒想到去 微控制器內部的原理。但是最近課程學習微機原理這門課,需要我們寫匯程式設計序,彙編裡面經常遇到堆疊這個東西,所以就找了個時間把堆疊給徹底的搞一下。如果了解一點彙編程式設計話,就可以知道,堆疊是...

微控制器位址擴充套件

匯流排 位址匯流排 p0口作為低八位位址,p2口作為高八位位址,兩者共同構造位址匯流排。由此可見,微控制器最多可以有16條位址線,因此最大定址範圍為64 kb 0000h ffffh 位址匯流排是單向的,只能由微控制器向外傳送。資料匯流排 資料匯流排由p0口構成,雙向。需要注意的是p0口兼作位址匯流...