各位TI的工程师:
我碰到这样一个问题:我现在做的项目需要在核0里通过网口接收数据(NDK),在核一中通过BCP实现编解码,由于NDK和BCP都需要用到QMSS,就涉及在多核中配置QMSS,查看了相关文档,发现没有介绍如何在多核中使用QMSS。现在我采用如下方式做的:在MSMC中开辟了一块专门区间,并在核0以及核1将.cppi以及.qmss两个段都定位到该区间,然后在核0中调用qmss_init初始化qmss,调用qmss_insertmemregion()开辟了memregion0并调用cppi_initdescriptor初始化gloabl_fdq0供NDK使用;在核一中由于QMSS已经初始化完毕,直接调用qmss_start使得核一可以使用QMSS,接着调用qmss_insertmemregion()开辟了memregion1并调用cppi_initdescriptor()在memregion1中初始化global_fdq1,供BCP使用,现在主要有两个问题
1 请问我这样做的思路有没有问题?(程序中确保核0中初始化QMSS的程序(如上所描述)在核1中相应的程序之前运行)
2 在两个核中分别调用qmss_queue_open(),其中队列类型为QMSS_STARAVTION_QUEUE,队列号均为QMSS_QNUM_NOT_SPECIFIED,两个核都开始运行后发现只打开了一个队列,按照我的想法应该是打开两个队列才对。但我如果在核一中调用打开队列这个函数之前打上断点,然后再执行,发现就成功分配了两个队列。是不是该函数没有考虑过多核的情况(例如核0在打开队列时,占有一个semaphore,直到核0打开队列完成后才释放该semaphore,否则核1无法去打开队列)?
Billy smith:
回复 Andy Yin1:
谢谢回复,现在问题已经解决,是由于多核维护的问题(cache一致性),我用的PDK那个版本内定义了多核维护的接口,但该接口实现是空的,添加保持cache一致性的代码后问题解决