1、定义队列句柄变量
// 定义队列句柄变量
static xQueueHandle xQueue;
2
2、申请队列
// 参数 1 : 队列深度// 参数 2 : 队列项内容大小
xQueue = xQueueCreate(1,20);
3、创建2个线程,发送消息
static void vTaskSender1( void * pvParameters )
{
portBASE_TYPE xStatus;
uint32_t arr1[5] = {1,2,3,4,5};
uint8_t i = 0;
while(1)
{
if(i++ %2 ==0)
{
xStatus = xQueueSendToBack( xQueue, arr1, 5 ); //堵塞任务等待消息队列的消息
}
if( xStatus != pdPASS ) //如果发送消息失败
{
printf("11数据不能发送到消息队列.\r\n");
}
vTaskDelay(1000 / portTICK_RATE_MS);
}
}
static void vTaskSender2( void * pvParameters )
{
portBASE_TYPE xStatus;
uint32_t arr2[5] = {6,7,8,9,0};
while(1)
{
xStatus = xQueueSendToBack( xQueue, arr2, 5 ); //堵塞任务等待消息队列的消息
if( xStatus != pdPASS ) //如果发送消息失败
{
printf("22数据不能发送到消息队列.\r\n");
}
vTaskDelay(1000 / portTICK_RATE_MS);
}
}
4、创建1个线程,接收消息
static void vTaskReceive( void * pvParameters )
{
// uint32_t lReceivedValue;
uint32_t lReceivedValue[10];
portBASE_TYPE xStatus;
uint8_t i;
while(1)
{
xStatus = xQueueReceive( xQueue, lReceivedValue, portMAX_DELAY );//没有超时限制等待消息20000 / portTICK_RATE_MS
if(xStatus==pdPASS) //如果成功接收大到消息
{
for(i = 0; i<5; i++)
{
printf( "接收的数据是: %d\r\n", lReceivedValue[i] ); //打印消息内容
}
}
else //如果没有接收到消息
{
printf("没有接收到消息.\r\n");
}
debug_logI("------------------------------------------");
vTaskDelay(50 / portTICK_RATE_MS);
}
}