?? 00000001.htm
字號(hào):
OSRdyGrp |= bity; /* Make new priority ready to run */ <br /> OSRdyTbl[y] |= bitx; <br /> } else { <br /> if ((pevent = ptcb->OSTCBEventPtr) != (OS_EVENT *)0) { /* Remove from event wait list */ <br /> if ((pevent->OSEventTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0) { <br /> pevent->OSEventGrp &= ~ptcb->OSTCBBitY; <br /> } <br /> pevent->OSEventGrp |= bity; <br /> pevent->OSEventTbl[y] |= bitx; <br /> } <br /> } <br /> OSTCBPrioTbl[newprio] = ptcb; /* Place pointer to TCB @ new priority */ <br /> ptcb->OSTCBPrio = newprio; /* Set new task priority */ <br /> ptcb->OSTCBY = y; <br /> ptcb->OSTCBX = x; <br /> ptcb->OSTCBBitY = bity; <br /> ptcb->OSTCBBitX = bitx; <br /> OS_EXIT_CRITICAL(); <br /> OSSched(); /* Run highest priority task ready */ <br /> return (OS_NO_ERR); <br /> } else { <br /> OS_EXIT_CRITICAL(); <br /> return (OS_PRIO_ERR); /* Task to change didn't exist */ <br /> } <br /> } <br />} <br />#endif <br />/*$PAGE*/ <br />#if OS_TASK_DEL_EN <br />/* <br />********************************************************************************************************* <br />* DELETE A TASK <br />* <br />* Notes: <br />* 1) To reduce interrupt latency, OSTaskDel() 'disables' the task: <br />* a) by making it not ready <br />* b) by removing it from any wait lists <br />* c) by preventing OSTimeTick() from making the task ready to run. <br />* The task can then be 'unlinked' from the miscellaneous structures in uC/OS. <br />* 2) The function OSDummy() is called after OS_EXIT_CRITICAL() because, on most processors, the next <br />* instruction following the enable interrupt instruction is ignored. You can replace OSDummy() <br />* with a macro that basically executes a NO OP (i.e. OS_NOP()). The NO OP macro would avoid the <br />* execution time of the function call and return. <br />********************************************************************************************************* <br />*/ <br />/*$PAGE*/ <br />UBYTE OSTaskDel(UBYTE prio) <br />{ <br /> OS_TCB *ptcb; <br /> OS_EVENT *pevent; <br /> UBYTE priocur; <br /> <br /> <br /> if (prio == OS_LO_PRIO) { /* Not allowed to delete idle task */ <br /> return (OS_TASK_DEL_IDLE); <br /> } <br /> if (prio >= OS_MAX_TASKS && prio != OS_PRIO_SELF) { /* Make sure task priority is valid */ <br /> return (OS_PRIO_INVALID); <br /> } <br /> OS_ENTER_CRITICAL(); <br /> priocur = OSTCBCur->OSTCBPrio; /* Obtain the current priority */ <br /> if (prio == OS_PRIO_SELF) { /* See if requesting to delete self */ <br /> prio = priocur; /* Set priority to delete to current */ <br /> } <br /> if ((ptcb = OSTCBPrioTbl[prio]) != (OS_TCB *)0) { /* Task to delete must exist */ <br /> OSTCBPrioTbl[prio] = (OS_TCB *)0; /* Clear old priority entry */ <br /> if ((OSRdyTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0) {/* Make task not ready */ <br /> OSRdyGrp &= ~ptcb->OSTCBBitY; <br /> } <br /> if ((pevent = ptcb->OSTCBEventPtr) != (OS_EVENT *)0) { /* If task is waiting on event */ <br /> if ((pevent->OSEventTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0) { /* ... remove task from */ <br /> pevent->OSEventGrp &= ~ptcb->OSTCBBitY; /* ... event ctrl block */ <br /> } <br /> } <br /> ptcb->OSTCBDly = 0; /* Prevent OSTimeTick() from updating */ <br /> OS_EXIT_CRITICAL(); /* Enabling INT. ignores next instruc. */ <br /> OSDummy(); /* ... Dummy ensures that INTs will be */ <br /> OS_ENTER_CRITICAL(); /* ... disabled HERE! */ <br /> if (ptcb->OSTCBPrev == (OS_TCB *)0) { /* Remove from TCB chain */ <br /> ptcb->OSTCBNext->OSTCBPrev = (OS_TCB *)0; <br /> OSTCBList = ptcb->OSTCBNext; <br /> } else { <br /> ptcb->OSTCBPrev->OSTCBNext = ptcb->OSTCBNext; <br /> ptcb->OSTCBNext->OSTCBPrev = ptcb->OSTCBPrev; <br /> } <br /> ptcb->OSTCBNext = OSTCBFreeList; /* Return TCB to free TCB list */ <br /> OSTCBFreeList = ptcb; <br /> if (prio == priocur) { /* Resched. only if deleting self! */ <br /> OS_EXIT_CRITICAL(); <br /> OSSched(); /* Find new highest priority task */ <br /> } else { <br /> OS_EXIT_CRITICAL(); <br /> } <br /> return (OS_NO_ERR); <br /> } else { <br />&nb
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -