文档详情

ucos详解--初学者入门.pdf

发布:2017-05-26约1.87万字共19页下载文档
文本预览下载声明
uC/OS-II源码分析(总体思路 一) 首先从main 函数开始,下面是uC/OS-II main 函数的大致流程: main() { OSInit(); TaskCreate(...); OSStart(); } 首先是调用OSInit进行初始化,然后使用TaskCreate 创建几个进程/Task,最 后调用OSStart,操作系统就开始运行了。 OSInit 最先看看OSInit 完成哪些初始化: void OSInit (void) { #if OS_VERSION = 204 OSInitHookBegin(); #endif OS_InitMisc(); OS_InitRdyList(); OS_InitTCBList(); OS_InitEventList(); #if (OS_VERSION = 251) (OS_FLAG_EN 0) (OS_MAX_FLAGS 0) OS_FlagInit(); #endif #if (OS_MEM_EN 0) (OS_MAX_MEM_PART 0) OS_MemInit(); #endif #if (OS_Q_EN 0) (OS_MAX_QS 0) OS_QInit(); #endif OS_InitTaskIdle(); #if OS_TASK_STAT_EN 0 OS_InitTaskStat(); #endif #if OS_VERSION = 204 OSInitHookEnd(); #endif #if OS_VERSION = 270 OS_DEBUG_EN 0 OSDebugInit(); #endif } OS_InitMisc()完成的是一些其其他他的变量的初始化: OSIntNesting = 0; OSLockNesting = 0; OSTaskCtr = 0; OSRunning = FALSE; OSCtxSwCtr = 0; OSIdleCtr = 0L; 其中包括:中断嵌套标志OSIntNesting,调度锁定标志OSLockNesting,OS OSRunning OSRunning FALSE OSStartHighRdy 标志 等。 在这里设置为 ,在后面 中会被设置为TRUE表示OS 开始工作。 OS_InitRdyList()初始化就绪Task列表: static void OS_InitRdyList (void) { INT8U i; INT8U *prdytbl; OSRdyGrp = 0x00; prdytbl = OSRdyTbl[0]; for (i = 0; i OS_RDY_TBL_SIZE; i++) { *prdytbl++ = 0x00; } OSPrioCur = 0; OSPrioHighRdy = 0; OSTCBHighRdy = (OS_TCB *)0; OSTCBCur = (OS_TCB *)0; } 首先将OSRdyTbl[]数组中全部初始化0,同时将OSPrioCur/OSTCBCur初始化 0 OSPrioHighRdy/OSTCBHighRdy 0 为 , 也初始化为 ,这几个变量将在第一个 OSSchedule中被赋予正确的值。 OS_InitTCBList()这个函数看名称我们就知道是初始化TCB列表。 static void OS_InitTCBList (void) { INT8U i; OS_TCB *ptcb1; OS_TCB *ptcb2; OS_MemClr((INT8U *)OSTCBTbl[0], sizeof(OSTCBTbl)); OS_MemClr((INT8U *)OSTCBPrioTbl[0], sizeof(OSTCBPrioTbl)); ptcb1 = OSTCBTbl[0]; ptcb2 = OSTCBTbl[1]; for (i = 0; i (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) { ptcb1-OSTCBNext = ptcb2; #if OS_TASK_NAME_SIZE 1 ptcb1-OSTCBTaskNa
显示全部
相似文档