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

从core1上去读core0上DDR的数据,结果有误,求高手解答。。

我现在遇到的情况是:

在shram上开辟一段空间,存放一个结构体如:

struct

{    void *    buffer;

……}A a;

在core0上对a->buffer = calloc()一段空间,然后往里面循环充数据;

每充完一次cache_wbL1d();(这里没开L2cache);

然后在core1上首先从shram读取这个结构体,读出来的buffer地址值是正确的,

接着cache_invL1d()(也没开L2cache);

core1上第一次读出来的数据是对的,后面就变成有时对,有时不对,关于cache的一致性除了用的那两个函数,在核之间还有其他的特殊性吗?为什么数据会不对呢?

附加一个问题:我在单核上,创建线程,然后直接加锁操作很简单,那如果我要对不同的核进行加锁怎么操作?比如说,一个在shram的共用结构体里面的变量,如果在核0上被使用,在核1上就要等候,这个锁是个什么原理????

求大神及TI员工  帮帮忙解答,,,感激不尽。。

Andy Yin1:

L1D cache需要保证地址和长度64B对齐,然后对于写端,在写完后可以尝试write back and invalid,在读数端,在读完数后进行invalid。

不同的核也可以使用信号量互斥。

user1746900:

回复 Andy Yin1:

谢谢!

地址和长度64B对齐,怎么保证??比如我在shram里放一个结构体A,#pramga DATASECTION(.share),#pramga ALLIGN(64),是这样对齐吗?您说的读数端,读完后我加了wbInvallL1d(),这样对吗? 不同核使用信号量互斥,这个怎么用,有没有实例及说明文件什么的指导性东西,非常感谢!!!

赞(0)
未经允许不得转载:TI中文支持网 » 从core1上去读core0上DDR的数据,结果有误,求高手解答。。
分享到: 更多 (0)