在main.c文件中定义了一个全局变量,在IPC.C文件的中断服务函数IPC_ISR()中修改其值,调试时看到其值修改过了,但离开IPC_ISR()后其值又恢复为原值,这是什么情况?
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.
在main.c文件中定义了一个全局变量,在IPC.C文件的中断服务函数IPC_ISR()中修改其值,调试时看到其值修改过了,但离开IPC_ISR()后其值又恢复为原值,这是什么情况?
变量是在一个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。
看起来问题的实质不在这上面。
问题是一次触发中断,两次进入中断服务程序,第一次的时候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
附件是工程,问题相关的文件是Init.c(中断设置)、IPC.c(IPC_ISR函数)。
个人觉得可能是中断设置的问题,这方面不熟。
问题已经解决,现象是一次触发、两次进入中断服务函数,但实际上还是两次触发、两次中断,第一次触发没有看到而已。问题是core0先使能了全局中断,然后才进行中断配置,这个时间差造成了一次触发;之后修改为先进行中断配置,再使能全局中断,问题解决。