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.

从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员工  帮帮忙解答,,,感激不尽。。

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

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

  • 谢谢!

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

x 出现错误。请重试或与管理员联系。