写一段freertos 信号量代码
时间: 2023-06-30 22:25:49 浏览: 62
好的,以下是一个 FreeRTOS 信号量的示例代码:
```
#include <stdio.h>
#include "FreeRTOS.h"
#include "task.h"
#include "semphr.h"
SemaphoreHandle_t xSemaphore;
void vTask1(void *pvParameters) {
while(1) {
if(xSemaphoreTake(xSemaphore, (TickType_t)10) == pdTRUE) {
printf("Task 1: Semaphore taken\n");
xSemaphoreGive(xSemaphore);
}
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
void vTask2(void *pvParameters) {
while(1) {
if(xSemaphoreTake(xSemaphore, (TickType_t)10) == pdTRUE) {
printf("Task 2: Semaphore taken\n");
xSemaphoreGive(xSemaphore);
}
vTaskDelay(2000 / portTICK_PERIOD_MS);
}
}
int main(void) {
xSemaphore = xSemaphoreCreateMutex();
xTaskCreate(vTask1, "Task 1", configMINIMAL_STACK_SIZE, NULL, 1, NULL);
xTaskCreate(vTask2, "Task 2", configMINIMAL_STACK_SIZE, NULL, 1, NULL);
vTaskStartScheduler();
return 0;
}
```
在这个例子中,我们初始化了一个互斥信号量 `xSemaphore`,并在两个任务 `vTask1` 和 `vTask2` 中使用它。当一个任务获取了信号量时,它会打印一条消息并立即释放信号量。如果另一个任务正在等待信号量,它将立即获取它并打印一条消息。我们使用 `xSemaphoreTake` 函数来获取信号量,使用 `xSemaphoreGive` 函数来释放信号量。
这个示例只是一个简单的演示,实际上你可以根据你的具体需求来使用 FreeRTOS 的信号量功能。