您的位置 首页 编程

ARM9 MMU映射问题三

对MMU映射地址一里面的程序unsignedlong*mmu_tlb_base=(unsignedlong*)0x30000000;virtuladdr=0xA0000000;physicaladdr

对“MMU映射地址一”里边的程序

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去页表地址找页表,然后主动经过一系列转换规则,来找到对应物理地址。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/biancheng/255932.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部