在
bsp開發中經常會用到實體地址與虛擬位址的轉換,一般都是基於實體地址獲得相應的虛擬位址來訪問硬體。在
wince6.0
中,可以在
wince600/platform/common/src/inc/oal_memory.h
檔案中找到相關的操作函式,這些函式用來虛擬位址與實體地址之間的轉換,它們都是基於
oemaddresstable
表的。也就是說,首先要在
oemaddresstable
中定義虛擬位址到實體地址之間的對映關係,然後才能使用這些函式。這些函式可以在
oal中使用,也可以在
eboot
中使用,有時也會在驅動中使用。
函式都比較簡單,介紹一下:
void* oalcatoua(void *ca):
該函式根據
cached
的虛擬位址,返回
uncached
的虛擬位址
void* oalpatoca(uint32 pa):
該函式根據硬體實體地址,返回
cached
的虛擬位址
void* oalpatoua(uint32 pa):
該函式根據硬體實體地址,返回
uncached
的虛擬位址
void* oalpatova(uint32 pa,bool cached):
該函式根據硬體實體地址,返回虛擬位址,虛擬位址是否為
cached
取決於引數
cached
,true
表示cached
,false
表示uncached
void* oaluatoca(void *ua):
該函式根據
uncached
的虛擬位址,返回
cached
的虛擬位址
uint32 oalvatopa(void *va):
該函式根據虛擬位址,返回相應的硬體實體地址
函式用起來很簡單,無非是在實體地址,
cached/uncached
的虛擬位址之間轉換。但是實體地址必須在
oemaddresstable
中定義才可以。所以說白了,也是一種記憶體靜態對映。
WinCE OAL中的中斷處理
這張圖想必很多人都見過,主要這張圖太經典了,所以還是貼出來嘮叨幾句,硬體中斷產生以後,會導致核心isr的執行,然後由oal中的isr來處理相應的中斷,最後導致相對應的ist執行完成真正的中斷處理。所以在wince中,中斷處理由isr和ist共同完成。isr主要完成中斷源的確定,遮蔽該中斷並返回給核心...
WinCE OAL中的Memory函式介紹
在bsp開發中經常會用到實體地址與虛擬位址的轉換,一般都是基於實體地址獲得相應的虛擬位址來訪問硬體。在wince6.0中,可以在wince600 platform common src inc oal memory.h檔案中找到相關的操作函式,這些函式用來虛擬位址與實體地址之間的轉換,它們都是基於o...
WinCE OAL中的RAM定製函式
相關網帖 1 wince oal中的memory函式介紹 2 oemaddresstable介紹 在wince系統中,kernel是如何使用記憶體的,如何知道記憶體的大小?是通過config.bib檔案的描述,我們會在config.bib檔案中memory段定義wince核心所占用ram的起始位址和...