在main.c文件中定义了一个全局变量,在IPC.C文件的中断服务函数IPC_ISR()中修改其值,调试时看到其值修改过了,但离开IPC_ISR()后其值又恢复为原值,这是什么情况?
ZhengTian Wang:
自己顶一下,帖子又要沉了
Andy Yin1:
你是在一个core上处理的?有可能是cache的问题,你可以再定义一个变量将其值读出来看看,如果有变化就说明是cache的问题。
ZhengTian Wang:
回复 Andy Yin1:
变量是在一个core上处理的。
我在IPC_ISR()使用了cache:
read_ipcgr = *(volatile Uint32 *) iIPCGRInfo[CoreNum];
#ifdef L2_CACHE CACHE_invL2 ((void *) &ipcgr_value, 4, CACHE_WAIT); #else CACHE_invL1d ((void *) &ipcgr_value, 4, CACHE_WAIT); #endif
ipcgr_value = read_ipcgr;
#ifdef L2_CACHE CACHE_wbL2 ((void *) &ipcgr_value, 4, CACHE_WAIT); #else CACHE_wbL1d ((void *) &ipcgr_value, 4, CACHE_WAIT); #endif
在ISR中查看ipcgr_value是16,其读取的是寄存器IPCGR1的值;
但回到main函数后ipcgr_value还是0。
ZhengTian Wang:
回复 ZhengTian Wang:
看起来问题的实质不在这上面。
问题是一次触发中断,两次进入中断服务程序,第一次的时候ipcgr_value是16,而第二次的时候是0,所以回到main函数后是0。
但怎么解决一次触发中断,两次进入中断服务程序的问题呢?
我以前发过贴,至今没有解决。
“6657的IPC通信与中断挂接的问题”
http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/p/19948/68610.aspx#68610
Andy Yin1:
回复 ZhengTian Wang:
在你的工程中加入cmd再看看,要不然把你的工程发上了看看。
ZhengTian Wang:
回复 Andy Yin1:
附件是工程,问题相关的文件是Init.c(中断设置)、IPC.c(IPC_ISR函数)。
个人觉得可能是中断设置的问题,这方面不熟。
ZhengTian Wang:
回复 Andy Yin1:
工程已经传上来了,TI工程师有空的话帮忙看看
Andy Yin1:
回复 ZhengTian Wang:
你的程序是基于我们的例子修改的吧,你确认只写了一次IPCGR,却进了两次中断么?你可以基于我们的例子测试是否存在相同的现象。