我在学习6678IPC中断启动其他核。但是我遇到了一点问题。
当我从0核的L2P SRAM利用memcpy搬移其中的代码内存到其他核的SRAM 的时候,总是提示我出现错误:A memery access has been pending for 10000 cpu cycles。要搬移的内存块有0x60000这么大。
不知道问题出在什么地方,能不能帮我分析下??
能不能把您的源代码发给我一份,感激不尽。我是初学者,看了一周文档和程序都没进展。
if(coreID ==0)
{….
for(core=1;core<8;core++)
{
boot_entry_point = BOOT_ENTRY_POINT +0x10000000 + core*0x01000000;
memcpy((void*)point_entry_point,(void*)BOOT_ENTRY_POINT,0x60000);
boot_magic_point = BOOT_MAGIC_POINT + core*4;
*boot_magic_point = boot_entry_point;
…
}
…..
}
Andy Yin1:
您好,
多核启动过程中,程序是由RBL负责搬移并解析到相应的地址,应用程序负责写magic address启动其他的核,参考www.deyisupport.com/…/10240.aspx
gao shilin:
回复 Andy Yin1:
Hi Andy
这个问题已经解决了,在板子上是可以搬移了。我还有个问题,
我们的设想是在0核先启动,然后通过0核搬移程序代码到从核的二级SRAM,然后发送一个IPC中断给从核,让从核启动。这个设想可以不可以实现呢?写到magic address的地址是什么地址,cint_00的地址吗?IPC中断发送的时候不需要bios的支持吧?
gao shilin:
回复 Andy Yin1:
Andy,辛苦了;我还想问下6678每个核的magic address地址是多少?我去找网站上的bootloader,文件已经撤消了。
gao shilin:
回复 Andy Yin1:
Andy你好~
我先把所有的主核SRAM里面的代码或数据都复制到从核,然后我找到每个核的magic address,应该是SRAM的最后一个word,将_c_int00的地址赋给magic address,然后用IPC中断出发从核。请问我的IPC中断也发出了,为什么从核还是没有启动,是不是需要在前面加些其他设置?平台的还是IPC的?需要用到ipc_start()吗?
gao shilin:
回复 Andy Yin1:
Andy 你好~
我的问题解决了,原来是我在搬移代码的时候不应该把主核SRAM中的最后256个字节搬过去,不搬过去就能启动,搬过去就不行。我想请问一下,这最后256个字节里写了什么代码???
我是直接连的电脑加载并不是烧进去的。我主核和从核想运行同一个程序,通过if判断使主从核进行不同的操作。我说的搬移代码就是我在加载从核的时候,不解析out文件了,直接将主核的SRAM里面的代码搬到从核SRAM中(也就是说主从核用的同一个工程)作为从核的代码,然后写Magic address,启动从核。
Andy辛苦了~