This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

C6678,Multicore Navigator,任务分配系统同步应用遇到的问题



  C6678,EVM板,Multicore Navigator,任务分配系统同步应用遇到的问题,主核发送core->command = 0x11的第一条指令无问题,从核正确解析,可是我从1201队列取出描述子(描述子地址在共享)修改其内容为指令0x22(process->command = 0x22;)时候发现主核存储区改了,但是从核的地址区域值没有改变,而且从核对收到的描述子进行解析仍旧是core->command = 0x11。

主核(已经初始化时候在2001压入描述子(描述子地址在共享),1201队列初始化为0描述子,空)

typedef struct
{
int command;
int dataaddr;
int resultaddr;
}Dispatch;

core = (Dispatch *)pop_queue(2001);
core->command = 0x11;
core->dataaddr = 0xff;
core->resultaddr = 0xaa;
push_queue(1000, (int )core);//主核发送core->command = 0x11的第一条指令无问题,从核正确解析

 while(queueStatusConfigRegs[1201].REG_A_EntryCount==0);//同步完成
process = (Dispatch *)pop_queue(1201);
process->command = 0x22;//从1201队列取出描述子(描述子地址在共享)修改其内容为指令0x22,问题出现了主核描述子内容改变,从核不变,从核对收到的指令进行解析仍为0x11即没有修改成功
process->dataaddr = 0xee;
_mfence(); //force all memory operation complete
push_queue(1000, (int )process);

从核

while(1)
{
if(queueStatusConfigRegs[1000].REG_A_EntryCount!=0)
{
process = (Dispatch *)pop_queue(1000);
coreID = process->command;
switch(coreID)
{
case 0x11:
printf("任务准备");
push_queue(1201, (int )process);
break;
case 0x22:
printf("任务识别");
push_queue(1201, (int )process);
break;
case 0x33:
printf("任务返回");
break;

default :

push_queue(1201, (int )process);

break
}
}

为什会出现这种位于共享存储区域的描述子,该存储地址数据不能被修改,或者说,主核修改后,但从核却没有,但第一条指令修改的时候主从都没问题??

谢谢 !盼望解答

  • 听起来好像是cache一致性的问题。你检查过仿真器中cache的值么?简单些你可以把descriptor定义到非cachable的区域,或者在每次读的时候做一下cache invalidate。

    如果是cache问题,请关注精华贴中的关于cache一致性相关的文章

  • 如您所说,在昨天的进一步调试中我也发现关掉从核的cache结果正确。今天尝试您提供的操作cache的方法也正确。

    我查询了相关的手册,有这样一个问题,对DDR的cache是可以设置的,是不是可以这样理解L1的cache对L2、SL2的RAM起作用,SL2和L1D的cache一致性需要用软件来维护,不能像DDR那样通过MAR设置?我是指或者可以直接就不cache  SL2 了。

  • SL2或者DDR是否cachable是由MAR寄存器控制的。总共有256个MAR寄存器用来控制相关的内存区间。物理上相同的一块内存,可以通过MPAX映射到不同的地址空间,采用不同的cache策略。

    具体内容可以参考

    TMS320C66x DSP CorePac User Guide
    Literature Number: SPRUGW0B

  • 你好,你有没有   不是基于BIOS的多核通信的程序,能不能分享一下