FreeRTOS 二进制信号量:xSemaphoreCreateBinary 函数详解
xSemaphoreCreateBinary 函数是 FreeRTOS 中的一个函数,用于创建一个二进制信号量。
函数原型如下:
SemaphoreHandle_t xSemaphoreCreateBinary( void );
该函数的返回值是一个 SemaphoreHandle_t 类型的变量,即一个二进制信号量的句柄。
二进制信号量是一种特殊类型的信号量,只有两个状态:0 和 1。它常用于同步任务之间的执行顺序,或者用于任务与中断之间的同步。
使用 xSemaphoreCreateBinary 函数创建一个二进制信号量后,可以通过其他 FreeRTOS 的 API 函数对该信号量进行操作,如 xSemaphoreTake、xSemaphoreGive 等。
示例代码如下:
SemaphoreHandle_t binarySemaphore;
void task1(void *param) {
// 创建一个二进制信号量
binarySemaphore = xSemaphoreCreateBinary();
if(binarySemaphore == NULL) {
// 信号量创建失败
}
while(1) {
// 等待二进制信号量
if(xSemaphoreTake(binarySemaphore, portMAX_DELAY) == pdTRUE) {
// 二进制信号量被释放
// 执行任务 1 的操作
}
}
}
void task2(void *param) {
while(1) {
// 执行任务 2 的操作
// 释放二进制信号量
xSemaphoreGive(binarySemaphore);
}
}
在上述示例代码中,task1 任务在执行过程中会等待二进制信号量的释放,而 task2 任务在执行完一段操作后会释放二进制信号量。这样就可以实现 task1 和 task2 的交替执行。
原文地址: https://www.cveoy.top/t/topic/pfOL 著作权归作者所有。请勿转载和采集!