WinCE內存調整

WinCE內存的定製。WinCE系統可使用的內存被分爲Storage Memory和Program Memory兩部分。Storage Memory用於Object Store,而Program Memory用於程序內存。

  關於Object Store,在WinCE中是指一個可以永久保存數據的存儲空間,即使在掉電的情況下,數據可以在備份電源的支持下不丟失,達到永久保存的效果。其實就是一塊內存,一般包括文件系統,數據庫和系統註冊表。Object Store的最大空間不能超過256MB,其中所能包含的最大文件是32MB。Object Store中是由很多Object組成,這些Object可能是一個文件,一個數據庫,一條數據庫記錄,一個註冊表鍵,一個鍵值等。

  在Object Store中,WinCE系統會分配給每一個Object一個ID,被稱爲CEOID。每個Object的CEOID在Volume中都是唯一的。同樣,在Object Store中的每一個Volume也有一個ID,被稱爲CEGUID,這樣使用CEGUID和CEOID就可以在Object Store中找到相應的Object了。

  順便介紹個函數:

  BOOL CeOidGetInfoEx( PCEGUID pceguid,  CEOID oid, CEOIDINFO* poidInfo) 調用該函數可以獲得Object Store中某個Object的信息,pceguid和oid是要查找對象的CEGUID和CEOID,poidInfo爲Object的信息。

  那麼如何獲得CEGUID和CEOID呢?對於不同的Object類型,有不同的函數,如下:

  Directory or File:FindFirstFile(..) / FindNextFile(..) / GetFileInformationByHandler(..)

  Database:CeCreateDatabaseEx2(..) / CeFindNextDatabaseEx(..)

  Database record:CeSeekDatabaseEx(..) / CeReadRecordPropsEx(..) / CeWriteRecordPropsEx(..)

  Mounted Database volume:CeMountDBVol(..) / CeEnumDBVolumes(..)

  所以,在WinCE系統中,對內存的調節就是在調整Object Store和程序內存的大小。默認情況下是Storage Memory/Program Memory各佔一半。有三種方法可以實現對內存的調整:

  1. 在config.bib文件中調整FSRAMPERCENT,具體如何設置在BIB文件的介紹中解釋過,這裏不多說了。

  2. 在OAL中調用pOEMCalcFSPages函數爲Object Store分配內存。

  3. 在WinCE啓動以後,進入系統的control panel,然後打開System,選擇Memory在界面中進行調整。

  4. 通過函數SetSystemMemoryDivision(..)來調整。多說一句,可以通過調用GetSystemMemoryDivision(..)來獲得當前Object Store的內存使用情況。

  關於Storage Memory和Program Memory的調整,主要還是看系統的需求,一般情況下Storage Memory不需要太大,可以根據自己的需要適當的調整。但是要注意,兩部分內存都不能調整的太小,調整的太小會導致數據丟失,甚至是死機,到時候只能重起系統了。

 

 

ObjectStore

WinCE有2種內部文件系統,ROMONLY和RAMROM,前者把ROM(nk.bin)中的所有文件映射到"/windows"下,後者還創建一個RAMFS並且一般作爲root("/")掛載。而這個RAMFS和RAM中的系統註冊表一起稱爲ObjectStore。
另外CE還支持FATFS外部文件系統,當然也可以編寫自己的Installable File System。
 
所以一般的做法是,把FLASH分區格式化後掛載到root下某個目錄上。並通過設置註冊表實現HIVE。
當初搞WinCE4.2的時候覺得麻煩,幹嘛不直接把FLASH掛成root,就像Linux一樣。而且對那個ObjectStore一直暈乎,主要是名字起的不好,其實就是虛擬一個RAM盤讓人可以讀寫文件。
 
到了WM5.0,默認是ROMFS,外部FLASH作爲root,沒想到反而不習慣了,就想改成4.2的模式。這一改就花了4天時間,所有能想到的地方都改了個遍,最後還是不行。除非拿FLASH作爲root,不然就沒有root。那個RAMFS也不知道跑哪裏去了。
最後纔在WINCE的BLOG上看到,WM5.0不支持ObjectStore了。換句話SYSGEN_FSRAMROM是聾子的擺設。

 

 

 

發佈了16 篇原創文章 · 獲贊 0 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章