16.4-uC/OS-III同步 (任务信号量)

Posted xigongxiaosha

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了16.4-uC/OS-III同步 (任务信号量)相关的知识,希望对你有一定的参考价值。

信号量和消息队列均是单独的内核对象,是独立于任务存在的。

任务信号量 仅发布给一个特定任务
任务消息队列 可以发布给多个任务。
任务信号量伴随任务存在,只要创建了任务,其任务信号量就是该任务的一个数据成员,
任务信号量的数据成员被包含在任务控制块里。

1.OSTaskSemPost ()
OSTaskSemPost () 函数用于给一个任务发布任务信号量。 OSTaskSemPost () 函数的定义也位于“os_task.c”。
不管是否使能了中断延迟发布,最终都是调用 OS_TaskSemPost() 函数进行发布
信号量。

只是使能了中断延迟发布的发布过程会比较曲折 .

2.OSTaskSemPend ()
OSSemPost () 多值信号量发布函数相对应, OSTaskSemPend () 函数用于等待任务信
号量。

3.OSTaskSemPendAbort ()
OSTaskSemPendAbort() 函数用于中止一个任务对其任务信号量的等待。要使用
OSTaskSemPendAbort() 函数,还得事先使能 OS_CFG_TASK_SEM_PEND_ABORT_EN(位于
os_cfg.h”)。


任务信号量跟多值信号量极其相似。本质区别在于,任务信号量时一个任务的特有属性,
是某一个任务的信号量,其他任务均可以发布这个信号量,但只有该任务才能接收这个信
号量。 多值信号量却是一个独立的内核对象,任何任务均可以发布和接收多值信号量。因
此,任务信号量不需像多值信号量那样单独创建,只要创建了任务,就同时创建了其任务
信号量。

 






















以上是关于16.4-uC/OS-III同步 (任务信号量)的主要内容,如果未能解决你的问题,请参考以下文章

操作系统| 进程同步详解(主要任务制约关系临界资源临界区同步机制遵循规则信号量机制信号量的应用)

基于STM32和FreeRTOS的二值信号量实现任务同步

基于STM32和FreeRTOS的二值信号量实现任务同步

基于STM32和FreeRTOS的二值信号量实现任务同步

c_cpp FreeRTOS的基于信号量和委托的任务数据共享与同步

互斥锁和信号量