UC/OS 学习 任务的同步与通讯

事件:UC/OS中,通过使用信号量、邮箱(消息邮箱)和消息队列来实现任务之间的通讯,这些环节统称为“事件”


信号量:
信号量通过OSSemCreate函数来创建。参数为应用计数器,一般设置为1。
请求任务时采用 OSSemPend 带超时函数的请求和OSSemAccept 无等待的函数,这两个函数进入以后,则会将信号计数器减一。
发送信号量:采用OSSemPost函数,发送信号量。


信号量的注意点:
   1、信号量的释放将引发任务调度,但释放信号量时,如果有更好级别的任务处于就绪等待状态,将切换人物。
   2、信号量的使用,实际上,是针对信号量计数器加一减一来实现,减到0则其他的任务进行等待。因此,可以创建信号量为0的任务,一个任务处于等待状态,另外一个任务负责发送信号量,使其运行。
   另外一种信号量的使用采用传统做法,创建一个1的信号量,使用时Pend,用完Post,进行互斥操作。
   3、优先级反转。所谓任务优先级反转指,ABC三个优先级任务,A等待C,B抢占C,因此导致了B优先于A运行程序的问题。
   4、采用互斥型OSMutexCreate的方式,可以解决优先级反转的问题。


消息邮箱:
   消息邮箱和信号量类似,但是区别是 1可以发送消息,第二可以以广播方式发送给所有不同等级的等待进程。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值