信号量semaphore

tos_sem_create

  1. k_err_t tos_sem_create(k_sem_t *sem, k_sem_cnt_t init_count);
  • 功能描述

创建一个信号量。

  • 参数解释

IN/OUT参数名描述[in]sem信号量句柄[in]init_count信号量初始量

  • 返回值

K_ERR_NONE 信号量创建成功。

K_ERR_OBJ_PTR_NULL sem指针为空。

tos_sem_destroy

  1. k_err_t tos_sem_destroy(k_sem_t *sem);
  • 功能描述

销毁一个信号量。

  • 参数解释

IN/OUT参数名描述[in]sem信号量数据结构指针

  • 返回值

K_ERR_NONE 信号量销毁成功。

K_ERR_OBJ_INVALID sem指向的不是一个合法的信号量。

K_ERR_OBJ_PTR_NULL sem指针为空。

tos_sem_pend

  1. k_err_t tos_sem_pend(k_sem_t *sem, k_tick_t timeout);
  • 功能描述

尝试获取一个信号量。

  • 参数解释

IN/OUT参数名描述[in]sem信号量句柄[in]timeout等待超时参数

  • 返回值

K_ERR_NONE 获取信号量成功。

K_ERR_PEND_NOWAIT 获取信号量失败(信号量资源不足),同时timeout参数为TOS_TIME_NOWAIT(表示获取不到信号量时立即返回)

K_ERR_PEND_SCHED_LOCKED 获取信号量失败,同时系统调度处于锁定状态。

K_ERR_PEND_TIMEOUT 在timeout超时范围内未获取到信号量。

K_ERR_PEND_DESTROY 试图获取的信号量被销毁了(tos_sem_destroy)

tos_sem_post

  1. k_err_t tos_sem_post(k_sem_t *sem);
  • 功能描述

释放信号量,并唤醒等待队列上的一个任务。如果有多个任务在此信号量的等待队列上,唤醒优先级最高的任务。

  • 参数解释

IN/OUT参数名描述[in]sem信号量句柄

  • 返回值

K_ERR_NONE 信号量释放成功。

K_ERR_SEM_OVERFLOW 信号量值溢出。

tos_sem_post_all

  1. k_err_t tos_sem_post_all(k_sem_t *sem);
  • 功能描述

释放信号量,并唤醒等待队列上的所有任务。

  • 参数解释

IN/OUT参数名描述[in]sem信号量句柄

  • 返回值

K_ERR_NONE 信号量释放成功。

K_ERR_SEM_OVERFLOW 信号量值溢出。