wangwang328 发表于 2020-5-18 11:41:49

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

部分代码如下:
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失败!");    }
现象:接收到消息但是读取出来的数据是空的




eric2013 发表于 2020-5-18 11:46:26

方便的话,把字体稍微修改下。
页: [1]
查看完整版本: xQueueReceive接收问题:函数返回pdPASS,但是接收结构体地址上数据是空的