您好:
我想知道c6678在上电的时候如何将8个核的.ou文件加载到每个核?
谢谢
si cheng:
回复 King Wang:
8个核的的.out文件在烧写到flash前,是否会先合并成一个.out文件?如果是,core0 boot 时,是否会将合并成的.out文件全部一次性的加载到core0内,然后再将其他核的代码和数据分别分发给其他的核? 如果是,c6678的bootload.asm和其他单核型号的DSP(比如C6455)的bootload.asm是否是一样的?
King Wang:
回复 si cheng:
这个与用户的具体实现相关。
所有out文件可以一次性烧到flash里面,然后加载;也可也只加载core0的out文件,然后启动core0后再通过主机与core0交互(主机将其余out文件信息发送给core0)完成对其余核out文件的加载。
bootload的代码应该基本是类似的,可能由于增加boot方式而增加了部分代码,但主体功能相同。
si cheng:
回复 King Wang:
King Wang,您好:
我现在是想从flash启动,有以下几个问题:
1.您说的所有的out文件是指8个核的out文件合并后的out文件还是分别将每个核的out文件烧写到flash?
2.合并后的out文件的table格式是原来的单核的那种格式还是将8个out文件的table格式合并成一个了?
3.您说的只加载core0的out文件,然后启动core0后再通过主机与core0交互。您这里的主机是指什么?如果先加载core0,其他的核的启动信息存放在哪?
4.二级加载时,C6678 启动的时候,DMA控制器会去flash的起始地址拷贝多少的启动程序?c6455是1KB。
非常感谢!
si cheng:
回复 si cheng:
您好:
好多天了,怎么还没人回复啊?
King Wang:
回复 si cheng:
si cheng:
您好,很抱歉这么久才回复。
问题1和2是同一个问题:每一个out文件可以对应一个boot table,多核的多个boot table可以合成到一起(但是在cmd文件里面需要写物理地址)。这种合并的table还是一个table,你可以理解由于多个table的物理地址不同,多增加核只是增加table中对其他core的地址的赋值。
问题3:主机是指可以跟DSP通信的东西,比如Ethernet boot,需要主机向DSP发送Ethernet packet,SRIO boot时也需要主机向DSP发送SRIO packet. 先加载Core0,其他信息可以保存在主机里面。等到core0起来之后,可以通过正常通信的方法加载。
问题4:我在C6678的手册中没有找到,我还在询问其他同事,等到确定后我再给您答复,很抱歉!
谢谢!
si cheng:
回复 King Wang:
King Wang ,您好:
单核boot table表的格式:c_int00地址,第一个段的大小,第一个段的地址;第二个段的大小,第二个段的地址。。。
按照您的说法:由于多个table的物理地址不同,多增加核只是增加table中对其他core的地址的赋值。合并后的table 也就是将8个核的table分别存放到了不同的物理地址吗? 如果是,2级bootload程序最后跳转到的c_int00地址是哪个核的c_int00地址?
谢谢!
King Wang:
回复 si cheng:
si cheng:
首先,各个核的内存应该是不重叠的,这样就能把所有table叠加在一起;
其次,bootload都是在core0上执行的,所以跳转地址应该是core0的地址,然后通过core0将其余core触发。触发的方法就是可以是写其余core的MAGIC_ADDRESS,也可以通过IPC发送核间中断触发。
谢谢!
si cheng:
回复 King Wang:
King Wang ,您好:
bootload将所有核的程序数据加载到各自核内后,core0是先写其他核的MAGIC_ADDRESS地址,让其他核先执行,然后在跳转到C_int00;还是先跳转到c_int00,进入main函数,再写其他核的MAGIC_ADDRESS地址触发其他核执行?这两种方式会导致每个核不是同一时刻启动。
谢谢!
Yu Liu:
回复 si cheng:
si cheng,
如果核0链接的是TI编译器的默认入口,就需要到main函数才可用起动别的核。
也可用将编译器入口源码boot.asm加入工程,修改从入口开始的汇编代码提前启动别的核。
你的理解没有问题,两种方法起动其他核时间稍有不同。