第三十五天 Tiny4412驅動開發之配置MMU

2021-07-13 07:18:24 字數 1684 閱讀 3024

mmu表示記憶體管理單元,負責虛擬記憶體對映到物理記憶體。

虛擬位址對映到實體地址的關鍵是構建對映表。mmu就是利用對映**將虛擬位址轉換成實體地址。虛擬位址在32系統中為4g,位址佔4位元組,如果對映**中虛擬位址和實體地址是一一對應的關係,一條記錄就佔8位元組,那麼對映表就要32g.這明顯是不合理的。

於是通過二級對映解決這個問題。位址共32位,把前12位作為基位址,後20位作為偏移量,將虛擬位址和實體地址作為的前12位一一對應,12位就是2的12次方為4k。 一條記錄8位元組,那麼對映**就只有32k,

下圖左邊為虛擬位址,右邊為實體地址。比如有個虛擬位址為0x00123456,基位址為001 偏移量為23456.先通過對映表找到對於的實體地址為0x60100000,然後加上偏移量就是實際的位址0x60123456。

0x70000000就表示對映表儲存的位置,對映**的內容就只有實體地址。虛擬位址就在**的位址中體現。這樣的話,記憶體對映表又縮減了一半,4g的虛擬位址只要16k的**就能全部對映。

先看tiny4412的記憶體表:

從表中可以知道0x30000000位址是沒有內容的。現在要開啟mmu,將0x30000000記憶體對映到0x50000000位址去,如果能夠訪問到0x3000000,就表示對映成功。**如下:

可以訪問0x32300000的內容,說明mmu開啟成功。

下面是關於彙編**中開啟mmu的介紹。先是在arm開發手冊中查詢關於mmu控制的相關資訊,下圖是mmu配置的內容

上面**16行就是mmu的配置,將第一位置1表示 開啟mmu,第三位置一表示開啟寫快取。

未完待續。。。(等水平提公升了在繼續寫,剩下的彙編**實在看不懂)

第三十五講 LINQ 語法(二)

不廢話看例項 using system using system.collections.generic using system.linq using system.text namespace con35 liststus new list 1001 new student 2,王小三 new ...

日本語 第三十五課

第三十五課 明日雨 降 大會 中止 日本 帰 中國語 勉強 続 今年 夏休 日 會議室 李 大學 卒業 外國 働 馬 元気 何 聞 何 言 李 資料 少 待 大人 乗 子供 乗 語法 小句1 小句2 用於表示假定條件 小句1 為過去簡體小句 動詞和形容詞 將 形容動詞和名詞 明日雨 降 大會 中止 ...

LeetCode第三十五題 Python實現

title leetcode no.35 categories tags 給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。你可以假設陣列中無重複元素。示例 1 輸入 1,3,5,6 5 輸出 2 示例 2 輸入 1,3,5,6 ...