Chapter3: power2/3/5 & sleep test worked on k210/qemu based on timer.
This commit is contained in:
parent
adbe671fe1
commit
1cef77eac7
17 changed files with 183 additions and 82 deletions
|
@ -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),
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue