劃分的方法也很簡單, 只不過可能沒人注意到而已.
說明在ms-help://MS.WindowsCE.500/wceosdev5/html/wce50lrfFSRAMPERCENT.htm 懶得看英文的人就繼續往下看
其實說白了就一句話, 在BSP的config.bib裏 CONFIG 區添加這個變量 FSRAMPERCENT = 0xXXXXXX,
FSRAMPERCENT是一個4byte長度的十六進制數, 我們用代數假設 FSRAMPERCENT = 0xQXYZ, 其中Q,X,Y,Z都是十六進制數
那麼最終劃分給Storage Memory的大小 = ( Q + X + Y + Z ) / 0x400 * TOTAL_RAM_SIZE
以文中的例子來算, FSRAMPERCENT=0x10203040, 假設TOTAL_RAM_SIZE=64M, 那麼StorageMemory= (0x10 + 0x20 + 0x30 + 0x40) / 0x400 * 64M = 10M.
我已知的劃分Storage Memory和Program Memory的方法一共有三種,也是MS文檔中給出的三種方法
(1) statically using FSRAMPERCENT
(2) during boot using pOEMCalcFSPages
(3) using api SetSystemMemoryDivision
存儲內存與程序內存的修改方法3:
typedef DWORD (*SETSYSTEMMEMORYDIVISION)(DWORD);
typedef BOOL (*GETSYSTEMMEMORYDIVISION)(LPDWORD,LPDWORD,LPDWORD);
void SetObjectMemorySpace(int nSize)
{
#ifdef _WIN32_WCE
//從動態庫中獲取函數地址以設置對象存儲區的大小.
HINSTANCE hDll = LoadLibrary(_T("Coredll.dll"));
SETSYSTEMMEMORYDIVISION SetSystemMemoryDivisionProc = NULL;
GETSYSTEMMEMORYDIVISION GetSystemMemoryDivisionProc = NULL;
if( NULL != hDll )
{
//獲取導出函數地址
SetSystemMemoryDivisionProc = (SETSYSTEMMEMORYDIVISION)GetProcAddress(hDll,_T("SetSystemMemoryDivision"));
GetSystemMemoryDivisionProc = (GETSYSTEMMEMORYDIVISION)GetProcAddress(hDll,_T("GetSystemMemoryDivision"));
if(SetSystemMemoryDivisionProc && GetSystemMemoryDivisionProc)
{
DWORD dwStorePages = 0;
DWORD dwRamPages = 0;
DWORD dwPageSize = 0;
BOOL bRet = (*GetSystemMemoryDivisionProc)(&dwStorePages,&dwRamPages,&dwPageSize);
if(bRet)
{
int nPageCount = nSize/dwPageSize;
if(nSize%dwPageSize != 0)
{
nPageCount++;
}
(*SetSystemMemoryDivisionProc)(nPageCount);
}
}
SetSystemMemoryDivisionProc = NULL;
GetSystemMemoryDivisionProc = NULL;
FreeLibrary(hDll);
hDll = NULL;
}
#endif
}