單片機(jī)執(zhí)行指令過(guò)程詳解
單片機(jī)如何執(zhí)行代碼命令,單片MCU內(nèi)存如何分配?
發(fā)布時(shí)間:2017-06-30 責(zé)任編輯:susan
【導(dǎo)讀】單片機(jī)執(zhí)行程序的過(guò)程,實(shí)際上就是執(zhí)行我們所編制程序的過(guò)程。即逐條指令的過(guò)程。計(jì)算機(jī)每執(zhí)行一條指令都可分為三個(gè)階段進(jìn)行。即取指令-----分析指令-----執(zhí)行指令。
單片機(jī)執(zhí)行指令過(guò)程詳解
取指令的任務(wù)是:根據(jù)程序計(jì)數(shù)器PC中的值從程序存儲(chǔ)器讀出現(xiàn)行指令,送到指令寄存器。
分析指令階段的任務(wù)是:將指令寄存器中的指令操作碼取出后進(jìn)行譯碼,分析其指令性質(zhì)。如指令要求操作數(shù),則尋找操作數(shù)地址。
計(jì)算機(jī)執(zhí)行程序的過(guò)程實(shí)際上就是逐條指令地重復(fù)上述操作過(guò)程,直至遇到停機(jī)指令可循環(huán)等待指令。
一般計(jì)算機(jī)進(jìn)行工作時(shí),首先要通過(guò)外部設(shè)備把程序和數(shù)據(jù)通過(guò)輸入接口電路和數(shù)據(jù)總線送入到存儲(chǔ)器,然后逐條取出執(zhí)行。但單片機(jī)中的程序一般事先我們都已通過(guò)寫(xiě)入器固化在片內(nèi)或片外程序存儲(chǔ)器中。因而一開(kāi)機(jī)即可執(zhí)行指令。
下面我們將舉個(gè)實(shí)例來(lái)說(shuō)明指令的執(zhí)行過(guò)程:
開(kāi)機(jī)時(shí),程序計(jì)算器PC變?yōu)?000H。然后單片機(jī)在時(shí)序電路作用下自動(dòng)進(jìn)入執(zhí)行程序過(guò)程。執(zhí)行過(guò)程實(shí)際上就是取出指令(取出存儲(chǔ)器中事先存放的指令階段)和執(zhí)行指令(分析和執(zhí)行指令)的循環(huán)過(guò)程。
例如執(zhí)行指令:MOV A,#0E0H,其機(jī)器碼為“74H E0H”,該指令的功能是把操作數(shù)E0H送入累加器,0000H單元中已存放74H,0001H單元中已存放E0H。當(dāng)單片機(jī)開(kāi)始運(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)通過(guò)內(nèi)部地址總線送到存儲(chǔ)器,以存儲(chǔ)器中地址譯碼電跟,使地址為0000H的單元被選中;
4.CPU使讀控制線有效;
5.在讀命令控制下被選中存儲(chǔ)器單元的內(nèi)容(此時(shí)應(yīng)為74H)送到內(nèi)部數(shù)據(jù)總線上,因?yàn)槭侨≈鸽A段,所以該內(nèi)容通過(guò)數(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é)。其過(guò)程與取指階段很相似,只是此時(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)入下一取指階段。這一過(guò)程一直重復(fù)下去,直至收到暫停指令或循環(huán)等待指令暫停。CPU就是這樣一條一條地執(zhí)行指令,完成所有規(guī)定的功能。
對(duì)于一款mcu來(lái)說(shuō),在性能描述的時(shí)候都會(huì)告訴sram,flash的容量大小,對(duì)于初學(xué)者來(lái)說(shuō),也不會(huì)去考慮和理會(huì)這些東西,拿到東西就只用。其實(shí)不然,這些量都是十分重要的,仔細(xì)想想,代碼為什么可以運(yùn)行,代碼量是多少,定義的int、short等等類型的變量究竟是怎么分配和存儲(chǔ)的,這些問(wèn)題都和內(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(讀寫(xiě)數(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)中的棧。 這些值是可讀寫(xiě)的,那么stack應(yīng)該被包含在RW-data(讀寫(xiě)數(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ù)也是可讀可寫(xiě)的,和stack、heap一樣,被包含在sram中。
4、文字常量區(qū):常量字符串就是放在這里的。這些數(shù)據(jù)是只讀的,分配在RO-data(只讀數(shù)據(jù)存儲(chǔ)區(qū)),則被包含在flash中。
5、程序代碼區(qū):存放函數(shù)體的二進(jìn)制代碼,可以想象也是被包含在flash,因?yàn)閷?duì)于MCU來(lái)說(shuō),當(dāng)其重新上電,代碼還會(huì)繼續(xù)運(yùn)行,并不會(huì)消失,所以存儲(chǔ)在flash中。
綜上所述,MCU的內(nèi)存分配基本如此,其中并沒(méi)有提到存儲(chǔ)空間所對(duì)應(yīng)的flash和sram地址。
特別推薦
- AMTS 2025展位預(yù)訂正式開(kāi)啟——體驗(yàn)科技驅(qū)動(dòng)的未來(lái)汽車(chē)世界,共迎AMTS 20周年!
- 貿(mào)澤電子攜手安森美和Würth Elektronik推出新一代太陽(yáng)能和儲(chǔ)能解決方案
- 功率器件熱設(shè)計(jì)基礎(chǔ)(六)——瞬態(tài)熱測(cè)量
- 貿(mào)澤開(kāi)售Nordic Semiconductor nRF9151-DK開(kāi)發(fā)套件
- TDK推出用于可穿戴設(shè)備的薄膜功率電感器
- 日清紡微電子GNSS兩款新的射頻低噪聲放大器 (LNA) 進(jìn)入量產(chǎn)
- 中微半導(dǎo)推出高性價(jià)比觸控 MCU-CMS79FT72xB系列
技術(shù)文章更多>>
- 意法半導(dǎo)體推出首款超低功耗生物傳感器,成為眾多新型應(yīng)用的核心所在
- 是否存在有關(guān) PCB 走線電感的經(jīng)驗(yàn)法則?
- 智能電池傳感器的兩大關(guān)鍵部件: 車(chē)規(guī)級(jí)分流器以及匹配的評(píng)估板
- 功率器件熱設(shè)計(jì)基礎(chǔ)(八)——利用瞬態(tài)熱阻計(jì)算二極管浪涌電流
- AHTE 2025展位預(yù)訂正式開(kāi)啟——促進(jìn)新技術(shù)新理念應(yīng)用,共探多行業(yè)柔性解決方案
技術(shù)白皮書(shū)下載更多>>
- 車(chē)規(guī)與基于V2X的車(chē)輛協(xié)同主動(dòng)避撞技術(shù)展望
- 數(shù)字隔離助力新能源汽車(chē)安全隔離的新挑戰(zhàn)
- 汽車(chē)模塊拋負(fù)載的解決方案
- 車(chē)用連接器的安全創(chuàng)新應(yīng)用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門(mén)搜索
生產(chǎn)測(cè)試
聲表諧振器
聲傳感器
濕度傳感器
石英機(jī)械表
石英石危害
時(shí)間繼電器
時(shí)鐘IC
世強(qiáng)電訊
示波器
視頻IC
視頻監(jiān)控
收發(fā)器
手機(jī)開(kāi)發(fā)
受話器
數(shù)字家庭
數(shù)字家庭
數(shù)字鎖相環(huán)
雙向可控硅
水泥電阻
絲印設(shè)備
伺服電機(jī)
速度傳感器
鎖相環(huán)
胎壓監(jiān)測(cè)
太陽(yáng)能
太陽(yáng)能電池
泰科源
鉭電容
碳膜電位器