surge 发表于 2021-7-31 09:25:55

消息队列发送两条消息,但接收队列里只有最后一条消息内容

背景描述:
1.send 和 recv 两个任务,send做为发送任务,recv做为接收任务
2.send任务中,连结发送两条消息,内容不同 value1和value2
3.recv任务中,接收到两条内容 value2 和 value2

伪代码:
static void sendToQueue(uint8_t cmd,uint8_t *buff,uint8_t len)
{
    MOTORCTRL_QUEUE_T *ptMotor = &gMotorCtrlQueue;

    ptMotor->len = 0;
    memset(ptMotor->data,0x00,MOTORCTRL_QUEUE_BUF_LEN);

    ptMotor->cmd = cmd;
    ptMotor->len = len;
    memcpy(ptMotor->data,buff,len);

        /* 使用消息队列实现指针变量的传递 */
        if(xQueueSend(gxMotorCtrlQueue,             /* 消息队列句柄 */
                               (void *) &ptMotor,             /* 发送结构体指针变量ptReader的地址 */
                               (TickType_t)20) != pdPASS )
        {
         xQueueReset(gxMotorCtrlQueue);
         DBG("A the queue is error!\r\n");
       }   
}



void send(void)
{
    sendToQueue(CMD_AA,"\x55\X55\X55\X55",4);
    sendToQueue(CMD_BB,"\xAA\XAA\XAAXAA",4);
}

接收任务:

static void vRecv(void *pvParameters)
{
    while (1)
    {

      //获取到,则执行上位机指令,获取不到,则执行状态查询
      xReturn = xQueueReceive( gxMotorCtrlQueue,    /* 消息队列的句柄 */
                                 (void *)&ptMotor,/*这里获取的是结构体的地址 */
                                 (TickType_t)30); /* 设置阻塞时间 */

   }
   if(pdTRUE == xReturn)
   {
      printf_hex(ptMotor->data);
   }
   vTaskDelay(50);
}

然后我的打印日志是

AA AA AA AA
AA AA AA AA

预期值应该是:
55 55 55 55
AA AA AA AA

但是不知道为什么,就只能收到第二条消息发送过来的内容,有大神知道原因吗?感谢。



regbbs 发表于 2021-7-31 10:12:52

应该把消息队列的初始化部分贴出来供分析。

regbbs 发表于 2021-7-31 10:14:01

消息队列初始化的时候的参数很重要,如果设置不对,消息就不能正常接收。数据长度,RAM空间的分配等检查下。
页: [1]
查看完整版本: 消息队列发送两条消息,但接收队列里只有最后一条消息内容