跳转至

通过队列传递指针

发送指针时发送指针

//传递结构体的指针
/* 创建10个存储指针变量的消息队列,由于CM3/CM4内核是32位机,一个指针变量占用4个字节 */
xQueue = xQueueCreate(10, sizeof(struct Msg *));    //单元大小为一个指针变量的大小

//发送消息,实现结构体指针的传递 
MSG_T *ptMsg;        //MSG_T为结构体声明
ptMsg = &g_tMsg;   /* 初始化结构体指针 */
// 初始化数组 
ptMsg->ucMessageID = 0;
ptMsg->ulData[0] = 0;
ptMsg->usData[0] = 0;
//使用消息队列实现指针变量的传递 
if (xQueueSend(xQueue2,                  /* 消息队列句柄 */
               (void *) &ptMsg,           // 发送结构体指针变量ptMsg的地址  “&”  取结构体指针的地址,传递指针
               (TickType_t) 10) != pdPASS)

//接收消息,接收结构体的指针
    MSG_T *ptMsg; //定义一个结构体指针
xResult = xQueueReceive(xQueue2,            /* 消息队列句柄 */
                        (void *) &ptMsg,      // 这里获取的是结构体的地址,类似于 char *a="stm";char *b;b=a 指针赋值,a和b指向同一个地址
                        (TickType_t) xMaxBlockTime);/* 设置阻塞时间 */
if (xResult == pdPASS) {
    /* 成功接收,并通过串口将数据打印出来 */
    printf("接收到消息队列数据ptMsg->ucMessageID = %d\r\n", ptMsg->ucMessageID);
    printf("接收到消息队列数据ptMsg->ulData[0] = %d\r\n", ptMsg->ulData[0]);
    printf("接收到消息队列数据ptMsg->usData[0] = %d\r\n", ptMsg->usData[0]);
}