wince 程序內存與存儲內存

劃分的方法也很簡單, 只不過可能沒人注意到而已.

說明在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
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章