大家好:
我想使用C6678的pcie boot实现8个核的启动,具体流程是这样的:首先,还是类似于hello world的demo,先从linux PC端传输一个DDR初始化镜像到C6678的core 0进行DDR初始化。然后再传输hello world镜像到C6678的MSMC,向core 0的magic address写入入口地址,然后由core 0依次向core1….7的magic地址写入入口地址并且发送中断唤醒从核(core1……7)。在这里,我的代码改动是对于所有core跑起来后都对其各自的MPAX寄存器进行了配置,配置完成后再对它们各自的magic address清零,等待我的测试代码镜像传过来。接下来,我将测试代码的镜像通过linux pc传输到C6678的DDR中,并且将入口地址写入core 0,让core 0先将我的测试代码跑起来,然后core 0再将这个入口地址依次写入7个从核的magic address(以上过程都ok),问题来了:按理说这样的话7个从核都应该跳转到我的测试代码开始执行,因为magic address已经是我实际代码的entry address了,但实际上总是有那么1~2个从核会跑飞了,如下图所示:
这只是某次测试的其中一种情况,这次情况是core7跑飞,按理说core7应该是从magic address上的0x9002AA0开始跑,但实际上却到了0xDD7D9594,而其余几个core正常。用整个一套相同的测试,有的时候是其它core跑飞,core7正常。甚至有的时候连CCS还会出现如下错误:
我想请教下这可能是什么原因?
谢谢!
Thomas Yang1:
我的代码改动是对于所有core跑起来后都对其各自的MPAX寄存器进行了配置,配置完成后再对它们各自的magic address清零,等待我的测试代码镜像传过来
-》》传递完了,再写magic address,然后IPC唤醒,然后才能run吧。 mcsdk boot文件夹下有例子的