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

关于6678核间数据传输出错的问题

问题是这样的:核0和核1通信,在MSMC上定义了一段内存区,用于存放核间共享的数据,每次将数据copy到内存区之后使用notify通知另外一个核去读取,数据长度大概1400Byte,数据内容中特定字段包含了包序号,接收端使用读取数据并检查连续的两包数据包序号是否连续,测试结果发现出现1/10000的概率的包序号重复,重复的两包刚好是丢了中间一包,现象看似发送端没有将数据copy到共享内存区,但实际copy成功了,目前不知道如何解决,急求解答!

另外,系统只使用了L1D(L2 cache size 为0),从之前的帖子看说是MSMC需要关闭prefetch,使用下面的代码应该是关闭了吧

void Osal_InvalidCache(void * blockPtr, Uint32 byteCnt)
{

 if(byteCnt>0xFFFF*4)
  byteCnt= 0xFFFF*4;
 if((Uint32)blockPtr>=0x0C000000&&(Uint32)blockPtr<0x0D000000) //SL2
 {
  CACHE_invL1d((void *)blockPtr, byteCnt, CACHE_WAIT);
  CSL_XMC_invalidatePrefetchBuffer();
 }
 else if((Uint32)blockPtr>=0x10000000)  //DDR or other cores
 {
  CACHE_invL2((void *)blockPtr, byteCnt, CACHE_WAIT);
  CSL_XMC_invalidatePrefetchBuffer();
 }
 _mfence();
 _mfence();

}

请问这可能是什么问题?急需各位大神帮助

Xiaohua Cao:

缓存的一致性维护从一开始就做了,应该不会是缓存维护的问题吧

Thomas Yang1:

回复 Xiaohua Cao:

应该是notify和copy之间的timing优化问题,请问您的notify是怎么实现的,接收侧是在中断中去读取copy的帧号码的吗

Xiaohua Cao:

回复 Thomas Yang1:

使用NotifySendEvent发送一个事件,接收端在中断中去读取共享内存区的数据

赞(0)
未经允许不得转载:TI中文支持网 » 关于6678核间数据传输出错的问题
分享到: 更多 (0)