• 信号量semaphore
    • tos_sem_create
    • tos_sem_destroy
    • tos_sem_pend
    • tos_sem_post
    • tos_sem_post_all

    信号量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 信号量值溢出。