娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

內存管理單元MMU,負責虛擬地址到物理地址的轉換,并提供硬件進制的內存訪問權限檢查,操作系統通過MMU可以實現各個用戶進程自己獨立的地址空間,


通過內存權限的檢查可以保證每個進程使用的內存不被其他進程破壞。具體操作系統怎么運用MMU的就比較復雜了,我們只看看最原始的裸機程序怎么配置寄存器操作MMU建立虛擬地址到物理地址映射,了解其原理。


ARM提供4種映射長度:段(1M),大頁(64K),小頁(4K),極小頁(1k)
按1M的長度映射就是說一段1M的虛擬地址映射一段1M的物理地址,這1M的地址訪問權限是一樣的,明顯如果按1k,4k映射,內存訪問權限將控制的更精細,當然也更復雜。


我們看看1M的精度怎么映射,假設要映射虛擬地址范圍(0x0~0x4000000)到物理地址范圍(0xB0000000~0xB4000000), 每0x100000的地址長度是1M,那么范圍就是64M.
這個映射是以1M對齊的,就是要已(0x0~0x100000)這樣映射,而不能(0x1~0x100001),可以看出虛擬地址和物理地址低20位變化是一樣的,這樣我們只需要一個4byte的內存空間存放每1M的虛擬地址右移20后與物理地址右移20位建立映射,總共4*64byte。代碼大致如下:


unsigned long va = 0x0;
unsigned long pa = 0xB0000000;
while(va<0x4000000){
    ttb[va >> 20] = pa | 2;
     va += 0x100000;
     pa += 0x100000;
}


這樣給定一個虛擬地址0x3000400,右移20作為ttb的index就可以找到其后12位對應的物理地址0xB3000000+0x400就是物理地址,當然這樣運算是mmu自己做的,我們只需要把ttb的內存地址附給mmu的寄存器。上面的過程叫建立頁表,頁表建完后,啟動MMU,我們操作的就是虛擬地址了。啟動MMU是操作cp15協處理器,下面代碼會有說明,了解下。


下面的例子我們用虛擬地址來點led.

#include "regs.h"

void (*uart_asm_putc)(int c) = 0x0202391c;
void (*uart_asm_putx)(int x) = 0x02023940;

#define GPM4CON (*(volatile unsigned int *)0xB10002E0)
#define GPM4DAT (*(volatile unsigned int *)0xB10002E4)

void init_ttb(unsigned long *ttb_base);
void mmap(unsigned long *ttb_base, unsigned long va, unsigned long pa);
void memset(char *buf, char ch, int size);
void led_blink(void);

void delay(volatile int time)
{
      for(; time > 0; time-- )
;
}

void main(void)
{    
    unsigned long c1_flags, ttb = 0x73000000;
    volatile int *p = 0x52345678;

    *p = 0x8;    

    init_ttb(ttb);
    mmap(ttb, 0x12345678, 0x52345678);
    mmap(ttb, 0xB10002E0, 0x110002E0);

    c1_flags = 1 | (1 << 3) | ( 1 << 11) | (1 << 28);

    __asm__ __volatile__ (
        "mvn r0, #0 n"            
        "mcr p15, 0, r0, c3, c0, 0n"

        "mcr p15, 0, %1, c2, c0, 0n" //configure ttb

        "mrc p15, 0, r0, c1, c0, 0n"
        "orr %0, r0, %0n"
        "mcr p15, 0, %0, c1, c0, 0n" //enable mmu
        :
        : "r" (c1_flags), "r" (ttb)
        : "r0"
    );

    p = 0x12345678;
    uart_asm_putc('r');
    uart_asm_putc('n');
    uart_asm_putc('c');
    uart_asm_putc('y');
    uart_asm_putc('j');
    uart_asm_putc(':');
    uart_asm_putx(*p);
    uart_asm_putc('r');
    uart_asm_putc('n');
     
       led_blink();
}

void init_ttb(unsigned long *ttb_base)
{
    unsigned long va, pa;

    memset(ttb_base, 0x00, 16 * 1024 );        

    for (va = 0x00000000; va < 0x10000000; va += 0x100000) { //Others
        pa = va;
        ttb_base[ va >> 20] = (pa & 0xfff00000) | 2;    
    }

    for (va = 0x10000000; va < 0x14000000; va += 0x100000) { //SFR
        pa = va;
        ttb_base[ va >> 20] = (pa & 0xfff00000) |  2;    
    }

    for (va = 0x40000000; va < 0x80000000; va += 0x100000) { //DRAM
        pa = va;
        ttb_base[ va >> 20] = (pa & 0xfff00000) | 2;    
    }
    
}

void mmap(unsigned long *ttb_base, unsigned long va, unsigned long pa)
{
    ttb_base[ va >> 20] = (pa & 0xfff00000) |  2;    
}

void memset(char *buf, char ch, int size)
{
    int i;
    for (i = 0; i < size; i ++)
        buf[i] = ch;
}

void led_blink(void)
{

unsigned long tmp = 0;
    int i = 0;

    /*
     *  GPM4_0-GPM4_3 設置為輸出功能
     */
    tmp = GPM4CON;
    tmp &= ~0xffff;
    tmp |= 0x1111;
    GPM4CON = tmp;
    
    /*
     *  實現流水燈
     */
     while(1)
     {
        GPM4DAT = i;
        if (++i == 16)
              i = 0;
          delay(9999999);
     }
    
 }

代碼位置:https://github.com/cyj1988jyc/luoji4412/

關鍵字:裸機程序  mmu 引用地址:4412裸機程序之mmu

上一篇:xynos4412裸機開發 —— A/D轉換器
下一篇:tiny4412 裸機程序 八、重定位到DRAM及LCD實驗

推薦閱讀

1、在沒有任何后綴標志的情況下,整型變量的數據類型是在能承受范圍內中最短的一個!2、實際編程中,應盡可能采用 unsigned 的變量,因為計算機內存的數據存儲都是補碼的形式,有符號類型(特別是其中的負數)還得來回轉換,導致效率不高。3、另外unsigned long的取值最大可達到42億,這個有必要記住。4、實數型數據在內存中的存儲是23位有效二進制,且...
日前,人工智能(AI)公司Cerence宣布將與戴姆勒汽車集團展開深入合作,為梅賽德斯-奔馳品牌汽車開發MBUX車載信息娛樂系統并進行創新升級。MBUX系統集合了語音、觸摸、手勢、視覺等多種技術創新于一體,為汽車與數字世界之間建立了更深層次的聯系。由于采用了AI技術,MBUX系統可根據用戶的日常行為進行學習,在積累用戶使用習慣達到一定程度后,系統能夠預...
作為喬布斯的摯友,喬治艾維在設計上的能力毋庸置疑,畢竟也是蘋果曾經的靈魂設計師。本周四,法拉利首席執行官 Louis Camilleri 突然宣布辭職,讓這家意大利超級跑車生產商在近兩年里再次面臨領導層危機。據外媒報道稱,在新的CEO名單中,蘋果現任首席財務官盧卡·梅斯特里(Luca Maestri)和前首席設計長喬尼·艾維(Jony Ive)。Maestri 在2014年...
網絡分析儀一種能在寬頻帶內進行掃描測量以確定網絡參量的綜合性微波測量儀器。可以進行 S 參數測量、Polar 極坐標圖、Smith 史密斯圖等的測量,在射頻領域應用是十分廣泛的,隨著網絡分析儀使用率的提高,儀器不可避免地會出現故障,那么,如何判斷網分出現故障了呢,今天安泰測試網絡分析儀維修工程師就給大家分享一下。網絡分析儀常見故障維修:1、...

史海拾趣

問答坊 | AI 解惑

求重慶本地技術人員解決DS18B20跳變的問題,有報酬:)

不要用數字濾波,這個我已經做了。不管是換芯片,還是調整時序,都可以。 有意思的請聯系我,我在沙坪壩。QQ:3487317  TEL:13883677969…

查看全部問答∨

也談技術人員發展方向及嵌入式學習

     關于技術人員發展方向的問題相信是大家所關注的問題,現在談談我的想法       對于技術人員可以選擇以下幾個方向       一,    繼續做技術,  做技術 ...…

查看全部問答∨

msp430學習

現在在使用msp430F149,正在學習中。菜鳥級別,希望大家多多交流…

查看全部問答∨

儀表放大器應用工程師指南(第三版)

目錄、 參考文獻及致謝 第一章 – 儀表放大器的基本原理 第二章 – 儀表放大器的內部原理 第三章 – 單片儀表放大器 第四章 – 單片差分放大器 第五章 – 儀表放大器的應用技巧 第六章 – 儀表放大器與差分放大器的應用電路 ...…

查看全部問答∨

蘑菇房溫濕度環境控制系統

[菇房培養應用方案] [食用菌養殖現代化技術] [蘑菇房工廠化技術方案書]    溫度因素溫度是環境條件的諸多因素中最為活躍的因素,也是對食用菌菌種生產、生產和使用影響作用最大的因素。任何種類、任何品種菌絲生長都有其生長溫度范圍 ...…

查看全部問答∨

深入理解功率MOSFET數據表

在汽車電子的驅動負載的各種應用中,最常見的半導體元件就是功率MOSFET了。本文不準備寫成一篇介紹功率MOSFET的技術大全,只是讓讀者去了解如何正確的理解功率MOSFET數據表中的常用主要參數,以幫助設計者更好的使用功率MOSFET進行設計。  數據表中 ...…

查看全部問答∨

請教一下倒立擺那道題怎么樣起擺

本帖最后由 paulhyde 于 2014-9-15 03:21 編輯 RT 更為穩定成功率更高    …

查看全部問答∨

ADI高速數據傳輸(三)

replyreload += \',\' + 1653369; DACs, DDSs, PLLs, and Clock Distribution 由于本份材料是英文版的,有需要的請回復下載,分為四個帖子發布。目錄如下 Timson,如果您要查看本帖隱藏內容請回復 …

查看全部問答∨

MSP430 f5529中文教程

求MSP430 f5529的中文教程,有什么好的大家推薦一下吧。…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 建宁县| 休宁县| 建瓯市| 辽宁省| 娄烦县| 赤城县| 萝北县| 建德市| 博罗县| 肇源县| 铜川市| 左云县| 靖江市| 南京市| 旬阳县| 台山市| 尼玛县| 江源县| 进贤县| 通江县| 辽宁省| 集安市| 岗巴县| 阜康市| 福鼎市| 磐安县| 英超| 张家川| 河东区| 古浪县| 泰宁县| 分宜县| 万全县| 克拉玛依市| 萨迦县| 依兰县| 宾川县| 车致| 九台市| 浠水县| 巴青县|