大家好:
现在我在调试的一个C6678的工程是这样的:整个工程产生一个.out文件,并将这个.out load进8个core,这样8个core就能共享同一个工程。我的问题是这样的:
1.根据.cmd文件,这个工程的.data,.text等段都是放在L2 SRAM里面的,那么既然只有一个.out,而多个core都会去同时访问它的话,那么是否会产生冲突等问题?
2.现在只有一个.out,一个.cmd,那么8个core需要执行的.text等段应该是相同的吧?也就是它们的可执行代码是相同的?但是如果8个core分别要执行不同的代码,该怎么办?我看了工程源文件它的大题框架是这样的:
selfId = CSL_chipReadReg (CSL_CHIP_DNUM);//每个core读取自己的id号
if (selfId == 0)
{
core 0需要执行的代码;
}
else
if(1<=selfId<=6){
core 1~6需要执行的代码;
}
else
{
core 7需要执行的代码;
}
但想不明白的就是core 0~core 7都load的是同一个.out,那么它们的可执行字段以及程序都应该是相同的啊?用if语句它们执行的程序又不一样,这该怎么解释。还是我哪里理解错了?
3.在源文件中,当编译后会生成一个.map文件,如果在源文件中的某个函数之前添加static字样,在.map文件中就不能看到该函数;如果去掉static重新编译,在.map里就能看到,这又是为什么?
希望各位能够指点迷津。
谢谢!
Adam Yao94020:
1. L2RAM时每个核的私有RAM,你的data和txt段都定义在L2RAM中,下载之后就相当于每个核的私有RAM中都有一份,不会发生冲突。
2. CSL_chipReadReg (CSL_CHIP_DNUM)函数读取到的是寄存器中的核号(0-7),根据核号选择下面不同的执行分支
3. static相当于把这个函数变成内联函数,所以编译以后就看不到这个函数的地址了
studying:
回复 Adam Yao94020:
Adam,
非常感谢您的回答,如果在.cmd中将data,txt等段放在DDR中也可以吧?L2 SRAM可以理解了,毕竟core 0(0x10800000)至core 7(0x17800000)都留有私有的RAM,如果放在DDR中那么下载之后如何让每个核都能私有一份?
studying:
回复 Adam Yao94020:
Adam,
谢谢您的回答。
user4523903:
回复 Adam Yao94020:
请问,这个虚地址的对应是如何完成的?
Andy Yin1:
回复 user4523903:
虚实地址映射是配置XMC MPAX寄存器,参考multicore program guide 及MSMC user guide。
http://www.ti.com/lit/an/sprab27b/sprab27b.pdf
http://www.ti.com/lit/ug/spruhj6/spruhj6.pdf