WinCE OAL中的RAM定製函式

2021-08-23 13:55:42 字數 1437 閱讀 7945

在wince系統中,kernel是如何使用記憶體的,如何知道記憶體的大小?是通過config.bib檔案的描述,我們會在config.bib檔案中memory段定義wince核心所占用ram的起始位址和大小,比如:

memory

nk 80001000 01e00000 ramimage

bib檔案的格式以前介紹過,這裡不重複了,在config.bib中定義的是乙個物理上連續記憶體,在oal中我們可以改變這段被kernel使用的連續物理記憶體的大小,同時也可以通過函式來列舉其他的可用的物理記憶體,通常這些內存在實體地址上是不連續的。

1. mainmemoryendaddress:

用於改變config.bib中定義的核心所使用的連續物理記憶體的大小。在啟動過程中,核心設定該值為ulramend,其中ulramend的值等於config.bib中定義的ram起始位址+ram的size,wince核心通過mainmemoryendaddress來得知可用的連續物理記憶體的大小。該變數可以在oeminit函式中重新被設定來調整記憶體的大小。

2. bool oemgetextensiondram(lpdword lpmemstart, lpdword lpmemlen)

該函式用於向wince核心列舉一塊不連續的物理記憶體。當有另一塊物理記憶體存在,可以通過該函式來列舉這塊記憶體的起始位址和大小,這樣wince核心就可以使用這塊記憶體了。

lpmemlen:記憶體的大小

如果沒有額外的記憶體,該函式直接返回false就可以了。

3. pnkenumextensiondram

如果系統中有多餘1個以上的不連續物理記憶體,就需要實現oemenumextensiondram函式,並將它賦給pnkenumextensiondram函式指標。一般在oeminit中實現,如下:

pnkenumextensiondram = oemenumextensiondram;

然後需要實現oemenumextensiondram函式,這個函式比較簡單,舉個例子就明白了,如下:

dword oemenumextensiondram(pmemory_section pmemsections, dword cmemsections)

memory_section, *pmemory_section;

在上面的oemenumextensiondram函式中,列舉了3塊連續的物理記憶體,並且返回列舉的記憶體的個數。

在wince引導過程中,會首先檢查pnkenumextensiondram是否為null,如果不為null則呼叫它所指向的函式並且不再呼叫oemgetextensiondram,如果pnkenumextensiondram為null,則呼叫oemgetextensiondram函式。

WinCE OAL中的RAM定製函式

相關網帖 1 wince oal中的memory函式介紹 2 oemaddresstable介紹 在wince系統中,kernel是如何使用記憶體的,如何知道記憶體的大小?是通過config.bib檔案的描述,我們會在config.bib檔案中memory段定義wince核心所占用ram的起始位址和...

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...