[求助]ucos中OS_Sched 函数的疑问
我在看书的时候对这个函数不时很理解。
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))
{
y = OSUnMapTbl[OSRdyGrp];
OSPrioHighRdy = (INT8U)((y < < 3) + OSUnMapTbl[OSRdyTbl[y]]);
if (OSPrioHighRdy != OSPrioCur)
{
OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
OSCtxSwCtr++;
OS_TASK_SW(); /* Perform a context switch */
}
}
OS_EXIT_CRITICAL();
}
书上说执行完OS_TASK_SW()后,PC的值变了。那就是说程序要跳到另外的地方。我的疑问是:下面的OS_EXIT_CRITICAL()不就不执行了吗?中断可还是关着的啊,什么时候开呢,在哪开呢?
发表时间:2005年8月15日9:55:45