os_sem_init

所属模块:同步机制 | 类型:信号量初始化函数

API Metadata

函数ID:os_sem_init
模块:semaphore
类型:semaphore init
嵌套深度:1

函数简介

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 初始计数值(资源可用数量)

返回值

1 - 初始化成功
-1 - 参数非法

源码实现

#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 时任务将进入阻塞等待状态。

相关推荐