曲径通幽论坛

标题: OS_InitTCBList [打印本页]

作者: beyes    时间: 2009-4-13 23:56
标题: OS_InitTCBList
static  void  OS_InitTCBList (void)
{
    INT8U    i;
    OS_TCB  *ptcb1;
    OS_TCB  *ptcb2;


    OSTCBList     = (OS_TCB *)0;                                          /* TCB 初始化 */

  


    for (i = 0; i < (OS_LOWEST_PRIO + 1); i++) {                 /* 清TCB优先级表数组 */
        OSTCBPrioTbl = (OS_TCB *)0;
    }


    ptcb1 = &OSTCBTbl[0];
    ptcb2 = &OSTCBTbl[1];


    for (i = 0; i < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) {
        ptcb1->OSTCBNext = ptcb2;                                                           /*把空闲的TCB链接起来*/
        ptcb1++;
        ptcb2++;
    }
    ptcb1->OSTCBNext = (OS_TCB *)0;                              /* 最后一个TCB*/
    OSTCBFreeList    = &OSTCBTbl[0];               /* OSTCBFreeList 指向头一个空闲 TCB*/

}
说明
所有的任务控制块 OS_TCB 都是放在任务控制块列表数组 OSTCBTbl[] 中的。在 uC/OS-II 初始化时,所有任务控制块 TCB都被链接成单向空任务链表。任务一旦建立,空任务控制块指针 OSTCBFreeList 指向的任务控制块便赋给了该任务,然后OSTCBFreeList 的值调整为指向链表中下一个空的任务控制块。一旦任务被删除,任务控制块就还给空任务链表。在 OSInit()函数中会调用到 OS_InitTCBList() 。





欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2