From 0d957ff1a6f3dbe655c93737445b7151537b4b92 Mon Sep 17 00:00:00 2001 From: WangRunji Date: Wed, 26 Dec 2018 23:53:14 +0800 Subject: [PATCH] fix getchar on K210 --- kernel/src/arch/riscv32/io.rs | 8 +++++--- kernel/src/shell.rs | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) 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}"); }