请选择 进入手机版 | 继续访问电脑版

硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1317|回复: 2
收起左侧

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

[复制链接]

4

主题

18

回帖

30

积分

新手上路

积分
30
发表于 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

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



回复

使用道具 举报

0

主题

213

回帖

213

积分

高级会员

积分
213
发表于 2021-7-31 10:12:52 | 显示全部楼层
应该把消息队列的初始化部分贴出来供分析。
回复

使用道具 举报

0

主题

213

回帖

213

积分

高级会员

积分
213
发表于 2021-7-31 10:14:01 | 显示全部楼层
消息队列初始化的时候的参数很重要,如果设置不对,消息就不能正常接收。数据长度,RAM空间的分配等检查下。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-18 21:47 , Processed in 0.164933 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表