freertos线程通信的例子
时间: 2023-02-28 21:07:00 浏览: 75
下面是一个 FreeRTOS 线程通信的例子:
```
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#define QUEUE_LENGTH 10
#define QUEUE_ITEM_SIZE sizeof(int)
QueueHandle_t xQueue;
void sender_task(void *pvParameters)
{
int i = 0;
while (1)
{
xQueueSend(xQueue, &i, 0);
i++;
vTaskDelay(pdMS_TO_TICKS(1000));
}
}
void receiver_task(void *pvParameters)
{
int received_item;
while (1)
{
if (xQueueReceive(xQueue, &received_item, portMAX_DELAY))
{
printf("Received: %d\n", received_item);
}
}
}
int main(void)
{
xQueue = xQueueCreate(QUEUE_LENGTH, QUEUE_ITEM_SIZE);
xTaskCreate(sender_task, "Sender", configMINIMAL_STACK_SIZE, NULL, 1, NULL);
xTaskCreate(receiver_task, "Receiver", configMINIMAL_STACK_SIZE, NULL, 1, NULL);
vTaskStartScheduler();
return 0;
}
```
这个例子创建了一个名为 "sender_task" 的发送者线程和一个名为 "receiver_task" 的接收者线程。发送者线程每隔 1 秒发送一个整数到队列中,接收者线程持续地从队列中接收数据,并将其打印出来。
这个例子展示了如何使用 FreeRTOS 的队列来实现线程间的通信。