您好,
我使用的编译环境为CCS5.0,对代码进行软仿。
代码是基于BIOS的,在main函数中完成IPC和存储数据空间的初始化后,设置1个task,完成基本功能,代码的结构如下,代码编译时开启了-o1的优化选项:
void TsKFunc()
{
mess_data[ CoreNum ] = Process1();
if( CoreNum == 0)
{
data = Process2();
mode = 1;
...
}
}
Process1()是由8核共同执行的,Process2是由核0单独执行的。8核共享的数组mess_data[8]存储在SL2中。
软仿时,基于所使用处理数据:核4会对mess_data的相应位置写1,也就是mess_data[4]=1,其他核则是0,然后通过Process2的处理把8核检测到的信息累加赋值给data,也就是data=1。
但是现在软仿时却出现了以下现象:
软仿时,断点打在mode=1处,这时去核0中查看data的值为0,再去查看mess_data的值,在cache中mess_data[0]~mess_data[7]全为0,但是在SL2中mess_data[4]为1,其他的为0。再去查看其他核中mess_data的值,cache中和SL2中mess_data[4]为1,其他的为0。
也就是说在执行Process2时,不知道为啥核0的cache里mess_data[4]的值变成0了,导致data的结果也出错了。
请问这是为啥?我们也尝试在Process2处理之前对mess_data进行了cache invalid的操作,但是仍然会出现data的结果为0的情况。
这种时候应该去查些什么?怎么解决这个问题?请各位大佬们赐教!