mirror of
https://github.com/rcore-os/rCore-Tutorial-v3.git
synced 2024-11-25 10:56:25 +04:00
explicitly UART.init() in rust_main
This commit is contained in:
parent
e0e201a131
commit
cd2e2307d2
@ -6,6 +6,7 @@ use lazy_static::*;
|
||||
pub use ns16550a::NS16550a;
|
||||
|
||||
pub trait CharDevice {
|
||||
fn init(&self);
|
||||
fn read(&self) -> u8;
|
||||
fn write(&self, ch: u8);
|
||||
fn handle_irq(&self);
|
||||
|
@ -135,7 +135,7 @@ impl<const BASE_ADDR: usize> NS16550a<BASE_ADDR> {
|
||||
ns16550a: NS16550aRaw::new(BASE_ADDR),
|
||||
read_buffer: VecDeque::new(),
|
||||
};
|
||||
inner.ns16550a.init();
|
||||
//inner.ns16550a.init();
|
||||
Self {
|
||||
inner: unsafe { UPIntrFreeCell::new(inner) },
|
||||
condvar: Condvar::new(),
|
||||
@ -144,6 +144,12 @@ impl<const BASE_ADDR: usize> NS16550a<BASE_ADDR> {
|
||||
}
|
||||
|
||||
impl<const BASE_ADDR: usize> CharDevice for NS16550a<BASE_ADDR> {
|
||||
fn init(&self){
|
||||
let mut inner = self.inner.exclusive_access();
|
||||
inner.ns16550a.init();
|
||||
drop(inner);
|
||||
}
|
||||
|
||||
fn read(&self) -> u8 {
|
||||
loop {
|
||||
let mut inner = self.inner.exclusive_access();
|
||||
|
@ -28,6 +28,8 @@ mod task;
|
||||
mod timer;
|
||||
mod trap;
|
||||
|
||||
use crate::drivers::chardev::CharDevice;
|
||||
use crate::drivers::chardev::UART;
|
||||
//use syscall::create_desktop; //for test
|
||||
|
||||
core::arch::global_asm!(include_str!("entry.asm"));
|
||||
@ -55,6 +57,7 @@ lazy_static! {
|
||||
pub fn rust_main() -> ! {
|
||||
clear_bss();
|
||||
mm::init();
|
||||
UART.init();
|
||||
println!("KERN: init gpu");
|
||||
let _gpu = GPU_DEVICE.clone();
|
||||
println!("KERN: init keyboard");
|
||||
|
Loading…
Reference in New Issue
Block a user