在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM處理器架構(gòu)處理器的工作狀態(tài)

            ARM處理器架構(gòu)處理器的工作狀態(tài)

            作者: 時(shí)間:2016-11-09 來(lái)源:網(wǎng)絡(luò) 收藏
            之前,一直都在看arm的驅(qū)動(dòng)開(kāi)發(fā),最近看了ucos,同時(shí)也開(kāi)始對(duì)arm的架構(gòu)有了更深入一點(diǎn)的了解。大學(xué)學(xué)微機(jī)原理的時(shí)候?qū)W的是x86的架構(gòu),它和arm還是有挺多區(qū)別的。下面就整理一些自己的所學(xué)和在網(wǎng)上轉(zhuǎn)載的關(guān)于arm架構(gòu)的內(nèi)容。有一本很好的講arm架構(gòu)的書(shū):《ARM System Developers Guide》。

            從編程人員的視角來(lái)看,arm核是由數(shù)據(jù)總線(xiàn)連接的功能單元組成,如下圖所示:

            本文引用地址:http://www.biyoush.com/article/201611/317948.htm

            數(shù)據(jù)通過(guò)數(shù)據(jù)總線(xiàn)流向處理器核心,這里的數(shù)據(jù)可以是將要執(zhí)行的指令,也可以是數(shù)據(jù)項(xiàng).上面的圖是Von Neumann體系的arm核,數(shù)據(jù)項(xiàng)和指令共用同一總線(xiàn).而哈佛結(jié)構(gòu)體系的arm核就會(huì)用兩個(gè)不同的總線(xiàn).就像所有的RISC處理器,arm采用load-store體系結(jié)構(gòu).也就是說(shuō)它含有兩條不同的指令類(lèi)型來(lái)出入處理器.load指令將數(shù)據(jù)從內(nèi)存拷貝到寄存器,store指令是將數(shù)據(jù)從寄存器拷貝到內(nèi)存.沒(méi)有直接操作內(nèi)存中數(shù)據(jù)的數(shù)據(jù)處理指令.數(shù)據(jù)的處理離不開(kāi)寄存器.

            ARM指令一般有兩個(gè)源寄存器,Rn和Rm,和一個(gè)目的寄存器,Rd. ARM的一個(gè)重要特性是Rm可以在送入ALU之前被桶型移位器做預(yù)處理,這樣就會(huì)有很多形式的表達(dá)式和尋址方式. 后面再寫(xiě)博客記錄一下arm中的指令集。

            下面介紹ARM處理器的幾個(gè)關(guān)鍵分量:寄存器,當(dāng)前程序狀態(tài)寄存器和流水線(xiàn)

            一、寄存器。

            arm核一共有37個(gè)寄存器,有7種工作模式。其中在任一種工作模式下,可見(jiàn)的寄存器通常有18個(gè)(在user/system模式下可見(jiàn)的是17個(gè))。另外,某幾個(gè)寄存器(sp、lr、spsr)在不同的模式下對(duì)應(yīng)的是不同的寄存器,所以總數(shù)加起來(lái)共有37個(gè)。所有的寄存器都是32bit大小.

            18個(gè)活動(dòng)的寄存器包括:16個(gè)數(shù)據(jù)寄存器和2個(gè)程序狀態(tài)寄存器.

            (1)數(shù)據(jù)寄存器由r0--r15表示. 其中r0-r12是通用寄存器,r13-r15是三個(gè)特殊的寄存器。

            r13通常用作棧指針(sp),存儲(chǔ)當(dāng)前處理器工作模式下的棧頂;

            r14被稱(chēng)作鏈接寄存器(lr),當(dāng)發(fā)生函數(shù)調(diào)用時(shí)存放當(dāng)前的pc指針,作為子程序的返回地址;

            r15被稱(chēng)作程序計(jì)數(shù)器(pc),保存被處理器預(yù)取的下一條指令的地址.

            這三個(gè)寄存器,在寫(xiě)匯編語(yǔ)句的時(shí)候都不用r13這種來(lái)表示,都是用sp、lr、pc來(lái)表示的。

            (2)兩個(gè)程序狀態(tài)寄存器:cpsr和spsr. 處理器的當(dāng)前工作模式?jīng)Q定了哪些寄存器是可見(jiàn)的.

            cpsr:當(dāng)前程序狀態(tài)寄存器。ARM核使用cpsr來(lái)顯示和控制內(nèi)部的操作.通用程序狀態(tài)寄存器的內(nèi)部如下:


            cpsr分為四個(gè)域,每個(gè)域有8位的寬度:flags,status,extension和control.control域包含處理器模式和狀態(tài)以及中斷屏蔽位.flags域包含condition flags.處理器模式?jīng)Q定了當(dāng)前哪些寄存器是可用的以及cpsr本身的訪問(wèn)權(quán)限.

            當(dāng)發(fā)生異常時(shí),arm會(huì)自動(dòng)將cpsr保存到spsr寄存器中。

            二、 處理器模式

            處理器模式分為特權(quán)模式和非特權(quán)模式:特權(quán)模式對(duì)cpsr有完全的讀寫(xiě)控制.而非特權(quán)模式只能讀cpsr的control域但是仍可以讀寫(xiě)condition flags.一共有7種處理器模式:六種特權(quán)模式(abort,fiq,irq,svc,system和undefined)和一種非特權(quán)模式(user).

            abort:當(dāng)試圖訪問(wèn)內(nèi)存失敗時(shí)處理器會(huì)進(jìn)入abort模式;

            fiq和irq對(duì)應(yīng)ARM處理器的兩種中斷級(jí)別, irq是普通的中斷模式,fiq是快速中斷模式。

            svc是系統(tǒng)reset后進(jìn)入的默認(rèn)模式,也是os kernel工作的模式;

            system模式是user模式的特殊版本,它有對(duì)cpsr的讀寫(xiě)控制.

            undefined模式在處理器遇到未定以的指令或者不支持的操作時(shí)使用.

            user模式在應(yīng)用程序下使用.

            在不同的模式下,有不同的Banked registers。所謂的banked register 就是說(shuō) 這個(gè)寄存器是該模式所獨(dú)有的,不與其他模式共享。


            除了user模式,其它模式都可以通過(guò)直接寫(xiě)cpsr的模式位來(lái)改變處理器模式.當(dāng)然,在異常或者中斷到來(lái)時(shí),硬件會(huì)自動(dòng)切換模式.

            下列異常和中斷會(huì)引起模式切換:reset,irq,fiq,swi,data abort,prefetch abort和undefined instruction.

            三、cpsr寄存器。

            下面接著講cpsr寄存器。處理器模式對(duì)應(yīng)的cpsr寄存器:


            需要注意的是:通過(guò)直接寫(xiě)cpsr來(lái)改變模式的方法不會(huì)將cpsr拷貝到spsr.只有在異?;蛑袛喟l(fā)生時(shí)cpsr的值才會(huì)保存到spsr。

            當(dāng)ARM核上電時(shí),處于svc特權(quán)模式.從特權(quán)模式開(kāi)始是有用的:初始化代碼完全控制cpsr來(lái)建立其他模式的堆棧.

            cpsr中的bit T是表明指令簇用的是ARM指令集還是thumb指令集.T為1表示thumb指令集,T為0表示ARM指令集.

            ARM指令集和thumb指令集的特性:


            中斷屏蔽位:中斷屏蔽位用來(lái)屏蔽處理器的特殊中斷請(qǐng)求.在ARM核中有兩種級(jí)別的中斷請(qǐng)求:irq和fiq.

            cpsr中的中斷屏蔽位是第7位和第6位(I和F),當(dāng)I或F設(shè)為1時(shí)irq或fiq就被屏蔽了.

            condtion flags:condition flags可以被比較操作和帶S后綴的ALU操作來(lái)更新.

            四、異常 中斷和向量表

            當(dāng)異常發(fā)生時(shí),處理器會(huì)將pc指向一個(gè)特殊的內(nèi)存地址.該地址所在的地址范圍稱(chēng)為向量表.向量表的入口是跳轉(zhuǎn)指令,跳轉(zhuǎn)到專(zhuān)門(mén)處理某個(gè)異常或中斷的子程序.

            存儲(chǔ)器映射地址0x00000000是為向量表預(yù)留的.在某些處理器中向量表可以放在更高的地址,從0xffff0000開(kāi)始.linux等操作系統(tǒng)可以利用這個(gè)特性.

            當(dāng)異常發(fā)生時(shí),處理器掛起正常的處理然后從向量表中加載指令.每個(gè)向量表的入口都包含指向特殊處理例程的跳轉(zhuǎn)指令.

            reset向量是處理器上電后執(zhí)行的第一條指令,這條指令跳轉(zhuǎn)到初始化代碼處.

            undefined instruction向量是當(dāng)處理器不能對(duì)指令譯碼時(shí)使用的.

            software interrupt向量執(zhí)行SWI指令時(shí)使用的.SWI可以用來(lái)系統(tǒng)調(diào)用的實(shí)現(xiàn).

            prefetch abort向量發(fā)生在當(dāng)沒(méi)有訪問(wèn)權(quán)限的條件下試圖獲取該地址的指令時(shí),異常發(fā)生在譯碼階段.

            data abort向量與prefetch abort類(lèi)似,只不過(guò)是訪問(wèn)數(shù)據(jù)發(fā)生的異常.

            interrupt request向量被外部硬件用來(lái)中斷處理器的正常執(zhí)行.只有在cpsr的相應(yīng)位為0時(shí)才能發(fā)生.

            fast interrupt request向量與irq類(lèi)似,是為要求更短的中斷響應(yīng)時(shí)間的硬件保留的.只有在cpsr的相應(yīng)位為0時(shí)才能發(fā)生.

            五、流水線(xiàn)

            RISC處理器用流水線(xiàn)機(jī)制來(lái)執(zhí)行指令.ARM流水線(xiàn)中的指令只有在完全通過(guò)執(zhí)行階段才被處理.

            上面這張圖標(biāo)明了流水線(xiàn)的使用和程序計(jì)數(shù)器pc.在執(zhí)行階段,pc總是指向該指令地址加上8字節(jié).也就是說(shuō)pc總是指向當(dāng)前指令的下下條指令.當(dāng)用pc來(lái)計(jì)算

            相對(duì)偏移量時(shí)這點(diǎn)是很重要的,并且它也是所有流水線(xiàn)的特征.

            六、條件執(zhí)行:

            條件執(zhí)行控制指令是否被ARM核執(zhí)行.處理器會(huì)比較指令的條件屬性和cpsr中的condition flags,如果匹配,該指令執(zhí)行;否則該指令被忽略.



            評(píng)論


            技術(shù)專(zhuān)區(qū)

            關(guān)閉