1. 互斥量(Mutex)
特点
-
用途:用于保护共享资源,确保同一时间只有一个任务可以访问该资源。
-
优先级继承:当高优先级任务等待互斥量时,持有互斥量的低优先级任务会临时提升到高优先级,避免优先级反转问题。
-
释放要求:必须由获取互斥量的任务释放。
使用场景
-
保护共享资源(如全局变量、外设寄存器等)。
-
避免多个任务同时访问临界区。
代码示例
#include "FreeRTOS.h"
#include "task.h"
#include "semphr.h"
// 定义互斥量句柄
SemaphoreHandle_t xMutex;
// 共享资源
int sharedResource = 0;
// 任务1:访问共享资源
void Task1(void *pvParameters) {
while (1) {
// 获取互斥量
if (xSemaphoreTake(xMutex, portMAX_DELAY) == pdTRUE) {
// 访问共享资源
sharedResource++;
printf("Task1: sharedResource = %d\n", sharedResource);
// 释放互斥量