This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

多核启动



pBootMagicAddCore0 = (int*)0x1087FFFC;

(*pBootMagicAddCore0)+= 0x10000000;// translate to global address

for(i = 1;i < CORE_NUM_6678; i++)//write the other cores' boot magic address

{

            *(pBootMagicAddCore0+ (0x01000000*i)/4 ) = (*pBootMagicAddCore0) + 0x01000000 * i;

}

这里为什么要除以4,还有采用C6678,8个核共享一份代码,cmd里的

.myboot
{
*.*<boot.obj>(.text)

} > BOOT_CORE0

字段,如何能用一个工程和一个cmd文件兼容所有8个核的加载

  • 代码哪来的,没看懂,参考下面EMAC multicore boot例子中emac_boot_mc中的core0_start_others.c中的代码。

    http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/10240.aspx

    可以做到多个core使用同一个工程同一个cmd,但是需要注意在将多个boot table合成时,需要注意遇到LL2地址段时需要区分core,这需要自己写一个boot table解析的工具,所以一般建议为方便可以使用同一个工程,但是使用不同的cmd。

  • 你好Andy,

    关于C6670的多核Boot我也有些疑问.

    1. 我下载了http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/10240.aspx下的multi_core_EMAC_boot.zip文件

    其中main函数

    #define BOOT_MAGIC_ADDRESS 0x87FFFC // for TCI6608
    #define BOOT_ENTRY_ADDRESS 0x810000
    #define IPC_INTERRUPT_CORE0 0x02620240
    /*convert local address to global address for EDMA on multi-core DSP*/
    #define GLOBAL_ADDR(addr,corenumber) (unsigned int)addr<0x1000000?\
    						(unsigned int)addr+(0x10000000+corenumber*0x1000000):\
    						(unsigned int)addr
    void main(void)
    {
    	unsigned int coreNumber;
    	unsigned int *bootMagicAddr;
    	unsigned int bootEntryAddr;
    	unsigned int *IPCCore;
    
    	CSL_BootCfgUnlockKicker();
    	for(coreNumber=1;coreNumber<8;coreNumber++)
    	{
    		bootMagicAddr = (unsigned int *)(GLOBAL_ADDR(BOOT_MAGIC_ADDRESS,coreNumber));
    		bootEntryAddr = GLOBAL_ADDR(BOOT_ENTRY_ADDRESS,coreNumber);
    		*bootMagicAddr = bootEntryAddr;
    
    		CSL_IPC_genGEMInterrupt(coreNumber,0);//start cores..
    	}
    	CSL_BootCfgLockKicker();
    
    }

    其中

    bootEntryAddr = GLOBAL_ADDR(BOOT_ENTRY_ADDRESS,coreNumber);

    这一句,应该是要写_c_int00地址的吧?

    map文件中显示的为ENTRY POINT SYMBOL: "_c_int00"  address: 00801680

    但是代码中BOOT_ENTRY_ADDRESS为固定的值0x1n810000,是不是有误?

    *******************************************************************************************************************************

    2. 我做的是C6670 SPI Master Boot。具体情况是:FPGA模拟SPI FLASH,bin文件交给FPGA,C6670上电SPI Boot,通过SPI接口从FPGA读取各种boot table等等。

    目前基本调试成功。但是,随着代码增大,一部分全局变量(甚至.text)只能load到DDR3上。

    想问的是,如果要实现带DDR3初始化的SPI Boot,需要怎么做?

    我在这个帖子中http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/10240.aspx,看到您说要初始化DDR3,则一定要二次Boot。把DDR3初始化的参数列表放到EEPROM上。

    如果要load .text到DDR3,一定要二次Boot吗?直接在SPI Boot所需的bin文件里附上DDR3的初始化参数列表,不行吗?

    *******************************************************************************************************************************

    3. 目前,我把C6670所需的4个.text都load到了MSMCSRAM中的同一块上,即4个Core的各自的.text的物理地址一样。再做Boot时,总是会出现一些问题。

    请问,能否将4个Core各自的.text load到MSMCSRAM上同一个物理存储块上,且4个Core代码执行时不冲突?


  • 你们好:

    我也遇到同样的问题:

    1. 是不是即使8个核同样的代码,用一个工程,也要有8个cmd或者platform,然后把每个核的.text指定到不同的地址上,8个cmd还好说,8个platform是不是就对应这8个.out文件,这样又变成多核多镜像了!

    2. 现在只找到一个多核产生8个 .out文件的例子,有没有8个核生成一个.out的例子 ,哪怕很简单的功能就行。