void schedule(void) { word_t action; action = (word_t)ksSchedulerAction; //printf("\n=======In schedule======\n"); if (action == (word_t)SchedulerAction_ChooseNewThread) { printf("in action_choosenewthread\n"); if (isRunnable(ksCurThread)) { tcbSchedEnqueue(ksCurThread); } if (CONFIG_NUM_DOMAINS > 1 && ksDomainTime == 0) { printf("will next domain\n"); nextDomain(); } printf("go to choosethread\n"); chooseThread(); ksSchedulerAction = SchedulerAction_ResumeCurrentThread; } else if (action != (word_t)SchedulerAction_ResumeCurrentThread) { if (isRunnable(ksCurThread)) { tcbSchedEnqueue(ksCurThread); } /* SwitchToThread */ switchToThread(ksSchedulerAction); ksSchedulerAction = SchedulerAction_ResumeCurrentThread; } }
void schedule(void) { word_t action; action = (word_t)ksSchedulerAction; if (action == (word_t)SchedulerAction_ChooseNewThread) { if (isRunnable(ksCurThread)) { tcbSchedEnqueue(ksCurThread); } if (ksDomainTime == 0) { nextDomain(); } chooseThread(); ksSchedulerAction = SchedulerAction_ResumeCurrentThread; } else if (action != (word_t)SchedulerAction_ResumeCurrentThread) { if (isRunnable(ksCurThread)) { tcbSchedEnqueue(ksCurThread); } /* SwitchToThread */ switchToThread(ksSchedulerAction); ksSchedulerAction = SchedulerAction_ResumeCurrentThread; } }