询问者
Compact 7如何实现对3G RAM的支持?

问题
-
Hi,
我在High_Confidence_Computing_With_The_New_Windows_Embedded_Compact_7文档里读到:“Windows Embedded Compact 7 raises the supported RAM limit to 3 GB of physical RAM”,使用OEMRAMTable可以对512MB以外的地址进行调用。那么WEC7在对3GB RAM的支持机制是什么呢?
我们知道,WinCE6.0由于静态虚拟地址映射问题,使WinCE6.0仍然只支持512MB的RAM,那么在WEC7里的内存模型又是什么样的呢?从使用OEMRAMTable上的用法看,感觉多出的空间只是给应用程序使用,而不是给WEC的镜像使用。是不是WEC7中的内存模型与WinCE6.0一致呢?它实现对3GB RAM的支持机制又是怎样的?一直没找到相关资料,不知道这里能不能提供一些white paper或者 technology manual?
谢谢!
- 已编辑 Liulizhe 2011年10月13日 10:23
全部回复
-
X86 微软代码
RAMTableEntry RamEntry[] = {
{ PHYS_DYNAMIC_RAM_START >> 8, 0xA0000000, 0 }, // up to 3G of RAM (kernel will auto-detect)
};const RamTable g_oalRamTable = {
MAKELONG (CE_MINOR_VER, CE_MAJOR_VER),
1,
RamEntry
};static PCRamTable OEMGetRamTable (void)
{
return &g_oalRamTable;
}Freescale 的代码
//-----------------------------------------------------------------------------
// Global Variables
RAMTableEntry g_RamTableEntry[2] =
{
//system has 2G physical memory starting from CSP_BASE_MEM_PA_CSD0
//config.bib/memory.cfg.xml configs the first part 464M memory
//and here, we config the last 2G - 464M memory
//physical memory start address >> 8, memory size, attribute must be 0
{(CSP_BASE_MEM_PA_CSD0 + STATIC_MAPPING_RAM_SIZE * 1024 * 1024) >> 8, (1024 - STATIC_MAPPING_RAM_SIZE) * 1024 * 1024, 0},
{(CSP_BASE_MEM_PA_CSD1) >> 8, 0, 0}
};RamTable g_RAMTable = {MAKELONG(CE_MINOR_VER, CE_MAJOR_VER), sizeof(g_RamTableEntry) / sizeof(g_RamTableEntry[0]), g_RamTableEntry};
//-----------------------------------------------------------------------------
//
// Function: OEMGetRamTable
// This function is implemented by the OEM to return the OEMRamTable structure,
// which allows your platform to support more than 512 MB of physical memory.
// Parameters:
//
// Returns:
// Returns an OEMRamTable structure, as defined in %_WINCEROOT%\Public\Common\Oak\Inc\OEMGlobal.h.
//
//
//-----------------------------------------------------------------------------
PCRamTable OEMGetRamTable(void)
{
#ifdef IMGRAM512
g_RamTableEntry[0].RamSize = (512 - STATIC_MAPPING_RAM_SIZE) * 1024 * 1024;
#else
// Check if EVK board
if(BSP_CPU_BID(g_dwBoardID) == BSP_MX53_ARM2_R1_CPU_BID)
{
// Currently we only support 1G DDR2 on EVK board
g_RamTableEntry[1].RamSize = 1024 * 1024 * 1024;
}
else if((BSP_CPU_BID(g_dwBoardID) == BSP_MX53_SMD_R2_CPU_BID)
||(BSP_CPU_BID(g_dwBoardID) == BSP_MX53_LCB_R2_CPU_BID)
||(BSP_CPU_BID(g_dwBoardID) == BSP_MX53_SMD_R3_CPU_BID))
{
g_RamTableEntry[0].RamSize = (512 - STATIC_MAPPING_RAM_SIZE) * 1024 * 1024;
g_RamTableEntry[1].RamSize = 512 * 1024 * 1024;
}
#endifreturn &g_RAMTable;
}貌似只是内存拼接而已,CE6和CE7貌似在内存映射机制上没多大区别!
- 已编辑 D.Ryan 2012年4月25日 5:25