單片機(jī)執(zhí)行指令過程詳解
單片機(jī)如何執(zhí)行代碼命令,單片MCU內(nèi)存如何分配?
發(fā)布時(shí)間:2017-06-30 責(zé)任編輯:susan
【導(dǎo)讀】單片機(jī)執(zhí)行程序的過程,實(shí)際上就是執(zhí)行我們所編制程序的過程。即逐條指令的過程。計(jì)算機(jī)每執(zhí)行一條指令都可分為三個(gè)階段進(jìn)行。即取指令-----分析指令-----執(zhí)行指令。
單片機(jī)執(zhí)行指令過程詳解
取指令的任務(wù)是:根據(jù)程序計(jì)數(shù)器PC中的值從程序存儲(chǔ)器讀出現(xiàn)行指令,送到指令寄存器。
分析指令階段的任務(wù)是:將指令寄存器中的指令操作碼取出后進(jìn)行譯碼,分析其指令性質(zhì)。如指令要求操作數(shù),則尋找操作數(shù)地址。
計(jì)算機(jī)執(zhí)行程序的過程實(shí)際上就是逐條指令地重復(fù)上述操作過程,直至遇到停機(jī)指令可循環(huán)等待指令。
一般計(jì)算機(jī)進(jìn)行工作時(shí),首先要通過外部設(shè)備把程序和數(shù)據(jù)通過輸入接口電路和數(shù)據(jù)總線送入到存儲(chǔ)器,然后逐條取出執(zhí)行。但單片機(jī)中的程序一般事先我們都已通過寫入器固化在片內(nèi)或片外程序存儲(chǔ)器中。因而一開機(jī)即可執(zhí)行指令。
下面我們將舉個(gè)實(shí)例來說明指令的執(zhí)行過程:
開機(jī)時(shí),程序計(jì)算器PC變?yōu)?000H。然后單片機(jī)在時(shí)序電路作用下自動(dòng)進(jìn)入執(zhí)行程序過程。執(zhí)行過程實(shí)際上就是取出指令(取出存儲(chǔ)器中事先存放的指令階段)和執(zhí)行指令(分析和執(zhí)行指令)的循環(huán)過程。
例如執(zhí)行指令:MOV A,#0E0H,其機(jī)器碼為“74H E0H”,該指令的功能是把操作數(shù)E0H送入累加器,0000H單元中已存放74H,0001H單元中已存放E0H。當(dāng)單片機(jī)開始運(yùn)行時(shí),首先是進(jìn)入取指階段,其次序是:
1.程序計(jì)數(shù)器的內(nèi)容(這時(shí)是0000H)送到地址寄存器;
2.程序計(jì)數(shù)器的內(nèi)容自動(dòng)加1(變?yōu)?001H);
3.地址寄存器的內(nèi)容(0000H)通過內(nèi)部地址總線送到存儲(chǔ)器,以存儲(chǔ)器中地址譯碼電跟,使地址為0000H的單元被選中;
4.CPU使讀控制線有效;
5.在讀命令控制下被選中存儲(chǔ)器單元的內(nèi)容(此時(shí)應(yīng)為74H)送到內(nèi)部數(shù)據(jù)總線上,因?yàn)槭侨≈鸽A段,所以該內(nèi)容通過數(shù)據(jù)總線被送到指令寄存器。
至此,取指階段完成,進(jìn)入譯碼分析和執(zhí)行指令階段。
由于本次進(jìn)入指令寄存器中的內(nèi)容是74H(操作碼),以譯碼器譯碼后單片機(jī)就會(huì)知道該指令是要將一個(gè)數(shù)送到A累加器,而該數(shù)是在這個(gè)代碼的下一個(gè)存儲(chǔ)單元。所以,執(zhí)行該指令還必須把數(shù)據(jù)(E0H)從存儲(chǔ)器中取出送到CPU,即還要在存儲(chǔ)器中取第二個(gè)字節(jié)。其過程與取指階段很相似,只是此時(shí)PC已為0001H。指令譯碼器結(jié)合時(shí)序部件,產(chǎn)生74H操作碼的微操作系列,使數(shù)字E0H從0001H單元取出。
因?yàn)橹噶钍且蟀讶〉玫臄?shù)送到A累加器,所以取出的數(shù)字經(jīng)內(nèi)部數(shù)據(jù)總線進(jìn)入A累加器,而不是進(jìn)入指令寄存器。至此,一條指令的執(zhí)行完畢。單片機(jī)中PC=0002H,PC在CPU每次向存儲(chǔ)器取指或取數(shù)時(shí)自動(dòng)加1,單片機(jī)又進(jìn)入下一取指階段。這一過程一直重復(fù)下去,直至收到暫停指令或循環(huán)等待指令暫停。CPU就是這樣一條一條地執(zhí)行指令,完成所有規(guī)定的功能。
對(duì)于一款mcu來說,在性能描述的時(shí)候都會(huì)告訴sram,flash的容量大小,對(duì)于初學(xué)者來說,也不會(huì)去考慮和理會(huì)這些東西,拿到東西就只用。其實(shí)不然,這些量都是十分重要的,仔細(xì)想想,代碼為什么可以運(yùn)行,代碼量是多少,定義的int、short等等類型的變量究竟是怎么分配和存儲(chǔ)的,這些問題都和內(nèi)寸有關(guān)系。
首先單片機(jī)的內(nèi)存可以大小分為ram和rom,這里就不再解釋ram和rom的區(qū)別了,我們可以將其等效為flash和sram,其中根據(jù)flash和sram的定義可得,flash里面的數(shù)據(jù)掉電可保存,sram中的并不可以,但是sram的執(zhí)行速度要快于flash,可以將單片機(jī)的程序分為code(代碼存儲(chǔ)區(qū))、RO-data(只讀數(shù)據(jù)存儲(chǔ)區(qū))、RW-data(讀寫數(shù)據(jù)存儲(chǔ)區(qū))和ZI-data(零初始化數(shù)據(jù)區(qū))。在MDK編譯器下可以觀察到在代碼中這4個(gè)量的值,如下圖1所示:
圖1:
其中code和RO-data存儲(chǔ)在flash中,所以兩者之和為單片機(jī)中flash需要分配給它們的空間大?。ú⑶业扔诖a所生成的.bin文件大?。?,另外RW-data和ZI-data存儲(chǔ)在sram中,同樣兩者之和為單片機(jī)中sram需要分配給它們的空間大小。
另外,我們必然會(huì)想到棧區(qū)(stack)、堆區(qū)(heap)、全局區(qū)(靜態(tài)區(qū))(staTIc)、文字常量區(qū)和程序代碼區(qū)和上面所介紹的code、RO-data等的關(guān)系。
1、棧區(qū)(stack):由編譯器自動(dòng)分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。 這些值是可讀寫的,那么stack應(yīng)該被包含在RW-data(讀寫數(shù)據(jù)存儲(chǔ)區(qū)),也就是單片機(jī)的sram中。
2、堆區(qū)(heap):一般由程序員分配釋放, 若程序員不釋放,程序結(jié)束時(shí)可能由OS回收 ??梢岳斫猓@些也是被包含在單片機(jī)的sram中的。
3、全局區(qū)(靜態(tài)區(qū))(staTIc):全局變量和靜態(tài)變量的存儲(chǔ)是放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域, 未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域,程序結(jié)束后由系統(tǒng)釋放。這些數(shù)據(jù)也是可讀可寫的,和stack、heap一樣,被包含在sram中。
4、文字常量區(qū):常量字符串就是放在這里的。這些數(shù)據(jù)是只讀的,分配在RO-data(只讀數(shù)據(jù)存儲(chǔ)區(qū)),則被包含在flash中。
5、程序代碼區(qū):存放函數(shù)體的二進(jìn)制代碼,可以想象也是被包含在flash,因?yàn)閷?duì)于MCU來說,當(dāng)其重新上電,代碼還會(huì)繼續(xù)運(yùn)行,并不會(huì)消失,所以存儲(chǔ)在flash中。
綜上所述,MCU的內(nèi)存分配基本如此,其中并沒有提到存儲(chǔ)空間所對(duì)應(yīng)的flash和sram地址。
特別推薦
- 是否存在有關(guān) PCB 走線電感的經(jīng)驗(yàn)法則?
- 一文看懂電壓轉(zhuǎn)換的級(jí)聯(lián)和混合概念
- 第12講:三菱電機(jī)高壓SiC芯片技術(shù)
- 準(zhǔn) Z 源逆變器的設(shè)計(jì)
- 貿(mào)澤電子持續(xù)擴(kuò)充工業(yè)自動(dòng)化產(chǎn)品陣容
- 低功耗嵌入式設(shè)計(jì)簡介
- 如何通過基本描述找到需要的電容?
技術(shù)文章更多>>
- 充電器 IC 中的動(dòng)態(tài)電源路徑管理
- 了解負(fù)電壓的概念
- 單個(gè)IC也能構(gòu)建緊湊、高效的雙極性穩(wěn)壓器
- ESR 對(duì)陶瓷電容器選擇的影響(下)
- 基于射頻無線電力傳輸供電的無電池資產(chǎn)跟蹤模塊的先進(jìn)監(jiān)控系統(tǒng)
技術(shù)白皮書下載更多>>
- 車規(guī)與基于V2X的車輛協(xié)同主動(dòng)避撞技術(shù)展望
- 數(shù)字隔離助力新能源汽車安全隔離的新挑戰(zhàn)
- 汽車模塊拋負(fù)載的解決方案
- 車用連接器的安全創(chuàng)新應(yīng)用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
圖像傳感器
陀螺傳感器
萬用表
萬用表使用
網(wǎng)絡(luò)電容
微波
微波功率管
微波開關(guān)
微波連接器
微波器件
微波三極管
微波振蕩器
微電機(jī)
微調(diào)電容
微動(dòng)開關(guān)
微蜂窩
位置傳感器
溫度保險(xiǎn)絲
溫度傳感器
溫控開關(guān)
溫控可控硅
聞泰
穩(wěn)壓電源
穩(wěn)壓二極管
穩(wěn)壓管
無焊端子
無線充電
無線監(jiān)控
無源濾波器
五金工具