TI中文支持网
TI专业的中文技术问题搜集分享网站

关于messageq使用的问题

A方,使用静态方式创建MessageQ消息结构体,然后给B方发送(MessageQ_put)消息HostMsg,如果B方接收(MessageQ_get)消息HostMsg后,不应答(重新MessageQ_put),这样执行后会出现什么问题??

A方,创建消息如下:

    /* create local message queue (inbound messages) */
    MessageQ_Params_init(&msgqParams);
    MsgQ_LReply = MessageQ_create(MsgQLocalName, &msgqParams);
    if (MsgQ_LReply == NULL) {
        IoMsg_Error("Error: %s, line %d: Dsp_conMsgQHost: message queue create failed\n",
                __FILE__, __LINE__);
        status = -1;
        goto leave;
    }

    /* get the SR_0 heap handle */
    ShRegion_heap = (IHeap_Handle)SharedRegion_getHeap(0);
    /* allocate a static message buffer from SR_0 heap */
    HostMsg = (Server_Msg *)Memory_alloc(ShRegion_heap, HostMsgSize, 0, NULL);
    if (HostMsg == NULL) {
        IoMsg_Error("Error: %s, line %d: Dsp_conMsgQHost: could not allocate message\n",
                __FILE__, __LINE__);
        status = -1;
        goto leave;
    }

    /* initialize message header, only needs to be done once */
    MessageQ_staticMsgInit((MessageQ_Msg)HostMsg, HostMsgSize);
    MessageQ_setReplyQueue(MsgQ_LReply, (MessageQ_Msg)HostMsg);
然后,A发送消息到B方:       

status = MessageQ_put(MsgQ_Remote, (MessageQ_Msg)HostMsg);//发送当前消息

B方接收消息并进行处理:

        status = MessageQ_get(hoMsgQue, (MessageQ_Msg *)&DspHostMsg,1000);//MessageQ_FOREVER
        if (status == MessageQ_E_FAIL)
        {
            IoMsg_Error("Dsp_ProcMsgThread: message get error=%d", (IArg)status);
            goto leave;
        }
        else if(status < 0)
            continue;

     //对消息DspHostMsg进行处理

但是不把接收到的DspHostMsg,进行以下代码应答:

                MessageQ_QueueId queId = MessageQ_getReplyQueue(DspHostMsg); /* type-cast not needed */
                MessageQ_put(queId, (MessageQ_Msg)DspHostMsg);
这时候,

1、A的HostMsg能再次使用吗,再次使用时,若B未进行处理,会覆盖掉之前的内容吗

2、B在收到消息DspHostMsg后,不应答的情况下,需要对DspHostMsg进行释放操作吗,此消息在A方是静态创建的

3、A和B间的消息通路会存在问题吗

因为使用的参考例子是ex09_readwrite,是1对1无限等待方式的,由于担心无限等待若出现异常则整个系统都会锁死,所以改为有限等待方式

Kevin Le82:

这个论坛,没有地方可以查看到自己发表的所有主题,希望能改进下,进入用户那里应该可以查看自己的主题列表,这样才方便用户维护自己的问题

Denny%20Yang99373:

不应答的话A不知道B收到数据了,没法同步。。。

Kevin Le82:

回复 Denny%20Yang99373:

现在发现IPC里面很有问题,不知道其他人怎么用的,难道都没出问题吗?

如果静态MsgQ消息重复put上去,接收端就会出现异常导致崩溃。所以其他人在应用时put和get要配对,暂未使用动态的msgQ方式,不知道这种情况下有没有其他问题

赞(0)
未经允许不得转载:TI中文支持网 » 关于messageq使用的问题
分享到: 更多 (0)