找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3561|回复: 0
打印 上一主题 下一主题
收起左侧

uC/OS-II学习笔记—事件管理的重要数据结构

[复制链接]
跳转到指定楼层
楼主
                                                                                                uC/OS-II作为实时多任务操作系统,是时间驱动的,必然支持如信号量、消息等机制。事件主要包括信号量和互斥信号量,而事件的组合可以用事件标志组来管理。
在任务管理中任务控制块承载了任务的相关信息。在时间管理中,这个载体就变成了事件控制块(ECB)。
事件控制块(ECB)在事件管理中占据着举足轻重的作用。虽然事件控制块ECB并没有任务控制块(TCB)的内容丰富,但是在事件处理中仍然是核心的数据结构,频繁被访问。ECB的定义出现在操作系统的头文件ucos_ii.h中。定义如下所示:

事件控制块结构体中第一项OSEventType是时间控制块的类型。为了增加代码的可读性,每种类型都在ucos_ii.h中定义了相应的宏,如下所示:

可见,OSEventType的取值可以从0到5,如果事件是基于信号量的,那么这个域的值就应该是OS_EVENT_TYPE_SEM,也就是3,单是OS_EVENT_TYPE_SEM比3具有更强的可读性。

可见,事件等待表的大小与任务数是密切相关的。OS_LOWEST_PRIO是最低优先级的任务的优先级,也就是空闲任务的优先级,这里应该是63,那么(OS_LOWEST_PRIO)/8u+1就是8,和就绪表的大小是一样的。
事件等待组和事件等待表的关系与任务管理中就绪组和就绪表的关系式一样的,只不过事件等待组和事件等待表用于管理等待事件发生的任务,而这两者都在事件控制块中,不像就绪组和就绪表是独立的。
操作系统在ucos_ii.h中,以数组的形式定义了事件控制块的实体事件ECB表:

该语句在内存中分配了OS_MAX_EVENTS个事件控制块,宏OS_MAX_EVENTS的默认值是10。
注意不要混淆:该表是在ucos_ii.h中声明的全局变量,类型是OS_EVENT,与ECB中同名的OSEventTbl是不同的。ECB中的OSEventTbl被称为事件等待表,是ECB中的一项。
一个事件块标志着一个事件,等待这个事件的任务在事件块的事件等待组合事件等待表中标记自己的存在,然后被阻塞。当事件发生时,操作系统回找到优先级最高的等待事件发生的任务,并将该任务就绪,然后在事件等待组和事件等待表中取消该任务的标记。事件等待组合事件等待表的关系同就绪组和就绪表的关系式完全相同的。如下所示:

上图中没有任务等待事件发生,因此就绪组位0,就绪表的内容页全是0.假设有优先级为20和32的任务在等待事件发生,那么就绪组和就绪表应该如下图所示:

可见,事件等待组和事件等待表的关系和就绪组与就绪表的关系式完全相同的,结构也是完全相同的。
在事件管理中,将空闲的事件块连接成一个单向的链表——事件控制块空闲链表。这个链表的形式和TCB的空闲链表的形式是完全相同的。
当创建一个事件的时候,要在事件控制块(ECB)空闲链表中查找是否有空闲的ECB可用。如果有,就从链表中取出,分配给事件。要做这件事,首先要找到链表的表头,因此声明了一个重要的全局变量OSEventFreeList指向表头的地址,称为事件空闲链表指针。OSEventFreeList的定义如下所示:

事件控制块的OSEventPtr在事件块未使用的时候没有其他作用,就被用来指示下一个ECB的指针。在事件控制块初始化程序结束的时候,该链表如下所示:




                                                                                            

                                                                                                                                                                                                                                                                                                                                                                                                                       
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表