STM32——UCOSIII信号量与内嵌信号量

目录

信号量

创建信号量

OSSemCreate()函数

请求信号量

OSSemPend ()函数

发送信号量

 OSSemPost()函数

内嵌信号量 

发送内嵌信号量

请求内嵌信号量


信号量

简介:信号量像是一种上锁机制,代码必须获得相应的钥匙,才可继续执行代码

二进制信号量:信号量为二进制一次只能一个任务共享资源

计数型信号量:可多个任务共享资源,可有多个信号量

注:任务请求信号量时,信号量的值就会减1,发送一个信号,信号量加1

创建信号量

OSSemCreate()函数

作用:创建信号量函数

位置:os_sem.c

调用:

void  OSSemCreate (OS_SEM      *p_sem,//指向信号量控制块
                   CPU_CHAR    *p_name,//指向信号量的名字
                   OS_SEM_CTR   cnt,   //设置信号量的初始值,值为1(二进制),大于1(计数型)
                   OS_ERR      *p_err  //返回的错误码)

应用实例:

	OSSemCreate ((OS_SEM*	)&SYNC_SEM,
                 (CPU_CHAR*	)"SYNC_SEM",
                 (OS_SEM_CTR)0,		
                 (OS_ERR*	)&err);

请求信号量

OSSemPend ()函数

作用:请求信号量

位置:os_sem.c

调用:

OS_SEM_CTR  OSSemPend (OS_SEM   *p_sem,//指向信号量块
                       OS_TICK   timeout,//设置等待时间(时钟节拍书),如果为0则一直等待
                       /*****/
                       /*如信号量无效*/
                       /*
                       阻塞:任务挂起等待信号量 OS_OPT_PEND_BLOCKING
                       非阻塞,任务直接返回     OS_OPT_PEND_NON_BLOCKING
                       */
                       OS_OPT    opt, //设置是否阻塞
                       CPU_TS   *p_ts,//指定一个时间戳,如返回NULL则没有要求时间戳
                       OS_ERR   *p_err//返回的错误码)

应用实例:

OSSemPend(&SYNC_SEM,0,OS_OPT_PEND_BLOCKING,0,&err);

发送信号量

 OSSemPost()函数

作用:发送信号量

位置:os_sem.c

调用:

OS_SEM_CTR  OSSemPost (OS_SEM  *p_sem,//信号量块
                       /****/
                       /*
                       OS_OPT_POST_1 仅向等待信号量的最高优先级发送信号
                       OS_OPT_POST_ALL 向等待该信号的所有任务发送信号
                       */
                       OS_OPT   opt, //选择信号发送方式
                       OS_ERR  *p_err//返回的错误码)

应用实例:

OSSemPost(&SYNC_SEM,OS_OPT_POST_1,&err);

内嵌信号量 

发送内嵌信号量

OSTaskSemPost()函数

作用:发送信号量

位置:os_task.c

调用:

OS_SEM_CTR  OSTaskSemPost (OS_TCB  *p_tcb,
                           OS_OPT   opt,
                           OS_ERR  *p_err)

应用实例:

OSTaskSemPost(&Task2_TaskTCB,OS_OPT_POST_NONE,&err);	

请求内嵌信号量

OSTaskSemPend ()函数

作用:请求信号量

位置:os_task.c

调用:

OS_SEM_CTR  OSTaskSemPend (OS_TICK   timeout,
                           OS_OPT    opt,
                           CPU_TS   *p_ts,
                           OS_ERR   *p_err)

应用实例:

OSTaskSemPend(0,OS_OPT_PEND_BLOCKING,0,&err);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白变形计

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值