void OS_Sched (void)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
INT8U y;
OS_ENTER_CRITICAL(); /*所有代码都属于临界代码,在寻找进入就绪态的优先级最高的任务过
程中,为防止中断服务程序把一个或几个任务的就绪位置位,中断要
关掉*/
if ((OSIntNesting == 0) && (OSLockNesting == 0)) { /* Sched. only if all ISRs done & not locked */
y = OSUnMapTbl[OSRdyGrp]; /* Get pointer to HPT ready to run */
OSPrioHighRdy = (INT8U)((y << 3) + OSUnMapTbl[OSRdyTbl[y]]);
if (OSPrioHighRdy != OSPrioCur) { /* No Ctx Sw if current task is highest rdy */
OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
OSCtxSwCtr++; /* Increment context switch counter */
OS_TASK_SW(); /* Perform a context switch */
}
}
OS_EXIT_CRITICAL();
OSPrioHighRdy-->已就绪最高优先级号(整数类型)
OSPrioCur-->当前任务优先级号(整数类型)
OSTCBPrioTbl[]-->数组元素为指向 OS_TCB 类型指针,数组的下标号为 TCB 相应任务的优先级号
OSTCBHighRdy-->指向已就绪的最高优先级任务的 TCB 指针
欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) | Powered by Discuz! X3.2 |