目前想利用IPC例程,实现核0中的数据运算完之后传给核1,然后在核1中继续一些操作,操作完之后再传给核0 。请问该怎么在IPC程序上改动?尝试好久都没有实现。
Andy Yin1:
你修改的是哪个例程?可以有很多方法,如EDMA进行数据传输,然后产生中断,或者使用共享memory,产生中断给对方等。
64932136:
回复 Andy Yin1:
我使用的是 IPC_example_on_6678_CCSv51 这个例程。现在就是核0的数据可以处理运行,但是数据处理完之后是存放在核0自己的内存空间中的,核1是没有办法得到核0的处理结果的,怎么样把核0的数据处理结果放到共享空间里面然后可以被核1取出呢?
可以在这个例程上面修改实现吗?
cat cat:
回复 64932136:
可以将CORE 0处理完的数据放在SL2共享存储空间中,然后使用MessageQ的方式通知CORE1到CORE0保存数据的地址空间去取CORE0处理完的数据,只不过CORE1在取CORE0的数据时需要对该数据地址进行cache_inv操作,不然CORE1无法正确取到CORE0保存的数据。
Adam Yao94020:
回复 cat cat:
在keystone中进行核间数据交换的方式很多,可以参考附件的文档。
64932136:
回复 Adam Yao94020:
Adam你好,
我看了这个文件中关于核间数据的交换方式,但是编程的细节还是不清楚。请问有利用这些方式实现数据交换的例程或者实现数据交换这一部分的代码吗?
谢谢。
Adam Yao94020:
回复 64932136:
这篇文章描述的是进行核间数据交换的基本思想,你理解了之后可以以此为模型进行编程。
具体的例子现在还没有。
64932136:
回复 Adam Yao94020:
谢谢你的回答,Adam
1、我现在想把一个程序分为两部分,一部分在核0运行,另一部分在核1运行。为了保证程序的并行处理,我在IPC例程上做了如下修改
if (1 == coreID) { IssueInterruptToNextCore();…….. //运行代码
} if (2 == coreID) { IssueInterruptToNextCore();…….. //运行代码
请问这样可以做到核0与核1的程序并行处理吗?
2、如果核0运行完数据传给核2,这是的核间数据交换可以怎么做?
Adam Yao94020:
回复 64932136:
1. 可以的,但是coreId应该选择0和1
2. 有多种方式,最简单的是开一块共享缓存区,两个核都能访问到的空间。
64932136:
回复 Adam Yao94020:
hi Adam,
1、不好意思,代码没有及时修改,就是按照你说的写的。那这样的话,核0是首先把一个消息告诉核1然后在执行自己的代码,然后核1收到消息后再传送一些消息给 下一个核接着执行自己部分的代码,从而保证核0与核1程序运行的并行性吗?
2、Adam可不可以用代码的形式说明一下 开缓冲区然后各个核访问的 事情。这块不是很明白。
谢谢你的答复。