FreeRTOS 互斥量
OSAL源码
| 文件 | 作用 |
|---|---|
| osal_mutex.h | 公开接口 |
| osal_internal_mutex.h | Wrapper与适配层接口 |
| osal_mutex.c | 参数检查与封装 |
| os_impl_mutex.c | FreeRTOS实现 |
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;