TI中文支持网
TI专业的中文技术问题搜集分享网站

多核DSP6678共享内存,核1和核2同时运行同一段程序,向共享内存写数据,核0读,只能读到核1的数据,什么原因?

存储区域为DDR;

核1写完,cacheWb;核2写完,cacheWb;核0cacheInv,再读取;

为什么两个核心写入的数据不能全读出来呢?

是因为缺少同步和互斥信号量吗?

user6432786:

有这方面的专家老师,恳请帮忙解决一下

,

user6432786:

有这方面的专家老师,恳请帮忙解决一下

,

Nancy Wang:

请问core1/core2是写到不同的DDR内存地址吗?
回写之后ccs观察memory,数据都更新了吗?

,

user6432786:

core1和core2是写到了不同的DDR内存地址,回写之后在各自核处,看数据更新了,

,

Nancy Wang:

方便将core0读取数据部分的代码贴出来看一下吗?
core0在读取core2写入的这部分内存时,读出来的数据有什么规律吗?

,

user6432786:

我开始把共享内存初始化为0,然后读数的时候都是0

,

user6432786:

核0读数程序

for (i = 0;i<5*3;i++){ if(i>2){ cacheInv((inBuf1+i*3+2),32,TRUE); } L1[i] = *(inBuf1+i*3+2); peak_save[i] = L1[i]; if(i>2){ cacheInv((inBuf1+i*3),32,TRUE); } L2222[i] = *(inBuf1+i*3); if(i>2){ cacheInv((inBuf1+i*3+1),32,TRUE); } L33333[i] = *(inBuf1+i*3+1); }

,

user6432786:

核1和核2写数程序,执行如下的程序 int j=0,p=0,q = 0; for(i = 0;i < 3*3;i++){ if(i%3 == 0){ *(inBuf1 + 3*3*coreId+i)=xxxxxxx[j]; cacheWb(inBuf1 + 3*3*coreId+i,32,1); j = j + 1; } else if(i%3 == 1){ *(inBuf1 + 3*3*coreId+i)=yyyyyyyy[p]; cacheWb(inBuf1 + 3*3*coreId+i,32,1); p = p + 1; } else{ *(inBuf1 + 3*3*coreId+i)=zzzzzzzz[q]; cacheWb(inBuf1 + 3*3*coreId+i,32,1); q = q + 1; } }

,

user6432786:

请问还在吗?能回复一下问题吗,谢谢了

,

Nancy Wang:

先简单测试一段固定的地址看看有没有问题。看你的代码中是循环测试的。

,

user6432786:

我的地址是固定的

,

Nancy Wang:

看读写的流程没看出什么问题。
如果单独测试core2有问题吗?

,

user6432786:

单独测试,core2没问题,core0能从共享内存读到数据。就是core1和core2执行相同的程序,往共享内存写数据时,核0只能读到core1的数据

,

user6432786:

这个可以怎么解决呀,急!!!

,

Nancy Wang:

还有一个cache line的问题需要注意。
1、将每个core的数据定义变量地址间隔为cache line的整数倍。
2、将数据定义对齐到cache line大小
cache write back及invalidate的单元都是cache line,如果非cache line对齐操作,可能会覆盖数据。
另外建议将ccs memory中看到数据的变化截图出来看一下。

,

user6432786:

core1写入共享内存情况

00000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 3F8000003F800000 3F800000 3F800000 3F800000 3F8000003F800000 3F800000 3F800000 00000000 0000000000000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 00000000

core2写入共享内存情况

00000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 3F800000 3F8000003F800000 3F800000 3F800000 3F800000 3F8000003F800000 3F800000 00000000 00000000 0000000000000000 00000000 00000000 00000000 00000000

core0 读取共享内存情况

00000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 3F8000003F800000 3F800000 3F800000 3F800000 3F8000003F800000 3F800000 3F800000 00000000 0000000000000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 00000000

,

user6432786:

谢谢您帮忙解决问题,请尽快回复我,急急急!!!

,

user6432786:

能帮忙解决一下吗?急!!!

赞(0)
未经允许不得转载:TI中文支持网 » 多核DSP6678共享内存,核1和核2同时运行同一段程序,向共享内存写数据,核0读,只能读到核1的数据,什么原因?
分享到: 更多 (0)