通過賦予每個任務不同的虛擬–物理
位址轉換
對映,支援不同任務之間的保護。
位址轉換
函式在每乙個任務中定義,在乙個任務中的
虛擬位址
空間對映到
物理記憶體
的乙個部分,而另乙個任務的虛擬位址空間對映到物理儲存器中的另外區域。...
就是把乙個位址連線到另乙個位址。
例如,記憶體單元a的位址為x,把它對映到位址y,這樣訪問y時,就可以訪問到a了。當然,訪問原來的位址x,也可以訪問到a。
再如,在c語言等高階語言裡面沒有訪問io的指令,所以那樣的話在c裡面就無法訪問io,只能通過嵌入彙編或者通過呼叫
系統函式
來訪問io了。採用io對映後就不同了,因為io空間和記憶體空間本來不同,有不同的訪問指令,那麼,將io空間對映到記憶體空間,就可以通過使用訪問記憶體的方法來訪問io了,例如在c語言裡面可以通過
指標 來訪問記憶體單元,從而訪問到被對映的io。
儲存器對映是指把晶元中或晶元外的flash,ram,外設,bootblock等進行
統一編址
。即用位址來表示物件。這個位址絕大多數是由廠家規定好的,使用者只能用而不能改。使用者只能在掛外部ram或flash的情況下可進行自定義。 arm7tdmi的儲存器對映可以有0x00000000~0xffffffff的空間,即4g的對映空間,但所有器件加起來肯定是填不滿的。一般來說, 0x00000000依次開始存放flash——0x00000000,sram——0x40000000,bootblock,外部儲存器 0x80000000,vpb(低速外設位址,如gpio,uart)——0xe0000000,ahb(高速外設:
向量中斷
控制器,外部儲存器控制器)——從0xffffffff回頭。他們都是從固定位置開始
編址 的,而占用空間又不大,如ahb只佔2mb,所以從中間有很大部分是空白區域,使用者若使用這些空白區域,或者定義
野指標 ,就可能出現取指令中止或者取資料中止。由於系統在上電復位時要從0x00000000 開始執行,而第一要執行的就是廠家固化在**裡的bootblock,這是判斷執行哪個儲存器上的程式,檢查使用者**是否有效,判斷晶元是否加密,晶元是否iap(
在應用程式設計
),晶元是否isp(
在系統程式設計
),所以這個bootblock要首先執行。而晶元中的bootblock不能放在flash的頭部,因為那要存放使用者的異常向量表的,以便在執行、中斷時跳到這來找入口,所以bootblock只能放在flsah尾部才能好找到。而arm7的各晶元的flash大小又不一致,廠家為了bootblock在晶元中的位置固定,就在
編址 的2g靠前編址的位置虛擬劃分乙個區域作為bootblock 區域,這就是重對映,這樣訪問<2g即<0x80000000的位置時,就可以訪問到在flash尾部的bootblock區了。 bootblock執行完就是要執行使用者自己寫的啟動**了,而啟動**中最重要的就是異常向量表,這個表是放在flash的頭部首先執行的,而異常向量表中要處理多方面的事情,包括復位、未定義指令、
軟中斷 、預取指中止、資料中止、irq(中斷) ,fiq (快速中斷),而這個異常向量表是總表,還包括許多分散的異常向量表,比如在外部儲存器,bootblock,sram中固化的,不可能都由使用者直接定義,所以還是需要重對映把那些異常向量表的位址映到總表中。為儲存器分配位址的過程稱為儲存器對映,那麼什麼叫儲存器重對映呢?為了增加系統的靈活性,系統中有部分位址可以同時出現在不同的位址上,這就叫做儲存器重對映。重對映主要包括引導塊「boot block」重對映和異常向量表的重對映。 1.引導塊「boot block」及其重對映 boot block是晶元設計廠商在lpc2000系列arm內部固化的一段**,使用者無法對其進行修改或者刪除。這段**在復位時被首先執行,主要用來判斷執行哪個儲存器上面的程式,檢查使用者**是否有效,判斷晶元是否被加密,系統的
在應用程式設計
(iap)以及
在系統程式設計
功能(isp)等。 boot block存在於內部flash,lpc2200系列大小為8kb,它占用了使用者的flash空間,但也有其他的lpc系列不占用flash空間的,而部分沒有內部flash空間的arm處理器仍然存在boot block。 重對映的原因: boot block中有些程式可被使用者呼叫,如擦寫片內flash的iap**。為了增加使用者**的可移植性,所以最好把boot block的**固定的某個位址上。但由於各晶元的片內flash大小不盡相同,如果把boot block的位址安排在內部flash結束的位置上,那就無法固定boot block的位址。 為了解決上面的問題,於是晶元廠家將boot block的位址重對映到片
記憶體儲器
空間的最高端,即接近2gb的地方,這樣無論片記憶體儲器的大小如何,都不會影響boot block的位址。因此當boot block中包含可被使用者呼叫的iap操作的**時,不用修改iap的操作位址就可以在不同的lpc系列的arm上執行了。 2.異常向量表及其重對映 arm
核心 在發生異常後,會使程式跳轉到位於0x0000~0x001c的異常向量表處,再經過向量跳轉到異常服務程式。但arm單條指令的
定址 範圍有限,無法用一條指令實現4g範圍的跳轉,所以應在其後面的0x0020~0x003f位址上放置跳轉目標,這樣就可以實現4g範圍內的任意跳轉,因此乙個異常向量表實際上占用了16個字的
儲存單元
。
儲存器對映
引言 隨著半導體工藝技術與處理器設計技術的不斷提高,嵌入式處理器的速度愈來愈快 而非易失性儲存器的讀取速度卻遠遠跟不上cpu的發展。傳統的微控制器執行模式 機器 儲存在非易失性儲存器 如rom,flash 在執行時由cpu直接從其中取出指令執行 逐漸顯得力不從心。如果繼續沿用傳統的程式執行模式,那麼...
儲存器對映
位段 bit band 是指提供位操作的特殊寄儲存器區域。利用這個特性,可以直接驅動驅動gpio埠中的乙個引腳。rmw read modify write 多指令操作,即先讀取整個埠暫存器,而後修改對應的位,最後寫回埠暫存器的操作來控制和驅動埠的乙個引腳。微處理器的架構包括 1 指令集架構,包括指令...
位址對映,儲存器對映
學習乙個事項的時候,注意三點 是什麼,有什麼用 功能 如何配置 實現 操作 1,為了保證 cpu執行指令時可正確訪問 儲存單元 需將使用者程式 中的邏輯 位址轉換 為執行時由機器 直接定址 的實體地址,這一過程稱為位址對映。2,位址對映結構 在tornado target h vmlib.h檔案中 ...