TI中文支持网
TI专业的中文技术问题咨询交流网站

c6678 ipc 共享区域数据修改不成功

TI工程师您好! 我使用ipc 共享区域与其它核进行数据交互。我创建了一个56个字节长度的存储空间,循环赋值,用notify将地址传给子核做运算。程序通过信号量进行同步操作。但调试中发现数据只有第一次写成功。第二次子核读取出的数据与第一次的一样。这是什么原因造成的?主核更改过数据后,调用了cache_wbAll(); 我的共享区域定义于MSMC中。

请问:

多核交互变量,定义于共享内存,任何核写入后均立刻writeback,读出前Invalid;变量定义全部对齐到cache line大小。这个cache line的大小应该是多少?

Nancy Wang:

cache line大小:
L1P: 32 bytes
L1D: 64 bytes
L2: 128 bytes
读之前有没有Invalid,在CCS中View->memory中,勾上cache选项,观察一下memory的变化,再分析看看是没有修改成功,还是读取的时候有问题。

user6307690:

回复 Nancy Wang:

谢谢! 我看一下内存中的内容,从0核看,每个区域数据都有变化 ,但从子核角度看内存,传递到此子核 的内存区域中的内容没有变,是第一次赋的值 。请问这有可能是什么原因造成的?读之前使用了Invalid.因为我使用这个区域不只一次,之前读之前用了invalid.读完之后是不j是要恢复成valid?

请问 invalid cache 调用哪个函数 ?

Nancy Wang:

回复 user6307690:

把相关的代码贴出来看一下。

Nancy Wang:

回复 user6307690:

用CSL里面的代码:
CACHE_invL1d (start address, byte count,wait)
CACHE_wbL1d (start address, byte count,wait)
CACHE_invL2(InBuffB, BUFSIZE, CACHE_WAIT);
CACHE_wbL2(OutBuffB, BUFSIZE, CACHE_WAIT);

user6307690:

回复 Nancy Wang:

我在程序使用下面这个函数 Cache_disable(Cache_Type_ALL); 与上面的4个函数有区别吗?

Nancy Wang:

回复 user6307690:

你是用的sys/bios下的API,Cache_disable应该是禁用缓存,试试看用Cache_inv().
Void Cache_inv(Ptr blockPtr, SizeT byteCnt, Bits16 type, Bool wait);
software-dl.ti.com/…/Cache.html

赞(0)
未经允许不得转载:TI中文支持网 » c6678 ipc 共享区域数据修改不成功
分享到: 更多 (0)