freertos里任务间通信是通过什么方式?用代码举例说明
时间: 2024-02-15 16:03:02 浏览: 185
进程间通信的方法和实例
FreeRTOS 中的任务间通信可以通过多种方式实现,其中最常用的是消息队列和信号量。
1. 消息队列:任务之间通过消息队列传递数据,发送任务通过向队列发送消息,接收任务通过接收队列消息来获取数据。以下是一个简单的示例:
```c
// 创建一个消息队列
QueueHandle_t xQueue = xQueueCreate(10, sizeof(int));
// 发送任务向队列发送消息
int data = 123;
xQueueSend(xQueue, &data, portMAX_DELAY);
// 接收任务从队列接收消息
int receivedData;
xQueueReceive(xQueue, &receivedData, portMAX_DELAY);
```
2. 信号量:任务之间通过信号量来同步和共享资源。以下是一个简单的示例:
```c
// 创建一个二值信号量
SemaphoreHandle_t xSemaphore = xSemaphoreCreateBinary();
// 发送任务释放信号量
xSemaphoreGive(xSemaphore);
// 接收任务等待信号量
xSemaphoreTake(xSemaphore, portMAX_DELAY);
```
在这个示例中,发送任务释放了信号量,而接收任务等待信号量。只有在发送任务释放信号量后,接收任务才能获取信号量。
阅读全文