6487的3个核都运行SYS/BIOS,用ccs加载out文件正常,但是打包成bin文件通过Emac加载,core0可以正常启动,其他两个核PC在0x800000,指令为IDLE
请教一下,我的代码缺少了什么,怎么让其他两个核出IDLE?
有没有相关调试经验的,麻烦指导一下,谢谢~~
King Wang1:
这个是因为core1和core2的base address(如0x11800000和0x12800000)的值是0.
core0发现其余core的base address为0时,就会将IDLE写到其余两个core的base address位置,然后将其余两个core唤起,这就造成了你看到的状态。
xiaomin zhang1:
回复 King Wang1:
怎么解决呢?
之前编的版本无法启动,挂上仿真器看L2的起始地址没有跳转到_c_int00的代码,查了些资料将vecs段放到了0x10800000,0x11800000和0x12800000,
但是这个跳转指令前确实有三个NOP,所以就造成了现在两个核进入IDLE了。
具体需要怎么解决?
非常感谢~~
King Wang1:
回复 xiaomin zhang1:
你在把core1和core2的out文件制作为boot table的时候需要加上 -e _c_int00的选项,保证你的_c_int00的地址在你制作的btbl文件的最前面。
当然,每个core都有_c_int00的函数,肯定不是NOP和0.
xiaomin zhang1:
回复 King Wang1:
hex6x转换时是加了-e _c_int00选项的,制作的btbl文件最前面的是cinit段,我尝试过哪个段在前面和sections中的顺序也没有关系,按照什么顺序排列的我不太清楚?
而L2地址最前面是vecs段,vecs段最前有是3个Nop,然后才会跳转到_c_int00。