TI中文支持网
TI专业的中文技术问题搜集分享网站

变量在IPC中断服务函数出现异常

在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,却进了两次中断么?你可以基于我们的例子测试是否存在相同的现象。

赞(0)
未经允许不得转载:TI中文支持网 » 变量在IPC中断服务函数出现异常
分享到: 更多 (0)