freertos互斥信号量示例
时间: 2024-06-17 20:00:32 浏览: 20
FreeRTOS是一个流行的嵌入式实时操作系统,它提供了一系列的同步机制来保证多个任务之间的正确协作。其中,互斥信号量就是一种非常重要的同步机制。
互斥信号量是一种用于保护共享资源的机制。在FreeRTOS中,通过调用函数xSemaphoreCreateMutex()可以创建一个互斥信号量。在使用互斥信号量时,需要先通过函数xSemaphoreTake()获取互斥信号量的拥有权,然后进行共享资源的访问,最后通过函数xSemaphoreGive()释放互斥信号量。
以下是一个简单的示例代码,演示如何使用FreeRTOS互斥信号量:
```
#include "FreeRTOS.h"
#include "semphr.h"
// 创建一个互斥信号量
SemaphoreHandle_t xMutex = NULL;
void task1(void* pvParameters)
{
while (1)
{
// 获取互斥信号量的拥有权
if (xSemaphoreTake(xMutex, portMAX_DELAY) == pdTRUE)
{
// 访问共享资源
printf("task1 access shared resource\n");
// 释放互斥信号量
xSemaphoreGive(xMutex);
}
// 休眠一段时间
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
void task2(void* pvParameters)
{
while (1)
{
// 获取互斥信号量的拥有权
if (xSemaphoreTake(xMutex, portMAX_DELAY) == pdTRUE)
{
// 访问共享资源
printf("task2 access shared resource\n");
// 释放互斥信号量
xSemaphoreGive(xMutex);
}
// 休眠一段时间
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
void app_main()
{
// 创建一个互斥信号量
xMutex = xSemaphoreCreateMutex();
// 创建两个任务
xTaskCreate(task1, "task1", 2048, NULL, 10, NULL);
xTaskCreate(task2, "task2", 2048, NULL, 10, NULL);
}
```