uCOSIII-任务内嵌信号量
任务内嵌信号量,是µC/OS-III 为每一个任务都分配了一个到任务控制块结构体中的任务内嵌信号量。
任务内嵌信号量是分配于每一个任务的任务控制块结构体中的,每一个任务都有独自的任务内嵌信号量,任务内嵌信号量只能被该任务获取,但是可以由其他任务或者中断释放。
每个任务的内嵌信号量在创建的时候都已经被创建好了,并且发出的信号能够直接到达指定的任务中,因此使用内嵌信号量的效率比使用内核对象的信号量高得多,在实际的开发当中,可以优先考虑使用任务内嵌信号量。
一、µC/OS-III 任务内嵌信号量相关 API 函数
1)函数 OSTaskSemPend()
该函数用于获取任务内嵌信号量。
OS_SEM_CTR OSTaskSemPend(
OS_TICK timeout, //任务挂起等待任务内嵌信号量的最大允许时间
OS_OPT opt, //函数操作选项
CPU_TS* p_ts, //指向接收任务内嵌信号量接收时的时间戳的变量的指针
OS_ERR* p_err) //指向接收错误代码变量的指针
OS_SEM_CTR类型返回值:任务内嵌信号量更新后的资源数。
2)函数 OSTaskSemPendAbort()
该函数用于终止任务挂起等待任务内嵌信号量。
CPU_BOOLEAN OSTaskSemPendAbort(
OS_TCB* p_tcb, //指向任务控制块的指针
OS_OPT opt, //函数操作选项
OS_ERR* p_err) //指向接收错误代码变量的指针
返回值CPU_BOOLEAN:终止任务挂起是否成功。 3)函数 OSTaskSemPost()
该函数用于释放指定任务的内嵌信号量。
OS_SEM_CTR OSTaskSemPost(
OS_TCB* p_tcb, //指向任务控制块的指针
OS_OPT opt, //函数操作选项
OS_ERR* p_err) //指向接收错误代码变量的指针
OS_SEM_CTR 类型返回值:任务内嵌信号量更新后的资源数。
4)函数 OSTaskSemSet()
该函数用于强制设置任务内嵌信号量的资源数。
OS_SEM_CTR OSTaskSemSet(
OS_TCB* p_tcb, //指向任务控制块的指针
OS_SEM_CTR cnt; //指定的信号量资源数
OS_ERR* p_err) //指向接收错误代码变量的指针
OS_SEM_CTR类型返回值:任务内嵌信号量设置前的资源数