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.

c6678利用共享变量进行核间通信的问题一个核使用bios另外一个核裸奔



      咨询一个问题,我用c6678进行双核通信,一个工程跑bios,另外一个工程裸奔,使用共享变量通信,我在bios下使用了cache_wb()函数,据说是bios默认使能了cache,在裸奔情况下,我没有使能cache,但为了安全起见,我还是禁止使用了cache,但是共享内存通信不能成功,我在0x80000000处也看到了其中一个工程确实写入了了变量,但是另一个工程的0x80000000处的变量没有变化请问怎么回事,既然是同一个地址为什么会有两种不同显示 ?
     
 bios下代码为
/*在cmd文件中定义.BootStatus     >  0x80000000     START(BootStatus)*/
extern volatile unsigned int far BootStatus[8];

void Delay(volatile unsigned int n)
{
unsigned int i;

for(i = n; i > 0; i--);
}

void recv_trans(void)   //bios建立的静态任务
{

BootStatus[0] = 0xabab;
Cache_wb((void *)BootStatus[0], 4, Cache_Type_ALLD, TRUE);
_mfence();
_mfence();

Delay(0x0FFFFFFF);
printf("has trans\n");

}

Int main()

    BIOS_start();

    return(0);
}
 裸机下的代码为:

/*在cmd文件中定义.BootStatus     >  0x80000000     START(BootStatus)*/
extern volatile unsigned int far BootStatus[8];

void Delay(volatile unsigned int n)
{
unsigned int i;

for(i = n; i > 0; i--);
}

int main(void) {

unsigned int a=0;
 short i;
 CSL_CgemRegs *C66xCorePacRegs;
  C66xCorePacRegs = (CSL_CgemRegs *)CSL_CGEM0_5_REG_BASE_ADDRESS_REGS;

for(i = 128; i < 256; i++)
{
C66xCorePacRegs->MAR[i] = 0;
}


for(;;)
{

a =*((unsigned int*)(0x80000000));
printf("a is %x\n",a);
printf("recv value is %x\n",BootStatus[0]);

Delay(0x0FFFFFFF);

}

}
下面的图是在bios工程下截取的可以看到确实把数据写到了共享内存处,但是在裸机的工程查看此处的数值没有变化