none
Compact 7如何实现对3G RAM的支持? RRS feed

  • 问题

  • 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
    2011年10月13日 10:23

全部回复

  • 也是通过从SD卡之类的物理内存映射吧
    NEU_ShieldEdge
    2011年10月17日 6:43
  • 也是通过从SD卡之类的物理内存映射吧
    NEU_ShieldEdge

    WinCE的内存映射和SD卡之类的应该无关,而且我也知道是通过物理内存映射实现。5.0,6.0都是用的内存映射机制实现。但5.0和6.0在映射实现上就有了区别。7.0可以支持到3GB,必然和6.0的有区别。我是想搞清楚其中的原理,不想似是而非的理解个大概。
    2011年10月17日 9:42
  • 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;      
        }
    #endif

        return &g_RAMTable;
    }

    貌似只是内存拼接而已,CE6和CE7貌似在内存映射机制上没多大区别!


    • 已编辑 D.Ryan 2012年4月25日 5:25
    2012年4月25日 5:25