uCOSII内核详解.doc
文本预览下载声明
UC/OS-II内核一.?内核概述: 多任务系统中,内核负责管理各个任务,或者说为每个任务分配CPU时间,并且负责任务之间的通讯。内核提供的基本服务是任务切换。之所以使用实时内核可以大大简化应用系统的设计,是因为实时内核允许将应用分成若干个任务,由实时内核来管理它们。内核本身也增加了应用程序的额外负荷,代码空间增加ROM的用量,内核本身的数据结构增加了RAM的用量。但更主要的是,每个任务要有自己的栈空间,这一块吃起内存来是相当厉害的。内核本身对CPU的占用时间一般在2到5个百分点之间。 UC/OS-II有一个精巧的内核调度算法,实时内核精小,执行效率高,算法巧妙,代码空间很少。UC/OS-II的内核还可以被裁剪,Hmax中RTOS的就是一个被高度裁剪过的UC/OS-II。二.?任务控制块?OS_TCB: uC/OS-II的TCB数据结构简单,内容容易理解,保存最基本的任务信息,同时还支持裁减来减小内存消耗,TCB是事先根据用户配置,静态分配内存的结构数组,通过优先级序号进行添加,查找,删除等功能。减少动态内存分配和释放。因为依靠优先级进行TCB分配,每个任务必须有自己的优先级,不能和其他任务具有相同的优先级。typedef?struct?os_tcb?{?????OS_STK????????*OSTCBStkPtr;?#if?OS_TASK_CREATE_EXT_EN?????void??????????*OSTCBExtPtr;?????OS_STK????????*OSTCBStkBottom;?????INT32U?????????OSTCBStkSize;?????INT16U?????????OSTCBOpt;?????INT16U?????????OSTCBId;?#endif????struct?os_tcb?*OSTCBNext;?????struct?os_tcb?*OSTCBPrev;?#if?(OS_Q_EN??(OS_MAX_QS?=?2))?||?OS_MBOX_EN?||?OS_SEM_EN????OS_EVENT??????*OSTCBEventPtr;?#endif??#if?(OS_Q_EN??(OS_MAX_QS?=?2))?||?OS_MBOX_EN?????void??????????*OSTCBMsg;?#endif??????INT16U?????????OSTCBDly;?????INT8U??????????OSTCBStat;?????INT8U??????????OSTCBPrio;?????INT8U??????????OSTCBX;?????INT8U??????????OSTCBY;?????INT8U??????????OSTCBBitX;?????INT8U??????????OSTCBBitY;?#if?OS_TASK_DEL_EN?????BOOLEAN????????OSTCBDelReq;?#endif?}?OS_TCB;.OSTCBStkPtr是指向当前任务栈顶的指针。.*OSTCBExtPtr;:任务扩展模块使用;.*OSTCBStkBottom;?任务栈底指针.OSTCBStkSize;?栈尺寸.OSTCBOpt;?.OSTCBId; 任务ID.OSTCBNext和.OSTCBPrev用于任务控制块OS_TCBs的双重链接,.OSTCBEventPtr是指向事件控制块的指针.OSTCBMsg是指向传给任务的消息的指针。.OSTCBDly当需要把任务延时若干时钟节拍时要用到这个变量,或者需要把任务挂起一段时间以等待某事件的发生,.OSTCBStat是任务的状态字。.OSTCBPrio是任务优先级。.OSTCBX,?.OSTCBY,?.OSTCBBitX和?.OSTCBBitY用于加速任务进入就绪态的过程或进入等待事件发生状态的过程,任务就绪表依靠这些量来进行维护OSTCBY?=?priority??3;OSTCBBitY?=?OSMapTbl[priority??3];OSTCBX?=?priority??0x07;OSTCBBitX?=?OSMapTbl[priority??0x07];.OSTCBDelReq是一个布尔量,用于表示该任务是否需要删除?
HMAX中的任务TCB删减为:
typedef struct{
OS_STK *OSTCBStkPtr; /* Pointer to current top of stack */
OS_STK *OSTCBStkBot; /* Pointer t
显示全部