switch for scheduler

This commit is contained in:
Babz 2021-09-17 20:40:31 +02:00
parent e64e294168
commit 3f4b7a0292
1 changed files with 25 additions and 19 deletions

View File

@ -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;
}