问题解决一段时间了,分享下我的处理过程。总觉得我的处理不对劲,或者根本就不应该是这样处理的,但多核确实还是起来了。还希望大家能够提出建议。
1.固定c_int00入口;其实照理来说确实是不需要固定的。【 一般做boot时,代码基本就基本固定了】,最后再找出c_int00入口,修改boot的c_int00入口。
参考这个帖子 http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/p/73810/252410.aspx
可是我经常要烧写进去看效果,稍微改动些地方有可能c_int00入口就变了,所以我还是选择了固定。我是这样固定的:
首先,我针对不同的核新建了platform。【下面是核0的,其他核只是L2SRAM不一样】
因为我不清楚像上面那个帖子一样如何用一个platform使得不同核的code/data/stack放到不同的空间。
然后,新建了cmd文件。【下面是核0的】
MEMORY
[
CORE0 (RWX) : org = 0x10800000, len = 0xc0
]
SECTIONS
[
.text:_c_int00 > CORE0
platform_lib > DDR3
]
最后就可以使用这段代码固定入口了
#if EVM_6670_6678 //1->6678 0->6670
pBootMagicAddCore0 = (int*)0x1087FFFC; //boot magic address (the last word)
#else
pBootMagicAddCore0 = (int*)0x108FFFFC;
#endif
// (*pBootMagicAddCore0) += 0x10800000; // translate to global address
(*pBootMagicAddCore0) = 0x10800000;
for(i = 1; i < CORENUM; i++) //write the other cores' boot magic address
[
*(pBootMagicAddCore0+ (0x01000000*i)/4 ) = (*pBootMagicAddCore0) + 0x01000000 * i;
]
IpcGr0 = (int*)0x02620240;
/*warning:when running on no-boot mode,core0~core7 must all be connected to the target*/
for(i = 1;i < 4;i++)//core0 sent ipc interrupt to
[
*(IpcGr0+i) = (*(IpcGr0+i)) | 0x00000001;
]