ucos 事件控制块 及 处理函数
来源:互联网 发布:js下拉菜单显示选项 编辑:程序博客网 时间:2024/06/04 19:30
一.时间控制块ECB的数据结构
typedef struct {
INT8U OSEventType;
INT8U OSEventGrp;
INT16U OSEventCnt;
void *OSEventPtr;
INT8U OSEventTbl[OS_EVENT_TBL_SIZE];
} OS_EVENT;
} OS_EVENT;
.OSEventType
#define
#define
#define
#define
#define
#define
.OSEventCnt
.*OSEventPtr
.OSEventTbl[] 和 .OSEventGrp
分别与管理任务的OSRdyTbl[] 和 OSRdyGrp 类似,OSEventTbl[]用于放置该事件的所有等待任务。原理图如下:
二、将任务置于等待事件的任务列表
pevent->OSEventGrp |= OSMapTbl[prio >> 3];
pevent->OSEventTbl[prio >> 3] |= OSMapTbl[prio & 0x07];
三、从等待任务列表中删除一个任务
if ((pevent->OSEventTbl[prio >> 3] &= ~OSMapTbl[prio & 0x07]) == 0) {
pevent->OSEventGrp &= ~OSMapTbl[prio >> 3];
}
四、在等待任务列表中查找最高优先级的任务
y = OSUnMapTbl[pevent->OSEventGrp];
x = OSUnMapTbl[pevent->OSEventTbl[y]];
prio = (y << 3) + x;
五、空余事件控制块链表
在调用OSInit()时,所有事件控制块被链接成一个单向链表——空闲事件控制块链表。每当建立一个信号量、邮箱或者消息队列时,就从该链表中取出一个空闲事件控制块,并对它进行初始化。删除时,可将事件控制块放回到空余事件控制块链表中。
六、初始化一个事件控制块,OS_EventWaitListInit()
就是将该ECB中的.OSEventTbl[] 和 .OSEventGrp 全部清0
七、使一个任务进入就绪态,OS_EventTaskRdy()
再将这个任务置于任务就绪表:
八、使一个任务进入等待某事件发生状态,OS_EventTaskWait()
if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0x00) {
将任务进入该事件的等待列表
有了这些基本知识,后面的事件处理就简单多了
- ucos 事件控制块 及 处理函数
- ucos 事件及事件控制块
- ucos事件控制块
- uCOS II 之事件控制块学习
- ucos之事件控制块ECB
- uCOS-II 事件控制块分析
- uCOS II 之事件控制块学习
- UC/OS-II基础知识之事件控制块及事件处理函数
- ucos任务状态及任务控制块
- ucos-II学习之:数据结构(任务控制块/事件控制块/内存控制块总结一)
- ucos II 任务间 通信之二:事件控制块
- uCOS-II任务间通信之事件控制块 [转载]
- uCOS-II任务间通信之事件控制块
- ucos 任务控制块及任务链表
- uCOS事件控制块__任务与任务间的通信过程
- uCOS-II的任务控制块
- ucos-ii的任务控制块
- uCOS-II内核之任务控制块
- mysql执行脚本的方法
- 实现MySQL导入sql脚本
- mysql的innodb和myisam数据库引擎的认识
- 在Eclipse中添加Servlet-api.jar的方法
- ARC混编报错解决方法
- ucos 事件控制块 及 处理函数
- 进度条ProgressBar
- ListView的使用
- 左旋转字符串 left rotate string
- C/S架构和B/S架构的概念和区别
- [sig12][PhysicalBasedRender]Beyond a simple Physically Based Blinn-phong model in real time
- Struts2中的校验框架
- Javascript Array
- Vaadin Web应用开发教程(29):UI布局-VerticalLayout和HorizontalLayout布局