SemaphoreHandle_t binarySemaphore = xSemaphoreCreateBinary();
void task1(void *pvParameters) {
while (1) {
// 获取二值信号量
xSemaphoreTake(binarySemaphore, portMAX_DELAY);
// 执行一些任务
printf("任务1正在运行\n");
// 释放二值信号量
xSemaphoreGive(binarySemaphore);
// 延迟一段时间
vTaskDelay(pdMS_TO_TICKS(1000));
}
}
void task2(void *pvParameters) {
while (1) {
// 获取二值信号量
xSemaphoreTake(binarySemaphore, portMAX_DELAY);
// 执行一些任务
printf("任务2正在运行\n");
// 释放二值信号量
xSemaphoreGive(binarySemaphore);
// 延迟一段时间
vTaskDelay(pdMS_TO_TICKS(1000));
}
}
int main(void) {
// 创建二值信号量
SemaphoreHandle_t binarySemaphore = xSemaphoreCreateBinary();
// 创建任务
xTaskCreate(task1, "任务1", configMINIMAL_STACK_SIZE, NULL, 1, NULL);
xTaskCreate(task2, "任务2", configMINIMAL_STACK_SIZE, NULL, 1, NULL);
// 启动调度器
vTaskStartScheduler();
}
FreeRTOS中二值信号量的应用
最新推荐文章于 2024-07-20 21:11:25 发布