Operating system Nucleus如何获取ID列表?

Operating system Nucleus如何获取ID列表?,operating-system,embedded,Operating System,Embedded,这些天,我开始学习Nucleus Plus操作系统。构建操作系统并将映像下载到主板后,操作系统无法成功运行。我发现错误发生在函数CMEM_Index()上;我读过密码,但找不出原因。我甚至不知道系统是如何获得诸如combo_mem_ID_list之类的ID列表的。 下面是CMEM_Index()的代码。 有人知道Nucleus Plus吗?或者谁能告诉我系统如何获得nor闪存ID列表?Plz #if defined(__DUAL_SERIAL_FLASH_SUPPORT__) kal_int32

这些天,我开始学习Nucleus Plus操作系统。构建操作系统并将映像下载到主板后,操作系统无法成功运行。我发现错误发生在函数CMEM_Index()上;我读过密码,但找不出原因。我甚至不知道系统是如何获得诸如combo_mem_ID_list之类的ID列表的。 下面是CMEM_Index()的代码。 有人知道Nucleus Plus吗?或者谁能告诉我系统如何获得nor闪存ID列表?Plz

#if defined(__DUAL_SERIAL_FLASH_SUPPORT__)
kal_int32 CMEM_Index(const kal_uint16 CS)
#else //ADMUX or Nand or SF without Dual SF enable
kal_int32 CMEM_Index()
#endif
{
    kal_int32 i, j;
    CMEMFlashID id;
    const CMEMEntryID *id_list=NULL;

#if !defined(__DUAL_SERIAL_FLASH_SUPPORT__)
    if (cmem_index>=0) return cmem_index;
#endif

// Read Flash ID
#if defined(_NAND_FLASH_BOOTING_)
    #if defined(__UBL__)
    return CMEM_INVALID_INDEX;
    #else
    if(DAL_is_initialized == 0)
    {
        DAL_init(); // Call DAL init to ensure FlashID alreay there.
    }
    MTD_ReadID(8, id.NAND);
    #endif
#elif defined(__DUAL_SERIAL_FLASH_SUPPORT__)
  #if defined(__UBL__)
    //begin from MT6255, remapping is done before NOR_ReadID
    if(CS !=2) //Skip Read ID for dummy SF2
    {
        if(EMI_QueryIsRemapped())
            NOR_ReadID(CS,(void*)0x10000000, id.NOR);
        else
            NOR_ReadID(CS, (void*)0, id.NOR);
    }
  #else
    if(CS !=2)//Skip Read ID for dummy SF2
        NOR_ReadID(CS, (void *)(INT_RetrieveFlashBaseAddr() + NOR_FLASH_BASE_ADDRESS), id.NOR);
  #endif
#else //ADMUX and SF without Dual SF enable
  #if defined(__UBL__)
    //begin from MT6255, remapping is done before NOR_ReadID
        if(EMI_QueryIsRemapped())
            NOR_ReadID(0,(void*)0x10000000, id.NOR);
        else
            NOR_ReadID(0, (void*)0, id.NOR);
  #else
        NOR_ReadID(0, (void *)(INT_RetrieveFlashBaseAddr() + NOR_FLASH_BASE_ADDRESS), id.NOR);
  #endif
#endif //defined(_NAND_FLASH_BOOTING_)

#ifdef   __SV5_ENABLED__
    id_list=combo_mem_id_list.m_data.List;
#else
    id_list=combo_mem_id_list.List;
#endif

    // seach CMEM list for specific Flash ID
    for (i=0; i<COMBO_MEM_DEVICE_COUNT; i++)    {
        // Check 1: Compare ID
        for (j=0; j<id_list[i].IDLength; j++) {
            #if defined(_NAND_FLASH_BOOTING_)
            if (id_list[i].ID[j]!=id.NAND[j]) break;
            #else // __SERIAL_FLASH__ || NOR FLASH
            if (id_list[i].ID[j]!=id.NOR[j]) break;
            #endif
        }
        // Check 2: Compare RegionInfo
        if (j==id_list[i].IDLength)   {
            // TBD: Compare RegionInfo
            cmem_index=i;
            break;  // entry found, break the loop
        }
    }
#if defined(__DUAL_SERIAL_FLASH_SUPPORT__)
    /*Get Dummy SF entry ID*/
    if(CS==2)
    {
        // seach CMEM list for specific Flash ID
        for (i=0; i<COMBO_MEM_DEVICE_COUNT; i++)    {
            // Check 1: Compare ID
            for (j=0; j<id_list[i].IDLength; j++) {
                if(j==0)
                    if (id_list[i].ID[j]!= 0x00) break;
                if(j==1)
                    if (id_list[i].ID[j]!= 0x34) break;
                if(j==2)
                    if (id_list[i].ID[j]!= 0x56) break;
            }

            if (j==id_list[i].IDLength)   
            {
                // TBD: Compare RegionInfo
                cmem_index=i;
                break;  // entry found, break the loop
            }
        }
    }
#endif

    return cmem_index;
}
#如果定义(uuu双_u串行_u闪存_uu支持)
kal_int32 CMEM_索引(常量kal_uint16 CS)
#else//ADMUX或Nand或SF不带双SF启用
kal_int32 CMEM_索引()
#恩迪夫
{
kal_int32 i,j;
CMEMFlashID;
const CMEMEntryID*id\u list=NULL;
#如果!已定义(\uuuu双\u串行\u闪存\u支持\uuuuuu)
如果(cmem_索引>=0)返回cmem_索引;
#恩迪夫
//读取闪存ID
#如果已定义(_NAND_FLASH_BOOTING_)
#如果已定义(uuu-UBL_uuu)
返回CMEM_无效_索引;
#否则
如果(DAL_已初始化==0)
{
DAL_init();//调用DAL init以确保FlashID始终存在。
}
MTD_ReadID(8,id.NAND);
#恩迪夫
#elif已定义(双串行闪存支持)
#如果已定义(uuu-UBL_uuu)
//从MT6255开始,在NOR_ReadID之前完成重新映射
if(CS!=2)//跳过伪SF2的读取ID
{
if(EMI_queryisremap())
NOR_ReadID(CS,(void*)0x10000000,id.NOR);
其他的
NOR_ReadID(CS,(void*)0,id.NOR);
}
#否则
if(CS!=2)//跳过伪SF2的读取ID
NOR_ReadID(CS,(void*)(INT_RetrieveFlashBaseAddr()+NOR_FLASH_BASE_地址),id.NOR);
#恩迪夫
#else//ADMUX和SF不带双SF启用
#如果已定义(uuu-UBL_uuu)
//从MT6255开始,在NOR_ReadID之前完成重新映射
if(EMI_queryisremap())
NOR_ReadID(0,(void*)0x10000000,id.NOR);
其他的
NOR_ReadID(0,(void*)0,id.NOR);
#否则
NOR_ReadID(0,(void*)(INT_RetrieveFlashBaseAddr()+NOR_FLASH_BASE_地址),id.NOR);
#恩迪夫
#endif//已定义(\u与\u闪存\u引导\u)
#ifdef__SV5_已启用__
id_list=combo_mem_id_list.m_data.list;
#否则
id\u list=combo\u mem\u id\u list.list;
#恩迪夫
//搜索特定闪存ID的CMEM列表
对于(i=0;i