CoOS使用教程——信号量

可能你还对信号量这个名词感到些陌生,其实你在Windows下经常使用信号量,比如:Esc键就发出一个信号,它可以通知某个进程去关闭当前的窗口。

那么,你也可以让按键(或其它东西)发出一个信号,使单片机去做某些事情。

在CoOS下使用信号量也是非常简单的。



具体步骤:创建信号量->发出信号量->处理信号量。

1、信号量是怎样实现的?

是使用PV操作。

在任务A中使用V操作,让s自加1;然后在任务B中使用P操作,每处理一次信号量,就让s自减1,减到0为止。

这样,不管任务A发出多少次信号量,任务B都能一个个处理掉。

2、CoCreateSem(),创建信号量

OS_EventID CoCreateSem(U16 initCnt,U16 maxCnt,U8 sortType);

initCnt就是PV操作中s的初始值,一般设为0。maxCnt就是s的最大值,视具体应用设置。

sortType是在多个任务中,使用多个信号量时候,内核需要对信号量进行排序,设为EVENT_SORT_TYPE_FIFO,就是先来先服务;设为EVENT_SORT_TYPE_PRIO,就是按照优先级服务。

如果成功创建信号量,会返回一个OS_EventID的变量,失败的话返回-1。

3、CoPendSem(),等待信号量

StatusType CoPendSem(OS_EventID id,U32 timeout);

id就是前面创建的信号量,timeout是等待信号量的时限,如果超时了,会返回E_TIMEOUT;有信号量过来的话,会返回E_OK。

由前面PV操作的原理可以看出,等待信号量的时候,是用了while(s==0);,这样任务会一直阻塞,后面的代码不起作用。

4、CoPostSem(),发出信号量

StatusType CoPostSem(OS_EventID id);

发出一个信号量id。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值