<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > ARM存儲器結(jié)構(gòu)、映射以及重新映射

          ARM存儲器結(jié)構(gòu)、映射以及重新映射

          作者: 時間:2016-11-11 來源:網(wǎng)絡(luò) 收藏
          ARM存儲器結(jié)構(gòu)

          ARM存儲器:片內(nèi)Flash、片內(nèi)靜態(tài)RAM、片外存儲器

          本文引用地址:http://www.ex-cimer.com/article/201611/316720.htm

          存儲器映射(Memory Map)

          映射就是一一對應(yīng)的意思。重映射就是重新分配這種一一對應(yīng)的關(guān)系。

          我們可以把存儲器看成一個具有輸出和輸入口的黑盒子。輸入量是地址,輸出的是對應(yīng)地址上存儲的數(shù)據(jù)。當(dāng)然這個黑盒子是由很復(fù)雜的半導(dǎo)體電路實現(xiàn)的,具體的實現(xiàn)的方式我們現(xiàn)在不管。存儲單位一般是字節(jié)。這樣,每個字節(jié)的存儲單元對應(yīng)一個地址,當(dāng)一個合法地址從存儲器的地址總線輸入后,該地址對應(yīng)的存儲單元上存儲的數(shù)據(jù)就會出現(xiàn)在數(shù)據(jù)總線上面。

          普通的單片機把可執(zhí)行代碼和數(shù)據(jù)存放到存儲器中。單片機中的CPU從儲器中取指令代碼和數(shù)據(jù)。其中存儲器中每個物理存儲單元與其地址是一一對應(yīng)而且是不可變的。

          而ARM比較復(fù)雜,ARM芯片與普通單片機在存儲器地址方面的不同在于:ARM芯片中有些物理存儲單元的地址可以根據(jù)設(shè)置變換。就是說一個物理存儲單元現(xiàn)在對應(yīng)一個地址,經(jīng)過設(shè)置以后,這個存儲單元就對應(yīng)了另外一個地址了(這就是后面要說的重新映射)。例如將0x00000000地址上的存儲單元映射到新的地址0x00000007上。CPU存取0x00000007就是存取0x00000000上的物理存儲單元。(隨便舉的例子為了說明道理,沒有實際意義)

          存儲器重新映射(Memory Re-Map)

          存儲器重新映射是將復(fù)位后用戶可見的存儲器中部分區(qū)域,再次映射到其他的地址上。

          存儲器重新映射包括兩個方面:1、Boot Block重新映射(關(guān)于Boot Block的相關(guān)內(nèi)容看我博客中的另一篇文章)。2、異常(中斷)向量重新映射

          Boot Block重新映射:本來Boot Block在片內(nèi)Flash的最高8KB,但是為了與將來期間相兼容,生產(chǎn)商為了產(chǎn)品的升級換代,在新型芯片中增加內(nèi)部Flash容量時,不至于因為位于Flash高端的Boot Block的地址發(fā)生了變化而改寫其代碼,整個Boot Block都要被重新映射到內(nèi)部存儲器空間的頂部,即片內(nèi)RAM的最高8KB。(地址為:0x7FFFE000~0x7FFFFFFF)

          異常(中斷)向量重新映射:本來中斷向量表在片內(nèi)Flash的最低32字節(jié),重新映射時要把這32個字節(jié)再加上其后的32個字節(jié)(后面這32個字節(jié)是存放快速中斷IRQ的服務(wù)程序的)共64個字節(jié)重新映射(地址為:0x00000000~0x0000003F)重新映射到的地方有三個:內(nèi)部Flash高端的64字節(jié)空間、內(nèi)部RAM低端的64字節(jié)空間和外部RAM低端的64字節(jié)空間,再加上原來的內(nèi)部Flash低端的64字節(jié)空間,異常向量一共可以在四個地方出現(xiàn)。為了對存儲器映射進行控制,處理器設(shè)置了存儲器映射控制寄存器MEMMAP,其控制格式如下圖所示:

          注:1、當(dāng)MEMMAP[1:0]=00時是映射到內(nèi)部Flash高端,同內(nèi)部Flash高端的Boot Block一起又被映射到了內(nèi)部RAM高端

          2、當(dāng)MEMMAP[1:0]=01時相當(dāng)于沒有重新映射,異常向量表在內(nèi)部Flash低端

          3、當(dāng)MEMMAP[1:0]=10時映射到了內(nèi)部RAM的低端

          4、當(dāng)MEMMAP[1:0]=11時映射到了外部RAM低端

          小結(jié):1、至于異常向量表為什么要重新映射,而且有那么多種重新映射方法,還不清楚為什么,應(yīng)該都是為了程序運行的更快吧。

          2、其實關(guān)于ARM的存儲器結(jié)構(gòu)和映射問題,不研究那么清楚也可以,但是弄明白其中結(jié)構(gòu)對以后的使用ARM會有很大好處。關(guān)于這一部分以及引導(dǎo)塊(Boot Block)部分,北京航空航天大學(xué)出版社出版的由任哲等編著的《ARM體系結(jié)構(gòu)及其嵌入式處理器》講的比較清楚。



          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();