<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 關(guān)于A(yíng)RM芯片地址重映射的形象解釋

關(guān)于A(yíng)RM芯片地址重映射的形象解釋

作者: 時(shí)間:2016-11-25 來(lái)源:網(wǎng)絡(luò ) 收藏
ARM芯片地址重映射映射就是一一對應的意思。重映射就是重新分配這種一一對應的關(guān)系。我們可以把存儲器看成一個(gè)具有輸出和輸入口的黑盒子。如下圖所示,輸入量是地址,輸出的是對應地址上存儲的數據。當然這個(gè)黑盒子是由很復雜的半導體電路具現的,具體的實(shí)現的方式我們現在不管。存儲單位一般是字節。這樣,每個(gè)字節的存儲單元對應一個(gè)地址,當一個(gè)合法地址從存儲器的地址總線(xiàn)輸入后,該地址對應的存儲單元上存儲的數據就會(huì )出現在數據總線(xiàn)上面。

本文引用地址:http://dyxdggzs.com/article/201611/321548.htm
圖1
普通的單片機把可執行代碼和數據存放到存儲器中。單片機中的CPU從儲器中取指令代碼和數據。其中存儲器中每個(gè)物理存儲單元與其地址是一一對應而且是不可變的。如下圖,CPU讀取0x00000000地址上存儲單元的過(guò)程。


圖2
ARM比較復雜。ARM芯片與普通單片機在存儲器地址方面的不同在于:ARM芯片中有些物理存儲單元的地址可以根據設置變換。就是說(shuō)一個(gè)物理存儲單元現在對應一個(gè)地址,經(jīng)過(guò)設置以后,這個(gè)存儲單元就對應了另外一個(gè)地址了。圖3是隨意舉了個(gè)例子(不要與ARM芯片對應),旨在說(shuō)明地址重映射的過(guò)程。圖3表示把0x00000000地址上的存儲單元映射到新的地址0x00000007上。CPU存取0x00000007就是存取0x00000000上的物理存儲單元。

圖3
下面圖4,圖5是對ARM芯片的兩種地址重映射方式的圖示。假設我們的應用程序存放在外擴FLASH當中,那么應用程序的異常向量表就存放在0x80000000起始的64個(gè)(其中有32個(gè)存放異常向量)物理存儲單元中。但是ARM核發(fā)生異常(中斷)后是從0x00000000~0x0000003F地址范圍取異常向量的。所以要把0x80000000~0x8000003F范圍內的存儲單元重新映射到0x00000000~0x0000003F地址范圍上。以后CPU存取0x00000000~0x0000003F地址就是存取0x80000000~0x8000003F范圍內的存儲單元。圖4只顯示出第一個(gè)異常向量的地址重映射,整個(gè)異常向量表的地址重映射等同這個(gè)過(guò)程。

圖4

圖5
圖5描述示了ARM芯片的另外一種映射方式。這個(gè)映射可以由用戶(hù)決定采用還是不采用(相關(guān)代碼在工程文件的startup.s中,這個(gè)文件是第三方提供,用戶(hù)可以修改)。這個(gè)映射主要是為了提高應用程序異常相應得速度。當我們把應用程序存放在片內FLASH的時(shí)候,異常向量表存放在0x00000000~0x0000003F存儲單元內。每次發(fā)生異常,CPU從0x00000000~0x0000003F地址上取異常向量。但是對RAM的存取速度遠高于對FLASH的存取速度,所以為了提高異常相應速度我們采取以下做法:
Step1:
先把0x00000000~0x0000003F(FLASH)存儲單元內的異常向量表復制到0x40000000~0x4000003F(片內RAM的最低端64個(gè)字節的存儲單元)范圍內存儲單元中。
Step2:
把0x40000000~0x4000003F范圍內存儲單元地址重新映射到0x00000000~0x0000003F地址范圍。這樣做了以后,當異常發(fā)生的時(shí)候,CPU取異常向量就是從RAM區中的異常向量表中區,速度快了。比如復位中斷發(fā)生,CPU從地址0x00000000取指令,但此時(shí)由于已經(jīng)過(guò)地址重新映射,這個(gè)0x00000000被地址轉換器轉換成0x40000000,CPU實(shí)際上是取的RAM區中0x400000000這個(gè)存儲單元內的指令(異常向量)。當然用戶(hù)可以不進(jìn)行這種映射。片內FLASH中0x00000000~0x0000003F存儲單元具有一模一樣的異常向量表。只不過(guò)不進(jìn)行這種


關(guān)鍵詞: ARM芯片地址重映

評論


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

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>