您的位置:首页 > 其它

UC/OS-II基础知识之任务的同步与事件

2016-01-06 21:06 302 查看

UC/OS-II基础知识之任务的同步与事件

为了实现各个任务之间的合作和无冲突的运行,在各任务之间必须建立起一些制约制约关系,UC/OS-II有两种制约关系,间接制约和直接制约。直接制约关系来源于任务间的合作,间接制约关系源于对资源的共享,

1.事件

UC/OS-II使用信号量,邮箱(消息邮箱)和消息队列这些中间环节来实现任务间的通信,为了方便起见,这些中间环节都统称为事件。两个任务通过事件进行通讯的示意图如下所示。



任务1是发送方,任务二是受信访,作为发信方,任务1的责任就是把信息发送到事件上,这项操作叫做发送事件,作为收信方,任务2的责任就是通过读事件操作对事件进行查询,如果有信息,则读取信息,否则等待。读事件操作叫做请求事件。UC/OS-II把发送事件,请求事件和其他对事件的操作都定义为全局函数,以供其他任务调用。

2.信号量

信号量是一类事件,使用信号量的最初目的是为了给共享资源设立一个标志,该标志表示共享资源被占用情况。对于一个二值型信号我们称之为互斥型信号量,对于计数式的信号叫做信号量。下图表示的是两个任务在使用互斥型信号量进行通信。


3.消息邮箱

在多任务操作系统中,常常需要在任务与任务之间传递一个数据(这种数据叫做消息)的方式来进行通讯,为了达到这个目的,可以再内存中创建一个存储空间作为该数据的缓冲区,如果把这个缓冲区叫做消息缓冲区,那么在任务传递数据(消息)的一个最简单的方法就是传递消息缓冲区的指针。因此用来传递消息缓冲区指针的数据结构叫做消息邮箱。下图是两个任务使用消息邮箱进行通讯的示意图。读取消息也叫消息请求。



4.消息队列

可以传递多个消息的数据结构叫做消息队列。下图是两个任务使用消息队列进行通讯的示意图。



任务1向消息队列发送消息缓冲区指针数组的指针,这个操作叫做发送消息队列,任务2再从消息队列读取消息缓冲区指针数组的指针,这个操作叫做请求消息队列。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: