core0写200个数据到MSMC,core1读取,前16个是正确的,后面都不对。
DDR3_DATA1放在MSMC中。
if(coreNum == 0)
{
#ifdef L2_CACHE
CACHE_invL2 ((void *) &DDR3_DATA1, 4, CACHE_WAIT);
#else
CACHE_invL1d ((void *) &DDR3_DATA1, 4, CACHE_WAIT);
#endif
for(i=0;i<200;i++)
{
DDR3_DATA1[i] = i+45;
}
#ifdef L2_CACHE
/* writeback L2 */
CACHE_wbL2 ((void *) &DDR3_DATA1, 4, CACHE_WAIT);
#else
/* Writeback L1D */
CACHE_wbL1d ((void *) &DDR3_DATA1, 4, CACHE_WAIT);
#endif
}
else
{
for(ppp=0;ppp<3000;ppp++)
asm(" NOP 9");
#ifdef L2_CACHE
CACHE_invL2 ((void *) &DDR3_DATA1, 4, CACHE_WAIT);
#else
CACHE_invL1d ((void *) &DDR3_DATA1, 4, CACHE_WAIT);
#endif
for(i=0;i<200;i++)
{
Data_core1[i] = DDR3_DATA1[i];
}
}
King Wang1:
应该是cache操作的问题,LZ查查看你的全局变量是不是按照cache line的size对齐的。