各位专家您好:
我是一名在校学生,刚接触6678不久。了解到做多核之间通信需要利用处理器间中断IPC和核间通信寄存器来实现。在参照多核培训教材中的MCSDK部
分关于6678PDK的例程QmInfraMC有如下一个图的解释:
再参照例程运行的console打印信息并且结合程序逐步看配置过程,发现还是看不明白。具体是怎么一个配置的流程
正对这个例程的操作,我应该怎样来弄明白呢?
想请问有什么相关文档说明配置多核之间通信的步骤不?
还有想了解Multicore Navigator是怎么具体处理不同核之间的数据交互应该怎么做呢?
恳请指导~
如果有需要CONSOLE信息附在附件中
Andy Yin1:
这个图讲的是在初始化完之后,run-time的处理流程,用的是Navigator来实现核间通信,所以需要了解Navigator的使用流程,你可以再看看Navigator的手册及培训资料。
Eric Xing:
回复 Andy Yin1:
您好:
之前因为因为一些事情不得不暂时放下对这个的研究。这几天吧Navugator的UG看了看,同时也在6678上调试了下,有了些新的问题。还是这个例程,结合这个图:
1.完成初始化后Core0发送一个包时:在TxFreeQue中POP一个Desc (Desc为Mono型),把数据缓冲区复制添加到Desc里,设置源和目的信息以及包长度,再把Desc放到TxQue里面,当它排到头DMA就会自动发送其对应的数据。不知道这样的描述是否正确?
2.接收包时,数据接收到后会存放在接收FIFO中,然后PKTDMA会从Rx Free DescQue pop一个空的Desc,然后用收到的Desc信息填充Rx Free Desc,最后将Rx Free Desc 写到Rx Queue,数据写到对应地址?
3.通过RxQ704接受包后产生中断,产生中断是通过PDSP,PDSP在这里产生中断是通过列表满吧?感觉不像配置accumulator的寄存器来设定中断产生阈值,
在中断程序里
面, each core pop descriptor from sync free queue4000, and push it to sync queue3000 to generate sync signal to other cores.程序里CORE123不断检测syncQueHnd的EntryCount,当其为0是表示得到同步信号。
想知道为什么是通过这种方式来同步呢。SYNC queue,sync free queue是在属于哪部分的?还有EntryCount是什么?
4.核得到同步信号后有以下:
/* Recycle the sync descriptors */
if ((desc = (Cppi_Desc *) Qmss_queuePop (syncQueHnd)) != NULL)
{
/* Push descriptor to sync free queue */
Qmss_queuePushDesc (syncFreeQueHnd, (UInt32 *) desc);
}
/* Recycle the Tx descriptors from Tx completion queue to Tx free queue */
Qmss_queueDivert (txCmplQueHnd, txFreeQueHnd, Qmss_Location_TAIL);
这两程序的作用是什么?搞不懂。。问题比较多哈~恳请指导。。。