uCOSII之事件控制块学习

时间:2021-10-09 17:23 作者:188官网
本文摘要:一。

188官网

一。事件操控块ECB算法设计:  typedefstruct  {  INT8UOSEventType;//事件种类  INT8UOSEventGrp;//等候每日任务所属的2组  INT16UOSEventCnt;//当事件是信号量时的电子计数器  void*OSEventPtr;//偏向信息或消息队列的表针  INT8UOSEventTbl[OS_EVENT_TBL_SIZE];//等候任务列表  }OS_EVENT;  二.重要优化算法:  1、将一个每日任务放进到等候事件的任务列表中:  当调用函数OS_EventTaskWait()使一个每日任务转入等候某事件再次出现时,务必此优化算法,进而将每日任务放进到等候事件的任务列表中。  pevent-》OSEventGrp|=OSMapTbl[prio》》3];  pevent-》OSEventTbl[prio》》3]=OSMapTbl[prio0x07];  2、从等候事件的任务列表使得每日任务分裂等候情况:  当调用函数OS_EventTaskRdy()使一个每日任务转入准备就绪态时,务必启用此优化算法,进而使等候的每日任务分裂等候情况转入准备就绪。

  if((pevent-》OSEventTbl[prio》》3]=~OSMapTbl[prio0x07])==0)  {  pevent-》OSEventGrp=~OSMapTbl[prio》》3];  }  3、在等候事件的任务列表中查看优先最少的每日任务:  当调用函数OS_EventTaskRdy()使一个每日任务转入准备就绪态时,务必启用此优化算法,进而最先寻找在等候事件任务列表中最低优先级队列的每日任务转入准备就绪情况。  y=OSUnMapTbl[pevent-》OSEventGrp];  x=OSUnMapTbl[pevent-》OSEventTbl[y];  prio=(y《《3) x;  三.对事件掌控块ECB的基本操作  1、初始化一个事件掌控块:  函数OSSemCreate(),OSMutexCreate(),OSMboxCreate(),OSQCreate()创建时,必需调用此函数展开初始化,初始化一个机的等候列表,表中没任何等候事件的任务。  OS_EventWaitListInit();  2、使一个任务转入准备就绪态:  当某个事件再次发生了时,要将事件等候任务列表中最低优先级的任务转入准备就绪态,函数OSSemPost,OSMutexPost(),OSMboxPost(),OSQPost()终将调用此函数从而使一个任务转入准备就绪态。

  OS_EventTaskRdy();  3、使一个任务转入等候某事件再次发生:  当某个任务需等候一个事件的再次发生时,信号量、物理地址型信号量、邮箱、消息队列不会通过适当的PEND函数来调用这个函数。  OS_EventTaskWait();  4、由于等候超时而将任务置为准备就绪态:  如果在预先指定的等待时间内任务等候的事件没再次发生,那么PNED类型函数将不会调用此函数从而将等候超时的任务转入准备就绪态。  OS_EventTo();  四.事件掌控块ECB基本操作代码的分析。  1、OS_EventWaitListInit();  voidOS_EventWaitListInit(OS_EVENT*pevent)  {  INT8U*ptbl;//定义指针变量ptbl  pevent-》OSEventGrp=0x00;//清除每日任务所属的2组  OS_EVENT_TBL_SIZE在UCOS_II.H中界定尺寸  ptbl=pevent-》OSEventTbl[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_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*pevent,void*msg,INT8Umsk)  {  OS_TCB*ptcb;  INT8Ux;  INT8Uy;  依照重要优化算法3,在等候事件的任务列表中找寻优先最少的每日任务,并确定其优先。

188官网


本文关键词:uCOSII,之,事件,控制,块,学习,一,。,事件,操控,188官网

本文来源:188官网-www.ffmtrade.com