日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

地址映射原理和实现

發布時間:2023/12/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 地址映射原理和实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡介  為了保證 CPU執行指令時可正確訪問存儲單元,需將用戶程序中的邏輯地址轉換為運行時由機器直接尋址的物理地址,這一過程稱為 地址映射

地址映射原理及實現

1、 地址映射結構

  在Tornado\target\h\vmLib.h文件中   typedef struct phys_mem_desc   {   void *virtualAddr;   void *physicalAddr;   UINT len;   UINT initialStateMask; /* mask parameter to vmStateSet */   UINT initialState; /* state parameter to vmStateSet */   } PHYS_MEM_DESC;   virtualAddr:你要映射的虛擬地址   physicalAddr:硬件設計時定義的實際物理地址   len;要進行映射的地址長度   initialStateMask:可以初始化的地址狀態:   有如下狀態:   #define VM_STATE_MASK_VALID 0x03   #define VM_STATE_MASK_WRITABLE 0x0c   #define VM_STATE_MASK_CACHEABLE 0x30   #define VM_STATE_MASK_MEM_COHERENCY 0x40   #define VM_STATE_MASK_GUARDED 0x80   不同的CPU芯片類型還有其特殊狀態   initialState:實際初始化的地址狀態:   有如下狀態:   #define VM_STATE_VALID 0x01   #define VM_STATE_VALID_NOT 0x00   #define VM_STATE_WRITABLE 0x04   #define VM_STATE_WRITABLE_NOT 0x00   #define VM_STATE_CACHEABLE 0x10   #define VM_STATE_CACHEABLE_NOT 0x00   同樣不同的CPU芯片類型還有其特殊狀態

2、 初始化結構

  在 Tornado\target\config\ads860\sysLib.c 文件中:   PHYS_MEM_DESC sysPhysMemDesc [] =   {   {   (void *) LOCAL_MEM_LOCAL_ADRS,   (void *) LOCAL_MEM_LOCAL_ADRS,   LOCAL_MEM_SIZE ,   VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE |   VM_STATE_MASK_CACHEABLE,   VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE   },   {   (void *) BCSR0,   (void *) BCSR0,   0x00001000, /* 4 k - Board Control and Status */   VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE |   VM_STATE_MASK_CACHEABLE | VM_STATE_MASK_GUARDED,   VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE_NOT |   VM_STATE_GUARDED   },   ……   {   (void *) INTERNAL_MEM_MAP_ADDR,   (void *) INTERNAL_MEM_MAP_ADDR,   INTERNAL_MEM_MAP_SIZE, /* 64 k - Internal Memory Map */   VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE |   VM_STATE_MASK_CACHEABLE | VM_STATE_MASK_GUARDED,   VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE_NOT |   VM_STATE_GUARDED   },   {   (void *) ROM_BASE_ADRS,   (void *) ROM_BASE_ADRS,   ROM_SIZE, /* Flach memory */   VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE |   VM_STATE_MASK_CACHEABLE ,   VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE_NOT   }   };   上面結構中是缺省地址映射。

3、 地址初始化

  在Tornado\target\src\config\ usrMmuInit.c 文件中   通過函數usrMmuInit使地址映射生效

4、 實現映射

  如你定義flash地址為0x04000000開始的8Mbyte地址,則可以如下進行地址映射   {   (void *) 0x04000000,   (void *) 0x04000000,   0x00800000, /* 8 m - Flash window 1 */   VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE,   VM_STATE_VALID | VM_STATE_WRITABLE   },

5、 注意

  地址映射最小單位為1頁,4K大小,所以len值最小為:0x00001000 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的地址映射原理和实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。