嵌入式开发者社区

标题: arm双线程和两个dsp建立MessageQ失败问题 [打印本页]

作者: beying    时间: 2019-8-5 13:58
标题: arm双线程和两个dsp建立MessageQ失败问题
问题描述如下:
1,arm上起两个线程,分别自己创建消息队列(MessageQ_create)
2、2个dsp上用MessageQ_create创建消息队列(dsp创建了之后就MessageQ_get等待)。
3、完了之后arm上的线程1打开dsp1的消息队列,线程2打开dsp2的消息队列(MessageQ_open)。



4、arm两个线程代码一样的,只有建立消息的名称不一样:(日志如下:)
这是arm自己MessageQ_create的日志
线程1:MessageQ_create(HOST1:MsgQ:01 ok
线程2:MessageQ_create(HOST2:MsgQ:01 ok
红色是arm自己创建的队列名称 arm线程创建队列成功
4、dsp的代码也一样,只是消息队列标识不一样,日志如下:
Server: MessageQ_create(DSP1:MsgQ:01) OK
Server: MessageQ_create(DSP2:MsgQ:01) OK
红色为dsp创建的队列名称  dsp创建成功
5、arm中线程1去open dsp1的对垒,线程2去open  dsp2的队列,日志如下:
DEBUG [2018-07-06 06:46:24:590][1602][ARM_MessageQInit][arm.c:52]open remote MessageQ(DSP1:MsgQ:01)
DEBUG [2018-07-06 06:46:24:591][1603][ARM_MessageQInit][arm.c:52]open remote MessageQ(DSP2:MsgQ:01)

代码我仔细对比了没有问题,但是只有线程1能打开dsp1的队列,线程2去打开dsp2的队列(open remote MessageQ(DSP2:MsgQ:01))一直失败。这种2个线程去分别连接两个dsp的消息队列,有什么要设置的吗?您那边需要看我这边的什么信息告诉我,我粘上来。
作者: beying    时间: 2019-8-5 15:13
贴上关键代码:
dsp2:
MessageQ_Params_init(&msgqParams);
    sprintf(msgqName,"%s:%s",v_pDspName, App_MsgQueName);
    Log_print1(Diags_INFO,"MessageQ_create(%s) begin\n", msgqName);
    v_pModule->slaveQue = MessageQ_create(msgqName, &msgqParams);
说明:v_pDspName=“DSP2”
        #define App_MsgQueName                 "MsgQ:01"


arm线程2:
sprintf(msgqName, "%s:%s",v_pDspName, App_MsgQueName);
    do {
        status = MessageQ_open(msgqName, &v_pModule->slaveQue);
        LOG_Debug("open remote MessageQ(%s)", msgqName);
        sleep(1);
    } while (status == MessageQ_E_NOTFOUND);
说明: v_pDspName=“DSP2”
          #define App_MsgQueName                 "MsgQ:01"

arm始终在(status == MessageQ_E_NOTFOUND)里面循环open
作者: 梁淑怡-Tronlong    时间: 2019-8-6 08:55
您好,
  目前没有相关案例可供您参考,建议先排查一下attach的连接是否成功

作者: beying    时间: 2019-8-6 09:46
attach的连接是什么?这个请稍微描述详细点,我对这个确实不熟,代码中我没搜到attach语句。谢谢
作者: beying    时间: 2019-8-6 10:42
找到了,估计你说的是Ipc_attach函数,我正在试。
作者: beying    时间: 2019-8-6 11:58
试了,搞不定。Ipc_attach只有dsp-to-dsp那个例子用了,要调用Ipc_attach,之前必须调用Ipc_start,我在两个dsp中调用Ipc_start都会返回失败。
作者: 梁淑怡-Tronlong    时间: 2019-8-6 18:40
您好,
  ARM是可以访问两个DSP处理器的, 您可以参考tl-messageq-gpmc-edma案例修改版,联系技术支持获取资料参考。假如是双线程只是调用了MessageQ_open,应该与此案例差不多。
[attach]5415[/attach]





欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4