學習乙個事項的時候,注意三點:是什麼,有什麼用(功能),如何配置(實現、操作)。
1,為了保證
cpu執行指令時可正確訪問
儲存單元
,需將使用者程式
中的邏輯
位址轉換
為執行時由機器
直接定址
的實體地址,這一過程稱為位址對映。
2,位址對映結構
在tornado\target\h\vmlib.h檔案中
typedef struct phys_mem_desc
phys_mem_desc;
virtualaddr:你要對映的
虛擬位址
len;要進行對映的位址長度
有如下狀態:
#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晶元型別還有其特殊狀態
有如下狀態:
#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晶元型別還有其特殊狀態
3,初始化結構
在 tornado\target\config\ads860\syslib.c 檔案中:
phys_mem_desc sysphysmemdesc [ ] = ,
, ……
, };
上面結構中是預設位址對映。
在tornado\target\src\config\ usrmmuinit.c 檔案中
通過函式usrmmuinit使位址對映生效
如你定義flash位址為0x04000000開始的8mbyte位址,則可以如下進行位址對映 ,
靜態重定位
當使用者程式被裝入記憶體時,一次性實現邏輯位址到實體地址的轉換,以後不再轉換(一般在裝入記憶體時由軟體完成)。
動態重定位
在程式執行過程中要訪問資料時再進行位址變換(即在逐條指令執行時完成位址對映。一般為了提高效率,此工作由硬體位址對映機制來完成。由硬體支援,軟體硬體結合完成。硬體上一般需要一對暫存器的支援)。
儲存器對映
通過賦予每個任務不同的虛擬 物理 位址轉換 對映,支援不同任務之間的保護。位址轉換 函式在每乙個任務中定義,在乙個任務中的 虛擬位址 空間對映到 物理記憶體 的乙個部分,而另乙個任務的虛擬位址空間對映到物理儲存器中的另外區域。就是把乙個位址連線到另乙個位址。例如,記憶體單元a的位址為x,把它對映到位...
儲存器對映
引言 隨著半導體工藝技術與處理器設計技術的不斷提高,嵌入式處理器的速度愈來愈快 而非易失性儲存器的讀取速度卻遠遠跟不上cpu的發展。傳統的微控制器執行模式 機器 儲存在非易失性儲存器 如rom,flash 在執行時由cpu直接從其中取出指令執行 逐漸顯得力不從心。如果繼續沿用傳統的程式執行模式,那麼...
儲存器對映
位段 bit band 是指提供位操作的特殊寄儲存器區域。利用這個特性,可以直接驅動驅動gpio埠中的乙個引腳。rmw read modify write 多指令操作,即先讀取整個埠暫存器,而後修改對應的位,最後寫回埠暫存器的操作來控制和驅動埠的乙個引腳。微處理器的架構包括 1 指令集架構,包括指令...