新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM地址重映射的通俗解釋

        ARM地址重映射的通俗解釋

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

        本文引用地址:http://www.104case.com/article/201611/317736.htm

        圖1
        普通的單片機把可執行代碼和數據存放到存儲器中。單片機中的CPU從儲器中取指令代碼和數據。其中存儲器中每個物理存儲單元與其地址是一一對應而且是不可變的。如下圖,CPU讀取0x00000000地址上存儲單元的過程。

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

        圖5


        圖5描述示了ARM芯片的另外一種映射方式。這個映射可以由用戶決定采用還是不采用(相關代碼在工程文件的startup.s中,這個文件是第三方提供,用戶可以修改)。這個映射主要是為了提高應用程序異常相應得速度。當我們把應用程序存放在片內FLASH的時候,異常向量表存放在0x00000000~0x0000003F存儲單元內。每次發生異常,CPU從0x00000000~0x0000003F地址上取異常向量。但是對RAM的存取速度遠高于對FLASH的存取速度,所以為了提高異常相應速度我們采取以下做法:
        Step1:
        先把0x00000000~0x0000003F(FLASH)存儲單元內的異常向量表復制到0x40000000~0x4000003F(片內RAM的最低端64個字節的存儲單元)范圍內存儲單元中。
        Step2:
        把0x40000000~0x4000003F范圍內存儲單元地址重新映射到0x00000000~0x0000003F地址范圍。這樣做了以后,當異常發生的時候,CPU取異常向量就是從RAM區中的異常向量表中區,速度快了。比如復位中斷發生,CPU從地址0x00000000取指令,但此時由于已經過地址重新映射,這個0x00000000被地址轉換器轉換成0x40000000,CPU實際上是取的RAM區中0x400000000這個存儲單元內的指令(異常向量)。當然用戶可以不進行這種映射。片內FLASH中0x00000000~0x0000003F存儲單元具有一模一樣的異常向量表。只不過不進行這種處理,異常相應速度慢一點。但是這種速度上的差別很多情況下是不必要在意的。
        圖中的地址轉換器受控制寄存器MENMAP的控制,用戶可以設置MENMAP實現對地址重映射的控制。這個地址轉換器顯然是通過內部硬件電路實現的。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 长治县| 昌乐县| 云南省| 黑龙江省| 龙岩市| 南京市| 光泽县| 武定县| 安陆市| 留坝县| 阿拉尔市| 额尔古纳市| 开阳县| 盐源县| 古蔺县| 陕西省| 宁南县| 枝江市| 阜阳市| 东乌珠穆沁旗| 武山县| 格尔木市| 北辰区| 遂溪县| 图木舒克市| 射阳县| 河源市| 延寿县| 江门市| 镶黄旗| 三穗县| 岳普湖县| 汉川市| 泸水县| 黔南| 东光县| 和龙市| 鸡西市| 含山县| 玉环县| 松江区|