我在shared ram区域定义了一个数据结构如下:
typedef struct{
volatile Bool HEARTBEAT;
volatile Bool DSP_FUNC1;
volatile Bool DSP_FUNC2;
volatile Bool DSP_FUNC3;
volatile Bool DSP_FUNC4;
} sharedCpuVars;
typedef volatile sharedCpuVars *sharedCpuVarsPtr;
sharedCpuVarsPtr sharedVars = (sharedCpuVarsPtr)(0x80000000);
然后分别在arm和dsp程序中进行中断映射,arm触发中断,dsp响应中断,在中断处理过程中去修改HEARTBEAT这个值,arm程序中去读HEARTBEAT这个值
dsp中修改变量:
void SYSCFG_chip3_isr (void)
{
sharedVars->HEARTBEAT |= TRUE;
CSL_FINST(sysRegs->CHIPSIG_CLR, SYSCFG_CHIPSIG_CLR_CHIPSIG3, CLEAR);
}
arm中读变量:
while(sharedVars->HEARTBEAT == FALSE)
{
}
这样的过程如果不用sysbios(V6.33.1.25),一切运行很正常,但是一旦dsp程序中用了sysbios之后,我调试跟踪HEARTBEAT这个值已经被修改为1了,但在arm程序中调试跟踪HEARTBEAT这个值一直是0,不变化。
内存是EMIFA SDRAM
这是为什么呢?