From 3d1d55670dc24641a89215edafbe9058609438b0 Mon Sep 17 00:00:00 2001 From: Yu Chen Date: Fri, 25 Mar 2022 16:14:17 +0800 Subject: [PATCH] update comments --- os/src/batch.rs | 5 +++++ os/src/main.rs | 7 +++---- os/src/trap/context.rs | 17 +++++++++++------ 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/os/src/batch.rs b/os/src/batch.rs index 06764a0c..44031f36 100644 --- a/os/src/batch.rs +++ b/os/src/batch.rs @@ -1,3 +1,5 @@ +//! batch subsystem + use crate::sync::UPSafeCell; use crate::trap::TrapContext; use core::arch::asm; @@ -111,14 +113,17 @@ lazy_static! { }; } +/// init batch subsystem pub fn init() { print_app_info(); } +/// print apps info pub fn print_app_info() { APP_MANAGER.exclusive_access().print_app_info(); } +/// run next app pub fn run_next_app() -> ! { let mut app_manager = APP_MANAGER.exclusive_access(); let current_app = app_manager.get_current_app(); diff --git a/os/src/main.rs b/os/src/main.rs index cdeced1a..8abd011b 100644 --- a/os/src/main.rs +++ b/os/src/main.rs @@ -24,17 +24,16 @@ use core::arch::global_asm; #[macro_use] mod console; -mod batch; +pub mod batch; mod lang_items; mod sbi; mod sync; -mod syscall; -mod trap; +pub mod syscall; +pub mod trap; global_asm!(include_str!("entry.asm")); global_asm!(include_str!("link_app.S")); - /// clear BSS segment fn clear_bss() { extern "C" { diff --git a/os/src/trap/context.rs b/os/src/trap/context.rs index af5a53a8..c6797497 100644 --- a/os/src/trap/context.rs +++ b/os/src/trap/context.rs @@ -1,25 +1,30 @@ use riscv::register::sstatus::{self, Sstatus, SPP}; - +/// Trap Context #[repr(C)] pub struct TrapContext { + /// general regs[0..31] pub x: [usize; 32], + /// CSR sstatus pub sstatus: Sstatus, + /// CSR sepc pub sepc: usize, } impl TrapContext { + /// set stack pointer to x_2 reg (sp) pub fn set_sp(&mut self, sp: usize) { self.x[2] = sp; } + /// init app context pub fn app_init_context(entry: usize, sp: usize) -> Self { - let mut sstatus = sstatus::read(); - sstatus.set_spp(SPP::User); + let mut sstatus = sstatus::read(); // CSR sstatus + sstatus.set_spp(SPP::User); //previous privilege mode: user mode let mut cx = Self { x: [0; 32], sstatus, - sepc: entry, + sepc: entry, // entry point of app }; - cx.set_sp(sp); - cx + cx.set_sp(sp); // app's user stack pointer + cx // return initial Trap Context of app } }