我在使用C6678进行多核触发的调试,但是始终仅有CORE0能够运行,其他CORE始终无法触发运行。
不知道在多核触发的编译、加载、运行方面还有什么特别要注意的。
我的代码已经简化成下面的样子:
Void main()
{
uint32_t core = 1;
if(DNUM == 0)
{
printf("in core %d is running\n",DNUM);
DEVICE_REG32_W(KICK0, 0x83e70b13);
DEVICE_REG32_W(KICK1, 0x95a4f1e0);
printf("in core %d _c_int00:%p BOOT_MAGIC_ADDR(core):%p…..\n",core,&_c_int00, BOOT_MAGIC_ADDR(core));
DEVICE_REG32_W(BOOT_MAGIC_ADDR(1), (uint32_t)&_c_int00);
DEVICE_REG32_W(IPCGR(1), 1);
while(DEVICE_REG32_R(BOOT_MAGIC_ADDR(1)) != 1)
{
;
}
printf("triger Core %d complete\n",1);
}
else if(DNUM == 1)
{
printf("in core %d is running\n",DNUM);
DEVICE_REG32_W(MAGIC_ADDR, 1);
}
}
CFG文件的配置:代码段放置于MSMCSRAM,其余段放置于L2SRAM。
运行时现象是:
[TMS320C66x_0] in core 0 is running
[TMS320C66x_0] in core 1 _c_int00:c20e540 BOOT_MAGIC_ADDR(core):1187fffc…..
由于CORE1没有触发运行,始终在下面循环校验。
while(DEVICE_REG32_R(BOOT_MAGIC_ADDR(1)) != 1)
{
;
}
Jane Lu:
renoir shee ,
您是用仿真器下载程序,2个核同时运行,还是用boot方式启动?
renoir shee:
回复 Jane Lu:
运行时是由仿真器加载代码到Core0的。
现在发现一个现象,是不是Core1不能由仿真器connect?仅connectCore0的时候是可以触发Core1的,我把Core1中运行的代码改成了修改一个DDR的固定地址的值,例如*((volatile unsigned int *)(0xa6000000)) = 0x12345678;发现这个地址成功被修改了,是否证明了Core1已经被触发运行了呢?