fix: format code
This commit is contained in:
@@ -3,6 +3,7 @@ use core::arch::asm;
|
||||
use lazy_static::lazy_static;
|
||||
|
||||
use crate::log_information;
|
||||
use crate::sbi::shutdown;
|
||||
use crate::sync::single_cell::SingleCell;
|
||||
use crate::trap::context::TrapContext;
|
||||
|
||||
@@ -26,14 +27,13 @@ lazy_static! {
|
||||
let num_app_ptr = _num_app as usize as *const usize;
|
||||
let num_app = num_app_ptr.read_volatile();
|
||||
let mut start_addresses: [usize; MAX_APP_NUMBER + 1] = [0; MAX_APP_NUMBER + 1];
|
||||
let start_addresses_raw: &[usize] = core::slice::from_raw_parts(
|
||||
num_app_ptr.add(1), num_app + 1
|
||||
);
|
||||
let start_addresses_raw: &[usize] =
|
||||
core::slice::from_raw_parts(num_app_ptr.add(1), num_app + 1);
|
||||
start_addresses[..=num_app].copy_from_slice(start_addresses_raw);
|
||||
AppManager {
|
||||
app_count: num_app,
|
||||
current: 0,
|
||||
start_addresses
|
||||
start_addresses,
|
||||
}
|
||||
})
|
||||
};
|
||||
@@ -44,10 +44,12 @@ impl AppManager {
|
||||
log_information!("[kernel] Application count is {}.", self.app_count);
|
||||
|
||||
for i in 0..self.app_count {
|
||||
log_information!("[kernel] Application_{} ({:#x} -> {:#x})",
|
||||
i,
|
||||
self.start_addresses[i],
|
||||
self.start_addresses[i + 1]);
|
||||
log_information!(
|
||||
"[kernel] Application_{} ({:#x} -> {:#x})",
|
||||
i,
|
||||
self.start_addresses[i],
|
||||
self.start_addresses[i + 1]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,19 +68,14 @@ impl AppManager {
|
||||
|
||||
log_information!("[kernel] Loading application_{}...", app_id);
|
||||
|
||||
core::slice::from_raw_parts_mut(
|
||||
APP_BASE_ADDRESS as *mut u8,
|
||||
APP_SIZE_LIMIT
|
||||
).fill(0);
|
||||
core::slice::from_raw_parts_mut(APP_BASE_ADDRESS as *mut u8, APP_SIZE_LIMIT).fill(0);
|
||||
|
||||
let app_source = core::slice::from_raw_parts(
|
||||
self.start_addresses[app_id] as *const u8,
|
||||
self.start_addresses[app_id + 1] - self.start_addresses[app_id]
|
||||
);
|
||||
let app_destination = core::slice::from_raw_parts_mut(
|
||||
APP_BASE_ADDRESS as *mut u8,
|
||||
app_source.len()
|
||||
self.start_addresses[app_id + 1] - self.start_addresses[app_id],
|
||||
);
|
||||
let app_destination =
|
||||
core::slice::from_raw_parts_mut(APP_BASE_ADDRESS as *mut u8, app_source.len());
|
||||
app_destination.copy_from_slice(app_source);
|
||||
|
||||
// 保证指令缓存的更新
|
||||
@@ -92,7 +89,7 @@ const KERNEL_STACK_SIZE: usize = 4096 * 2;
|
||||
|
||||
#[repr(align(4096))]
|
||||
struct UserStack {
|
||||
data: [u8; USER_STACK_SIZE]
|
||||
data: [u8; USER_STACK_SIZE],
|
||||
}
|
||||
|
||||
impl UserStack {
|
||||
@@ -103,7 +100,7 @@ impl UserStack {
|
||||
|
||||
#[repr(align(4096))]
|
||||
struct KernelStack {
|
||||
data: [u8; KERNEL_STACK_SIZE]
|
||||
data: [u8; KERNEL_STACK_SIZE],
|
||||
}
|
||||
|
||||
impl KernelStack {
|
||||
@@ -120,8 +117,12 @@ impl KernelStack {
|
||||
}
|
||||
}
|
||||
|
||||
static KERNEL_STACK: KernelStack = KernelStack { data: [0; KERNEL_STACK_SIZE]};
|
||||
static USER_STACK: UserStack = UserStack { data: [0; USER_STACK_SIZE]};
|
||||
static KERNEL_STACK: KernelStack = KernelStack {
|
||||
data: [0; KERNEL_STACK_SIZE],
|
||||
};
|
||||
static USER_STACK: UserStack = UserStack {
|
||||
data: [0; USER_STACK_SIZE],
|
||||
};
|
||||
|
||||
pub fn print_app_information() {
|
||||
let app_manager = APP_MANAGER.exclusive_borrow();
|
||||
@@ -131,6 +132,11 @@ pub fn print_app_information() {
|
||||
pub fn run_next_application() -> ! {
|
||||
let mut app_manager = APP_MANAGER.exclusive_borrow();
|
||||
let current_app = app_manager.get_current_app();
|
||||
if current_app >= app_manager.app_count {
|
||||
log_information!("Run out of applications, the os will stop!");
|
||||
shutdown(true);
|
||||
}
|
||||
|
||||
unsafe {
|
||||
app_manager.load_app(current_app);
|
||||
}
|
||||
@@ -147,12 +153,10 @@ pub fn run_next_application() -> ! {
|
||||
unsafe {
|
||||
let context_address = KERNEL_STACK.push_context(TrapContext::init_application_context(
|
||||
APP_BASE_ADDRESS,
|
||||
USER_STACK.get_sp()
|
||||
USER_STACK.get_sp(),
|
||||
)) as *const _ as usize;
|
||||
__restore(context_address);
|
||||
|
||||
unreachable!()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user