diff --git a/kernel/src/arch/riscv32/io.rs b/kernel/src/arch/riscv32/io.rs index b297e9c..04b7822 100644 --- a/kernel/src/arch/riscv32/io.rs +++ b/kernel/src/arch/riscv32/io.rs @@ -33,9 +33,11 @@ fn putchar(c: u8) { pub fn getchar() -> char { let c = if cfg!(feature = "board_k210") { - unsafe { - while RXDATA.read_volatile() & (1 << 31) == 0 {} - (RXDATA as *const u8).read_volatile() + loop { + let rxdata = unsafe { RXDATA.read_volatile() }; + if rxdata & (1 << 31) == 0 { + break rxdata as u8; + } } } else if cfg!(feature = "m_mode") { (super::BBL.mcall_console_getchar)() as u8 diff --git a/kernel/src/shell.rs b/kernel/src/shell.rs index b8443f3..cce3856 100644 --- a/kernel/src/shell.rs +++ b/kernel/src/shell.rs @@ -40,7 +40,7 @@ fn get_line() -> String { loop { let c = get_char(); match c { - '\u{7f}' /* '\b' */ => { + '\u{8}' | '\u{7f}' /* '\b' */ => { if s.pop().is_some() { print!("\u{7f}"); }