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

6678多核IPC问题

程序是这样设计的:

先启动core1-core7等待,然后启动core0。

core0给core1-core7发IPC中断。

然后,core1-core7收到中断后,又都给core0发IPC中断,即设置IPCAR0的最后一位为1。

运行的结果是,core1-core7都能准确的收到core0发来的IPC中断,但是,在收到中断后,同时给core0发中断时,core0只能收到 core1、core3和core7三个核发来的IPC中断,运行很多次都是这样,这是为什么呢,core1到core7的代码都是一样的,是不是同时给IPCAR0的最后一位置1的时候会产生冲突,应该如何避免呢?怎么保证其他7个核同时来IPC时的时候不冲突?

这种问题在设计多核程序的时候应该很常见吧,希望能得到解答,谢谢

Andy Yin:

您好,

多核同时写一个资源确实存在冲突从而可能导致中断丢失。IPC只是其中的一种最简单的核间通信方式,还有很多其他的核间通信方式如Navigator就可以避免冲突。建议在实际软件开发时可以直接使用MCSDK安装完之后的IPC,其中封装了核间、及器件之间的通信API,并且由于MCSDK一直在升级,具有很强的移植性。请参考,谢谢!

Yu Liu:

回复 Andy Yin:

hao wu ,

您好!

可以考虑core1~core7使用IPCGR0中不同的SRCS比特,最后再置位IPCG比特。中断服务例程里面检查所有的SRCS比特都处理掉。

hao wu1:

回复 Yu Liu:

Yu Liu,您好!

我就是这样设置的,通过读取SRCS比特判断来自具体core1-7哪个核,但是现在问题不是在识别哪个核心的,而是在 触发core0中断产生了冲突,要触发中断只能通过写 IPCGR0的最后一位吧,如果同时写这一位就会导致中断丢失

Thomas Yang1:

你好

你可以在中断程序中while查询IPCGR的不同标志,然后执行相应的中断处理子程序即可,这样即使core0总的中断响应次数少了,但不会丢失相应中断处理流程。

谢谢!

Yu Liu:

回复 hao wu1:

hao wu,

感谢您的及时确认!

dongdong xiao1:

回复 hao wu1:

我想问一下,这个核间中断服务程序只有一个吗?只有一个event对应IPC_LOCAL,如果要实现不同核发的中断服务程序不同,该怎么配置?希望能得到回复!

xingacy:

回复 hao wu1:

你好 问一下 你的IPCAR进行清除操作,是直接在对应位置上赋值1吗?我也是这样的操作,但是没有清除不掉,请问你知道是什么原因吗?

赞(0)
未经允许不得转载:TI中文支持网 » 6678多核IPC问题
分享到: 更多 (0)