硬汉嵌入式论坛

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

[FreeRTOS] xQueueReceive接收问题:函数返回pdPASS,但是接收结构体地址上数据是空的

[复制链接]

1

主题

0

回帖

3

积分

新手上路

积分
3
发表于 2020-5-18 11:41:49 | 显示全部楼层 |阅读模式
部分代码如下:
static void thread_insert_queue(void *pvParameters)
{
    BaseType_t xResult;
    const TickType_t xTaskWokenByReceive =pdMS_TO_TICKS(3000); /* 设置最大等待时间为500ms */
    static BaseType_t err;
    static cmd_t *pcmd_t = NULL;
    //struct list_head list = {0};  //定义链表(头)
    //INIT_LIST_HEAD(&list);  //初始化链表(头尾相接,形成空链表循环)

    while(1)
    {
        if(GprsMessage_Queue != NULL)
        {
            // 队列是否满
            if( uxQueueMessagesWaiting( MQTTMessage_Queue ) != 0 )
            {
                PRINT_DEBUG( "GUIMessage_Queue should have been empty!\r\n" );
            }
            //请求消息MQTTMessage_Queue
            err = xQueueReceive(MQTTMessage_Queue,                  /* 消息队列句柄 */
                                (void *)&pcmd_t,//(void *)&DownMassage->cmd,    /* 这里获取的是结构体的地址 */
                                (TickType_t)xTaskWokenByReceive);       /* 设置阻塞时间 */
            if(err == pdPASS)   //接收到消息
            {
                PRINT_DEBUG("队列MQTTMessage_Queue ,数据接收OK!\r\n");
                DownMassage = (message_t *)mymalloc(SRAMDTCM,sizeof(message_t));
                if (NULL == DownMassage)
                {
                    MSGPKT("mAlloc Memory For Message Queue Fail:\r\n");
                    goto IDLE_RUN;
                }
                memset(DownMassage, 0, sizeof(message_t));
                MSGPKT("cmd.tcmd.type:%08X\r\n",pcmd_t->tcmd.type);//此处数据是全0
           }
    }
}


消息发送部分代码:
                if(MQTTMessage_Queue!=NULL)                {                        DISABLE_INT();//进入临界区                        pcmd_t = cmd;                        ENABLE_INT();//退出临界区                        PRINT_DEBUG("cmd->tcmd.type6 :%08X\r\n",pcmd_t->tcmd.type);                        /* 向消息队列发数据,如果消息队列满了,等待10个时钟节拍 */                        err = xQueueSend(MQTTMessage_Queue,                                 /* 消息队列句柄 */                                                        (void *)&pcmd_t,        /* 发送结构体指针变量ptMsg的地址 */                                                        (TickType_t)10 != pdPASS);                //向队列中发送数据                        if(err==errQUEUE_FULL)    //发送失败,即使等待了10个时钟节拍                         {                                PRINT_DEBUG("队列MQTTMessage_Queue已满,数据发送失败!\r\n");                        }                        PRINT_DEBUG("队列MQTTMessage_Queue ,数据发送OK!\r\n");                }
消息队列创建:
    MQTTMessage_Queue=xQueueCreate(MQTT_MESSAGE_Q_NUM,sizeof(struct cmd_t *)); //创建消息GprsMessage_Queue,队列项长度是串口接收缓冲区长度            if(MQTTMessage_Queue == NULL)    {        /* 没有创建成功,用户可以在这里加入创建失败的处理机制 */                PRINT_ERR("创建消息队列MQTTMessage_Queue失败!");    }
现象:接收到消息但是读取出来的数据是空的




回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106739
QQ
发表于 2020-5-18 11:46:26 | 显示全部楼层
方便的话,把字体稍微修改下。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 13:59 , Processed in 0.166041 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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