Board logo

标题: UCOS任务管理(10) [打印本页]

作者: yuyang911220    时间: 2015-5-28 20:10     标题: UCOS任务管理(10)

OSTaskQuery ()的代码如程序清单 L4.19所示。注意,笔者允许用户查询所有的任务,包括空闲任务[L4.19(1)]。用户尤其需要注意的是不要改变OSTCBNext与 OSTCBPrev的指向。通常,OSTaskQuery()需要检验用户是否想知道当前任务的有关信息[L4.19(2)]以及该任务是否已经建立了 [L4.19(3)]。所有的域是通过赋值语句一次性复制的而不是一个域一个域地复制的[L4.19(4)]。这样复制会比较快一点,因为编译器大多都能 够产生内存拷贝指令。 程序清单 L 4.19 OSTaskQuery().
INT8U OSTaskQuery (INT8U prio, OS_TCB *pdata)
{
    OS_TCB *ptcb;

    if (prio > OS_LOWEST_PRIO && prio != OS_PRIO_SELF) {                (1)
        return (OS_PRIO_INVALID);
    }
    OS_ENTER_CRITICAL();
    if (prio == OS_PRIO_SELF) {                                         (2)
        prio = OSTCBCur->OSTCBPrio;
    }
    if ((ptcb = OSTCBPrioTbl[prio]) == (OS_TCB *)0) {                   (3)
        OS_EXIT_CRITICAL();
        return (OS_PRIO_ERR);
    }
    *pdata = *ptcb;                                                     (4)
    OS_EXIT_CRITICAL();
    return (OS_NO_ERR);
}




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0