咨询一个问题,我用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--);
}
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);
}
}
/*在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工程下截取的可以看到确实把数据写到了共享内存处,但是在裸机的工程查看此处的数值没有变化