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.

6678 QMSS CPPI多核通信



各位好!

        本人最近基于EVM6678开发板在学习6678的编程,之前先基于NDK的client例程改写了一个网络通信的程序,然后基于PDK包中的InfrastructureMCExampleProject学习多核通信。

        目前想将多核通信例程的代码移植到网络通信的代码中,遇到了一些问题想请教各位:

        1. InfrastructureMCExampleProject例程中,core0向其他core发送数据,会触发其他core的中断,从而使其他core接收数据,但是本人合并后的代码(合并网络和核间通信的初始化代码,完全采用了核间通信的代码,同时核间通信在main函数中执行,不和网络通信有交集),core0发送数据后,任何中断都没有产生,不知道这是为什么?

       2. 合并代码的cfg文件是基于NDK的client,增加了 InfrastructureMCExampleProject例程cfg文件包含的内容。本人曾测试,将InfrastructureMCExampleProject例程中的cfg文件采用合并后的cfg文件替换(代码中增加了一些空的task等为了编译时不报错),代码也不能正确运行(和1现象相同)。不知道核间通信还需要特殊配置cfg文件吗

    困扰好久,希望各位帮忙解答,多谢!

  • 问题原因已经找到。

    是因为在NDK例程中,.far被分配在了DDR3上,而qmss例程的.far是在L2SRAM。

    因此合并工程以后,原来qmss例程中的描述符、中断等在.far字段的内容就跑到了DDR3上,导致程序无法接收到数据。

    具体为什么必须不能分配在DDR3上,我还不是很明白,继续请各位释惑。

    另外还有一个问题:NDK例程中,网络通信占据的是通道0,而qmss内核通信中,也使用到了通道0,不知道应该如何改变网络通信的通道号或者内核通信的通道号。

    谢谢各位!

  • 在DDR3上时需要注意cache一致性的维护,可能是qmss代码中某些地方对于存放DDR时需要修改。

    至于你说的通道号指的是什么通道,CPPI 通道么?如果是CPPI通道的话,C667x DSP的Netcp与QMSS infrastructure CPPI的通道是独立的,有各自的通道,所以不存在冲突。

  • 谢谢Andy的解答!

    由于对6678了解欠缺,所以问题描述的比较有问题。

    CPPI的通道和Netcp的通道是不冲突的,冲突的地方在这里:

    首先我们运行NDK的例程可以发现,它在core 0上注册了eventID 48, vectID 7的中断

    而我们的qmss中,在内核通信时也要注册中断:

    如果只注册core1-7,此时在core0上的网络通信没有问题,core0向其他core发送数据也没有问题,只是不能接收数据。

    但是如果也注册了core0,此时网络通信与内核通信就都有问题了。发现是网络在建立连接时,本来应该进入到NETCP的数据跑到了内核通信的core0中断中。

    同时我也尝试了将core0-7内核通信的eventID改到49,但是结果一样不可以。

    求解答,谢谢!