You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
peari9jp6/kernel/src/trap.rs

36 lines
857 B

use process::*;
use arch::interrupt::TrapFrame;
/*
* @brief:
* process timer interrupt
*/
pub fn timer() {
let mut processor = processor();
processor.tick();
}
pub fn before_return() {
if let Some(processor) = PROCESSOR.try() {
processor.lock().schedule();
}
}
/*
* @param:
* TrapFrame: the error's trapframe
* @brief:
* process the error trap, if processor inited then exit else panic!
*/
7 years ago
pub fn error(tf: &TrapFrame) -> ! {
if let Some(processor) = PROCESSOR.try() {
let mut processor = processor.lock();
let pid = processor.current_pid();
error!("Process {} error:\n{:#x?}", pid, tf);
processor.exit(pid, 0x100); // TODO: Exit code for error
7 years ago
processor.schedule();
unreachable!();
} else {
panic!("Exception when processor not inited\n{:#x?}", tf);
}
}