...
 
Commits (2)
    https://gitcode.net/rcore-os/rCore-Tutorial-v3/-/commit/cd2e2307d230341ad9e0c692aebe7b0c0610b055 explicitly UART.init() in rust_main 2023-01-03T09:32:36+08:00 Yu Chen yuchen@mail.tsinghua.edu.cn https://gitcode.net/rcore-os/rCore-Tutorial-v3/-/commit/d56c5d1229bd1addf9a61deab438105b44e34ac9 update move_rect Fn 2023-01-03T18:34:45+08:00 Yu Chen yuchen@mail.tsinghua.edu.cn
......@@ -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,7 +28,14 @@ impl DrawingBoard {
.draw(&mut self.graphics)
.ok();
}
fn unpaint(&mut self) {
Rectangle::with_center(self.latest_pos, Size::new(RECT_SIZE, RECT_SIZE))
.into_styled(PrimitiveStyle::with_stroke(Rgb888::BLACK, 1))
.draw(&mut self.graphics)
.ok();
}
pub fn move_rect(&mut self, dx: i32, dy: i32) {
self.unpaint();
self.latest_pos.x += dx;
self.latest_pos.y += dy;
self.paint();
......
......@@ -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");
......