switch for scheduler
This commit is contained in:
parent
e64e294168
commit
3f4b7a0292
44
src/main.c
44
src/main.c
|
@ -95,6 +95,21 @@ static void check_keyevents(void) {
|
|||
}
|
||||
}
|
||||
|
||||
__attribute__((noreturn)) void halt(void) {
|
||||
term_kprint("SYSTEM HALTED");
|
||||
|
||||
set_statusbar(tick_ctr, shift_state, alpha_state, get_battery_voltage());
|
||||
set_menubar();
|
||||
|
||||
dclear(C_BLACK);
|
||||
tgrid_display();
|
||||
dupdate();
|
||||
|
||||
while (1) {
|
||||
getkey();
|
||||
}
|
||||
}
|
||||
|
||||
int main(int isappli, int optnum) {
|
||||
term_kprintf("main(%d, %d)", isappli, optnum);
|
||||
|
||||
|
@ -166,7 +181,8 @@ int main(int isappli, int optnum) {
|
|||
|
||||
// first, backup current scheduler context
|
||||
const int ret = setjmp(sched_ctxbuf);
|
||||
if (ret == 0) {
|
||||
switch (ret) {
|
||||
case 0:
|
||||
// pause timer during sheduler operations, we restart it before resuming a job
|
||||
timer_pause(timer_sched);
|
||||
|
||||
|
@ -174,34 +190,24 @@ int main(int isappli, int optnum) {
|
|||
timer_start(timer_sched);
|
||||
must_yield = 0;
|
||||
job_resume(current_job_id);
|
||||
} else if (ret == 1) {
|
||||
break;
|
||||
case 1:
|
||||
job_GC(current_job_id);
|
||||
// term_kprintf("job(%d) yield", current_job_id);
|
||||
continue;
|
||||
} else if (ret == 2) {
|
||||
break;
|
||||
case 2:
|
||||
term_kprintf("job(%d) exit", current_job_id);
|
||||
job_free(current_job_id);
|
||||
} else {
|
||||
break;
|
||||
default:
|
||||
__builtin_unreachable();
|
||||
term_kprint("SHOULD NOT BE REACHED!!!");
|
||||
break;
|
||||
halt();
|
||||
}
|
||||
}
|
||||
|
||||
term_eprint("SYSTEM HALTED");
|
||||
|
||||
set_statusbar(tick_ctr, shift_state, alpha_state, get_battery_voltage());
|
||||
set_menubar();
|
||||
|
||||
dclear(C_BLACK);
|
||||
tgrid_display();
|
||||
dupdate();
|
||||
|
||||
while (1) {
|
||||
getkey();
|
||||
}
|
||||
|
||||
__builtin_unreachable();
|
||||
halt();
|
||||
|
||||
return 1;
|
||||
}
|
Loading…
Reference in New Issue