#[derive(Copy, Clone)] #[repr(C)] pub struct TaskContext { ra: usize, sp: usize, s: [usize; 12], } impl TaskContext { pub fn new() -> Self { Self { ra: 0, sp: 0, s: [0; 12], } } /// set the task context { __restore function, kernel stack, s_0 -> s_12 } pub fn goto_restore(kernel_stack_pointer: usize) -> Self { extern "C" { fn __restore(); } Self { ra: __restore as usize, sp: kernel_stack_pointer, s: [0; 12], } } }