Chapter3: power2/3/5 & sleep test worked on k210/qemu based on timer.

This commit is contained in:
Yifan Wu 2020-11-29 10:31:15 +08:00
parent adbe671fe1
commit 1cef77eac7
17 changed files with 183 additions and 82 deletions

View file

@ -1,7 +1,7 @@
const SYSCALL_WRITE: usize = 64;
const SYSCALL_EXIT: usize = 93;
const SYSCALL_YIELD: usize = 124;
//const SYSCALL_GET_TIME: usize = 169;
const SYSCALL_GET_TIME: usize = 169;
mod fs;
mod process;
@ -14,6 +14,7 @@ pub fn syscall(syscall_id: usize, args: [usize; 3]) -> isize {
SYSCALL_WRITE => sys_write(args[0], args[1] as *const u8, args[2]),
SYSCALL_EXIT => sys_exit(args[0] as i32),
SYSCALL_YIELD => sys_yield(),
SYSCALL_GET_TIME => sys_get_time(),
_ => panic!("Unsupported syscall_id: {}", syscall_id),
}
}

View file

@ -1,18 +1,20 @@
use crate::task::{
mark_current_suspended,
mark_current_exited,
run_next_task
suspend_current_and_run_next,
exit_current_and_run_next,
};
use crate::timer::get_time;
pub fn sys_exit(xstate: i32) -> ! {
println!("[kernel] Application exited with code {}", xstate);
mark_current_exited();
run_next_task();
exit_current_and_run_next();
panic!("Unreachable in sys_exit!");
}
pub fn sys_yield() -> isize {
mark_current_suspended();
run_next_task();
suspend_current_and_run_next();
0
}
pub fn sys_get_time() -> isize {
get_time() as isize
}