ucos代码阅读(3)

来源:互联网 发布:侠盗无双0.4下载 软件 编辑:程序博客网 时间:2024/09/21 08:16

OS_InitTCBList(); 

static  void  OS_InitTCBList (void)
{
    INT8U    i;
    OS_TCB  *ptcb1;          
    OS_TCB  *ptcb2;

    OS_MemClr((INT8U *)&OSTCBTbl[0],     sizeof(OSTCBTbl));      /* Clear all the TCBs                 */
    OS_MemClr((INT8U *)&OSTCBPrioTbl[0], sizeof(OSTCBPrioTbl));  /* Clear the priority table           */

    ptcb1 = &OSTCBTbl[0];
    ptcb2 = &OSTCBTbl[1];
    for (i = 0; i < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) {  /* Init. list of free TCBs            */
        ptcb1->OSTCBNext = ptcb2;
#if OS_TASK_NAME_SIZE > 1
        ptcb1->OSTCBTaskName[0] = '?';                           /* Unknown name                       */
        ptcb1->OSTCBTaskName[1] = OS_ASCII_NUL;
#endif
        ptcb1++;
        ptcb2++;
    }
    ptcb1->OSTCBNext = (OS_TCB *)0;                              /* Last OS_TCB                        */
#if OS_TASK_NAME_SIZE > 1
    ptcb1->OSTCBTaskName[0] = '?';                               /* Unknown name                       */
    ptcb1->OSTCBTaskName[1] = OS_ASCII_NUL;
#endif
    OSTCBList               = (OS_TCB *)0;                       /* TCB lists initializations          */
    OSTCBFreeList           = &OSTCBTbl[0];
}

这个函数的实质是对着几个全局变量的操作


OSTCBTbl[]数组本来就是一个全局变量,元素是TCB

OSTCBPrioTbl[] 也是一个全局变量

OSTCBList            
OSTCBFreeList      

首先就是初始化 OSTCBTbl和OSTCBPrioTbl

然后把OSTCBTbl中的元素串成链表(单方向)

接着OSTCBFreeList 指向这个链表的第一个元素,这个变量指向未分配的TCB链表

OSTCBList初始化 





原创粉丝点击