您现在的位置: 主页 > 嵌入式操作系统 > UC/OS ii > ucosii任务的创建过程
本文所属标签:
为本文创立个标签吧:

ucosii任务的创建过程

来源: 网络用户发布,如有版权联系网管删除 2016-06-06 

ucosii任务的创建过程 通过函数OSTaskCreate()或者OSTaskCreateEXT()两个函数来创建一个任务。
A、能否创建成功取决于这么几个条件:
a) 分配给即将要创建任务的优先级是否合法,prio<63(或者为自己修改的最大任务数);
b) 分配给将要创建任务的优先级是否已经被已存任务所占用,若没有被占用,则将OSTCBPrioTbl[prio]赋值1,来占用该优先级;
c) 是否有足够的RAM来分配给任务,作为任务的私有堆栈;
d) 是否有空余的OS_TCB分配给任务,作为该任务的任务控制块;
B、任务创建完后,上面所提到的有关任务控制块的几张表的更新。
a) OSTCBPrioTbl[]表:将新创建任务的任务控制块首地址存放在相应任务优先级元素中(即OSTCBPrioTbl[prio]中)。
b) 任务控制块链表:将OSTCBList指针更新指向新建的任务控制块,另外通过OS_TCB结构中的OSTCBNext和OSTCBPrev成员,将新建任务的OS_TCB置于双向链表中。
c) 任务就绪表的更新:新建任务建完后为就绪状态,因此应该将任务优先级在任务就绪表中相应的位置1, 其实现方式通过以下两条指令实现:OSRdyGrp |=OSMapTbl[prio>>3];
OSRdyTbl[prio>>3] |=OSMapTbl[prio & 0x07];
d) 空任务控制块链表:因为新建任务必须从空任务控制块中取出,所以在取完空OS_TCB需后,要修改OSTCBFreeList指针,将其指向下一个空OS_TCB。
C) 任务新建完后,与任务相关参数的设置。
任务的OS_TCB 存放在OSTCBPrioTbl[prio]中,任务的私有堆栈信息(栈顶指针、栈底指针和堆栈大小)存放在任务的OS_TCB中。任务函数的首地址存放在任务的堆栈中。


              查看评论 回复



嵌入式交流网主页 > 嵌入式操作系统 > UC/OS ii > ucosii任务的创建过程
 

" ucosii任务的创建过程"的相关文章

网站地图

围观()