|
问题如下:
发送函数:
/* 初始化数组 */
ptMsg->ucMessageID = 0;
ptMsg->ulData[0] = 0;
ptMsg->usData[0] = 0;
while(1)
{
/* 使用消息队列实现指针变量的传递 */
if(xQueueSend(xQueue2, /* 消息队列句柄 */
(void *) &ptMsg, /* 发送结构体指针变量ptMsg的地址 */
(TickType_t)1) != pdPASS )
{
/* 发送失败,即使等待了10个时钟节拍 */
printf("向xQueue2发送数据失败,即使等待了10个时钟节拍\r\n");
}
else
{
/* 发送成功 */
ptMsg->ucMessageID++;
ptMsg->ulData[0]++;
ptMsg->usData[0]++;
printf("向xQueue2发送数据成功\r\n");
}
vTaskDelay(1000);
}
接受函数:
xResult = xQueueReceive(xQueue2, // 消息队列句柄
(void *)&ptMsg, // 这里获取的是结构体的地址
(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]);
}
else
{
// 超时
//bsp_LedToggle(2);
//bsp_LedToggle(3);
}
vTaskDelay(100);
结果应该是 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]);
这几个函数应该会从“0”开始打印,然后打印一次加“1”。
但是实际上“0“没有打印出来,第一次打印的是“1”。
实际串口结果如下:
向xQueue2发送数据成功
接收到消息队列数据ptMsg->ucMessageID = 1
接收到消息队列数据ptMsg->ulData[0] = 1
接收到消息队列数据ptMsg->usData[0] = 1
向xQueue2发送数据成功
接收到消息队列数据ptMsg->ucMessageID = 2
接收到消息队列数据ptMsg->ulData[0] = 2
接收到消息队列数据ptMsg->usData[0] = 2
向xQueue2发送数据成功
接收到消息队列数据ptMsg->ucMessageID = 3
接收到消息队列数据ptMsg->ulData[0] = 3
接收到消息队列数据ptMsg->usData[0] = 3
请问各位大侠们,这是什么原因??我百思不得其解。。。 |
|