FreeRTOS 互斥量

← 返回 FreeRTOS | ← 主页


OSAL源码

文件作用
osal_mutex.h公开接口
osal_internal_mutex.hWrapper与适配层接口
osal_mutex.c参数检查与封装
os_impl_mutex.cFreeRTOS实现

1. 添加配置

App/app_init/user_task_config/user_task_reso_config.h

typedef enum
{
    MUTEX_IDX_I2C = 0,
    MUTEX_IDX_MAX
} user_mutex_idx_t;
 
osal_mutex_handle_t user_mutexes[MUTEX_IDX_MAX] = {NULL};

2. 创建

App/app_init/user_task_config/user_task_reso_config.c

osal_mutex_create(&user_mutexes[MUTEX_IDX_I2C]);

3. 保护共享资源

访问共享资源的业务 .c

if (osal_mutex_take(user_mutexes[MUTEX_IDX_I2C],
                    OSAL_WAIT_FOREVER) == OSAL_SUCCESS)
{
    /* 访问共享I2C资源 */
    osal_mutex_give(user_mutexes[MUTEX_IDX_I2C]);
}

互斥量只能在任务中使用,不能在中断中获取或释放。

4. 删除

App/app_init/user_task_config/user_task_reso_config.c

osal_mutex_delete(user_mutexes[MUTEX_IDX_I2C]);
user_mutexes[MUTEX_IDX_I2C] = NULL;