*(mmu_tlb_base + (virtuladdr >> 20)) = (physicaladdr & 0xFFF00000) |
我自己理解为:
但是有个问题,跟0x30000000有什么关系呢?
因为上面的程序是要把也表放在SDRAM里,并且是从0x30000000处开始放起;第二就是为什么只有virtuladdr>>20,而没有完整的virtual地址?因为地址是1M对齐,即后20位全为零,所以只看高12位就行,所以只有virtuladdr>>20也能起点作用;
那么我有个问题,就是把也表放在那了,那它是什么时候去用他们呢,怎么用的他们呢,好像跟前两篇博客讲的不太一样?
哦,一样,因为建立(一级)页表(地址在0x30000000)后,首先要告诉MMU页表位于0x30000000处;
第二,当CPU发出一个虚拟地址时,要被MMU分成两部分,第一部分就是段基址,第二部分是地址偏移量,然后MMU去页表地址找页表,然后自动通过一系列转换规则,来找到对应物理地址。
关键字:ARM9 MMU映射『本文转载自网络,版权归原作者所有,如有侵权请联系删除』