parent
91043b08cd
commit
4590f233b5
@ -1,12 +1,18 @@
|
||||
use crate::task::switch_to_next_task;
|
||||
use crate::task::{
|
||||
mark_current_suspended,
|
||||
mark_current_exited,
|
||||
run_next_task
|
||||
};
|
||||
|
||||
pub fn sys_exit(xstate: i32) -> ! {
|
||||
println!("[kernel] Application exited with code {}", xstate);
|
||||
//run_next_app()
|
||||
panic!("[kernel] first exit!");
|
||||
mark_current_exited();
|
||||
run_next_task();
|
||||
panic!("Unreachable in sys_exit!");
|
||||
}
|
||||
|
||||
pub fn sys_yield() -> isize {
|
||||
switch_to_next_task();
|
||||
mark_current_suspended();
|
||||
run_next_task();
|
||||
0
|
||||
}
|
@ -1,7 +1,5 @@
|
||||
use super::TaskContext;
|
||||
|
||||
global_asm!(include_str!("switch.S"));
|
||||
|
||||
extern "C" {
|
||||
pub fn __switch(current_task_cx: &usize, next_task_cx: &usize);
|
||||
pub fn __switch(current_task_cx: *const usize, next_task_cx: *const usize);
|
||||
}
|
||||
|
@ -0,0 +1,18 @@
|
||||
pub struct TaskControlBlock {
|
||||
pub task_cx_ptr: usize,
|
||||
pub task_status: TaskStatus,
|
||||
}
|
||||
|
||||
impl TaskControlBlock {
|
||||
pub fn get_task_cx_ptr2(&self) -> *const usize {
|
||||
&self.task_cx_ptr as *const usize
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, PartialEq)]
|
||||
pub enum TaskStatus {
|
||||
UnInit,
|
||||
Ready,
|
||||
Running,
|
||||
Exited,
|
||||
}
|
Loading…
Reference in new issue