ucosii事件处理分析

ucosii事件处理分析

ID:12437093

大小:28.50 KB

页数:6页

时间:2018-07-17

ucosii事件处理分析_第1页
ucosii事件处理分析_第2页
ucosii事件处理分析_第3页
ucosii事件处理分析_第4页
ucosii事件处理分析_第5页
资源描述:

《ucosii事件处理分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、uCOSII之事件控制块学习一.  事件控制块ECB数据结构:typedefstruct{  INT8U  OSEventType;//事件类型  INT8U  OSEventGrp;  //等待任务所在的组  INT16U  OSEventCnt;  //当事件是信号量时的计数器  void  *OSEventPtr;  //指向消息或消息队列的指针  INT8UOSEventTbl[OS_EVENT_TBL_SIZE];  //等待任务列表}OS_EVENT;二.关键算法:1、将一个任务插入

2、到等待事件的任务列表中:  当调用函数OS_EventTaskWait()使一个任务进入等待某事件发生时,需要此算法,从而将任务插入到等待事件的任务列表中。  pevent->OSEventGrp      

3、=OSMapTbl[prio>>3];  pevent->OSEventTbl[prio>>3]  =OSMapTbl[prio&0x07];2、从等待事件的任务列表中使任务脱离等待状态:当调用函数OS_EventTaskRdy()使一个任务进入就绪态时,需要调用此算法,从而使等待的任务脱

4、离等待状态进入就绪。  if((pevent->OSEventTbl[prio>>3]&=~OSMapTbl[prio&0x07])==0)  {    pevent->OSEventGrp&=~OSMapTbl[prio>>3];  }3、在等待事件的任务列表中查找优先级最高的任务:  当调用函数OS_EventTaskRdy()使一个任务进入就绪态时,需要调用此算法,从而首先找出在等待事件任务列表中最高优先级的任务进入就绪状态。  y=OSUnMapTbl[pevent->OSEventGr

5、p];  x=OSUnMapTbl[pevent->OSEventTbl[y];  prio=(y<<3)+x;三.对事件控制块ECB的基本操作1、初始化一个事件控制块:  函数OSSemCreate(),OSMutexCreate(),OSMboxCreate(),OSQCreate()建立时,必须调用此函数进行初始化,初始化一个空的等待列表,表中没有任何等待事件的任务。  OS_EventWaitListInit();2、使一个任务进入就绪态:  当某个事件发生了时,要将事件等待任务列表中最

6、高优先级的任务进入就绪态,函数OSSemPost,OSMutexPost(),OSMboxPost(),OSQPost()必将调用此函数从而使一个任务进入就绪态。  OS_EventTaskRdy();3、使一个任务进入等待某事件发生:  当某个任务须等待一个事件的发生时,信号量、互斥型信号量、邮箱、消息队列会通过相应的PEND函数来调用这个函数。  OS_EventTaskWait();4、由于等待超时而将任务置为就绪态:  如果在预先指定的等待时间内任务等待的事件没有发生,那么PNED类型函

7、数将会调用此函数从而将等待超时的任务进入就绪态。  OS_EventTo();四.事件控制块ECB基本操作代码的分析。1、OS_EventWaitListInit();voidOS_EventWaitListInit(OS_EVENT*pevent){  INT8U*ptbl;  //定义指针变量ptbl  pevent->OSEventGrp=0x00;//清除任务所在的组OS_EVENT_TBL_SIZE在UCOS_II.H中定义大小  ptbl  =&pevent->OSEventTbl[

8、0];  #ifOS_EVENT_TBL_SIZE>0      *ptbl++=0x00;    //清除等待任务列表,在这里没有使用for循环是为了节省系统开销  #endif  #ifOS_EVENT_TBL_SIZE>1      *ptbl++=0x00;  #endif  #ifOS_EVENT_TBL_SIZE>2      *ptbl++=0x00;  #endif  #ifOS_EVENT_TBL_SIZE>3      *ptbl++=0x00;  #endif  #ifOS

9、_EVENT_TBL_SIZE>4      *ptbl++=0x00;  #endif  #ifOS_EVENT_TBL_SIZE>5      *ptbl++=0x00;  #endif  #ifOS_EVENT_TBL_SIZE>6      *ptbl++=0x00;  #endif  #ifOS_EVENT_TBL_SIZE>7      *ptbl++=0x00;  #endif}2、OS_EventTaskRdy();  INT8UOS_EventTaskRdy(OS_EVENT*

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。