一。事件掌控块ECB数据结构: typedefstruct { INT8UOSEventType;//事件类型 INT8UOSEventGrp;//等候任务所在的两组 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;//清理任务所在的两组 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,在等候事件的任务列表中寻找优先级最低的任务,并确认其优先级。
本文来源:雷速体育下载app-www.gosweekly.com
面包也写作麺包,一种用五谷(一般是麦类)磨粉制作并加热而制成的食品。以小麦粉为主要原料,以酵母、鸡蛋、油脂、糖、盐等为辅料,加水调制成面团,经过分割、成形、醒发、...
面包也写作麺包,一种用五谷(一般是麦类)磨粉制作并加热而制成的食品。以小麦粉为主要原料,以酵母、鸡蛋、油脂、糖、盐等为辅料,加水调制成面团,经过分割、成形、醒发、...
面包也写作麺包,一种用五谷(一般是麦类)磨粉制作并加热而制成的食品。以小麦粉为主要原料,以酵母、鸡蛋、油脂、糖、盐等为辅料,加水调制成面团,经过分割、成形、醒发、...
面包也写作麺包,一种用五谷(一般是麦类)磨粉制作并加热而制成的食品。以小麦粉为主要原料,以酵母、鸡蛋、油脂、糖、盐等为辅料,加水调制成面团,经过分割、成形、醒发、...
Copyright © 2007-2024 www.gosweekly.com. 雷速体育下载app科技 版权所有 地址:上海市上海市上海区工中大楼37号 备案号:ICP备91044059号-6