新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM9 MMU映射問題三

        ARM9 MMU映射問題三

        作者: 時間:2016-11-28 來源:網絡 收藏
        對“MMU映射地址一”里面的程序

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

        unsigned long *mmu_tlb_base = (unsigned long *)0x30000000;

        virtuladdr = 0xA0000000;
        physicaladdr = 0x56000000;

        *(mmu_tlb_base + (virtuladdr >> 20)) = (physicaladdr & 0xFFF00000) |

        MMU_SECDESC;
        我自己理解為:virtuladdr 為虛擬空間各段基地址,virtuladdr >> 20為段描述符的各段的位置,即第幾個段,(physicaladdr & 0xFFF00000)為物理空間各段的位置,也即第幾個段,則上面程序意思為把物理空間各段基地址放進虛擬空間的各段基地址,即索引。。。。

        但是有個問題,跟0x30000000有什么關系呢?

        因為上面的程序是要把也表放在SDRAM里,并且是從0x30000000處開始放起;第二就是為什么只有virtuladdr>>20,而沒有完整的virtual地址?因為地址是1M對齊,即后20位全為零,所以只看高12位就行,所以只有virtuladdr>>20也能起點作用;

        那么我有個問題,就是把也表放在那了,那它是什么時候去用他們呢,怎么用的他們呢,好像跟前兩篇博客講的不太一樣?

        哦,一樣,因為建立(一級)頁表(地址在0x30000000)后,首先要告訴MMU頁表位于0x30000000處;

        第二,當CPU發出一個虛擬地址時,要被MMU分成兩部分,第一部分就是段基址,第二部分是地址偏移量,然后MMU去頁表地址找頁表,然后自動通過一系列轉換規則,來找到對應物理地址。



        關鍵詞: ARM9MMU映

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 许昌县| 镇原县| 吉隆县| 安达市| 绥德县| 明溪县| 定边县| 禄劝| 巴林左旗| 敖汉旗| 顺义区| 房产| 荃湾区| 岳普湖县| 阳信县| 保靖县| 广德县| 蛟河市| 顺平县| 贺兰县| 文登市| 长春市| 望谟县| 新安县| 固阳县| 德格县| 浙江省| 革吉县| 万年县| 海兴县| 中牟县| 玛沁县| 嵊州市| 仪陇县| 迁西县| 文安县| 政和县| 资溪县| 县级市| 湟中县| 台湾省|