os_sem_init
所属模块:同步机制 | 类型:信号量初始化函数
函数简介
os_sem_init 用于初始化信号量资源,
设置初始计数 value,并清空等待队列。
信号量用于实现任务同步与资源计数控制,
支持 P/V 操作模型,是 RTOS 基础同步机制之一。
函数原型
char os_sem_init(u8 sid, char init_val);
参数说明
| 参数 |
说明 |
| sid |
信号量ID(0 ~ OS_RESOURCE_MAX-1) |
| init_val |
初始计数值(资源可用数量) |
源码实现
#include "hrtos_internal.h"
/* =========================================================
* 信号量初始化
*/
char os_sem_init(u8 sid, char init_val)
{
OS_RESOURCE *sem;
if(sid >= OS_RESOURCE_MAX)
{
return -1;
}
sem = &OS_RES[sid];
/* -------------------------
* 初始化信号量状态
* ------------------------- */
sem->value = init_val; /* 资源计数 */
sem->owner = OS_INVALID_ID; /* semaphore 不使用 owner */
sem->wait_mask = 0; /* 清空等待队列 */
sem->wait_cnt = 0; /* 兼容字段 */
return 1;
}
使用示例
void system_init()
{
os_sem_init(0, 3);
}
注意事项
信号量初始值决定可用资源数量,
value=0 时任务将进入阻塞等待状态。