尊敬的TI工程师:
在测试C6678多核内存读写时发现,CORE1向地址0x0C24009C写入数据后,CORE7无效化L1DCache后进行读取操作会改变该地址处的值,
,此时红色出的数值是CORE1写入的,单步调试停在读取这一行
,单步步入后发现
似乎这个赋值操作会改变该地址处的数值,多次单步调试发现,每次的数值都是这一个,而且其他核写入核7读取都是成功的。代码截图如下:
。
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.
尊敬的TI工程师:
在测试C6678多核内存读写时发现,CORE1向地址0x0C24009C写入数据后,CORE7无效化L1DCache后进行读取操作会改变该地址处的值,
,此时红色出的数值是CORE1写入的,单步调试停在读取这一行
,单步步入后发现
似乎这个赋值操作会改变该地址处的数值,多次单步调试发现,每次的数值都是这一个,而且其他核写入核7读取都是成功的。代码截图如下:
。
测试发现如果读取后加一个CACHE_wbInvL1d(ControlPara[0], sizeof(ControlPara), CACHE_WAIT); 便可以读取到正确的数值。
这是没加CACHE_wbInvL1d(ControlPara[0], sizeof(ControlPara), CACHE_WAIT),利用CCS内存查看功能得到的截图
CACHE_wbInvL1d
你是在core1在写入数据之后增加了回写操作吗,一般cpu只是修改了缓存中的数据,但它的下级内存没有更新,需要回写进行更新。
更多内容请阅读cache user guide:
我的操作流程是CORE1 写回Core7无效化然后读取,这个CACHE_wbInvL1d是CORE7的使用的,CORE7原本用CACHE_invL1d我改用CACHE_wbInvL1d后得到了正确数据。
理论上读取数据应该是不需要回写的,暂时不太清楚是什么原因导致的。