1、 uCOS-II邮箱和消息队列
邮箱和消息队列是uCOS-II中任务间的通讯机制,它可以使一个任务或者中断服务子程序向另一个任务发送以指针方式定义的变量。因具体的应用有所不同,每个指针指向的数据结构变量也有所不同。两者都基于事件控制块OS_EVENT。与邮箱相比,消息队列在OS_EVENT基础上加了个循环队列,可以存放多个消息,而邮箱只能存放一个消息。消息队列可以看成是多个邮箱的组合。因此,两者除了创建时有些差别外,其他的操作都很相似。
1.1、 uCOS-II邮箱
在事件控制块OS_EVENT中有一个域OSEventPtr,这个域是一个用来存放消息的指针。由于邮箱是由操作系统维护的,因此使用指针可以避免消息的复制,提供操作系统效率。uCOS-II中对邮箱有五种操作:OSMboxCreate(),OSMboxPend() , OSMboxPost(),OSMboxAccept()和OSMboxQuery()。其中OSMboxAccept()是无等待的接受一个消息。在创建一个邮箱时,一般初始化为空邮箱,但是也可以让邮箱一开始就包含一条消息。如果该邮箱用于通知某个事件的发生,那么就应该初始化为空邮箱;如果用于共享某些资源,那么就应该让其包含一条消息。
1.2、 uCOS-II消息队列
与邮箱不同,当事件控制块OS_EVENT被用于消息队列时,域OSEventPtr指向一个循环队列的队列控制块(OS_Q)而不是指向一个消息。循环队列由队列控制块(OS_Q)进行维护,该数据结构详细信息如下:
uCOS-II邮箱和消息队列
最新推荐文章于 2024-04-21 16:34:00 发布