freertos 互斥锁如何创建
时间: 2023-08-14 07:06:39 浏览: 197
在FreeRTOS中,可以使用`xSemaphoreCreateMutex()`函数来创建一个互斥锁。
函数原型如下:
```
SemaphoreHandle_t xSemaphoreCreateMutex( void );
```
该函数返回一个`SemaphoreHandle_t`类型的值,即互斥锁的句柄。
使用互斥锁的方法如下:
1. 在需要加锁的代码段之前调用`xSemaphoreTake()`函数获取互斥锁,以防止其他任务同时访问这段代码。
2. 在代码段执行完毕后,调用`xSemaphoreGive()`函数释放互斥锁,以便其他任务可以访问这段代码。
示例代码:
```
SemaphoreHandle_t xMutex;
void vTask1( void *pvParameters )
{
while(1)
{
xSemaphoreTake( xMutex, portMAX_DELAY );
// 执行需要加锁的代码段
xSemaphoreGive( xMutex );
}
}
void vTask2( void *pvParameters )
{
while(1)
{
xSemaphoreTake( xMutex, portMAX_DELAY );
// 执行需要加锁的代码段
xSemaphoreGive( xMutex );
}
}
int main( void )
{
xMutex = xSemaphoreCreateMutex();
xTaskCreate( vTask1, "Task 1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
xTaskCreate( vTask2, "Task 2", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
vTaskStartScheduler();
return 0;
}
```
在上面的示例代码中,通过调用`xSemaphoreCreateMutex()`函数创建了一个互斥锁对象,然后在两个任务中分别使用了该互斥锁来保护需要加锁的代码段。