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.

C6657写内存



两个地址,一个是0x80000000,一个是0x90000000,core0先往0x80000000写一个int 0,然后将网络传输得到的数据写到0x90000000,再往0x80000000中写一个非0数。core1一直读0x80000000,当读到的数不为0时就将0x90000000中的数取出。

程序运行后发现core1无法读出0x90000000的数据,用memory browser查看内存情况,发现core0和core1的0x90000000的数据都是网络发送来的数据,而且core0的0x80000000处已经变成了非零数,但是core1的0x80000000处一直是0,而且以0x80000000为起始的一小段内存背景颜色是蓝色。请问这是什么原因?

  • Hi,  您好!

     

    0x80000000是DDR地址,您需要考虑cache一致性维护。有如下方法:

    1. 将0x80000000为起始地址的一段内存设置成non-cacheable,这样0x80000000的数据就不会备份到高速缓存(L1/L2)

        设置的方法参见文档TMS320C66x DSP CorePac User Guide (SPRUGW0B)

    2.  在core0写完0x80000000后,执行一下cache writeback函数,这样可以保证数据真实写到了0x80000000,而不是写到了高速缓存

     

    谢谢 !