From 27057bc9b467db64a3de600f27d6fa3239a04c88 Mon Sep 17 00:00:00 2001 From: Robert Morris Date: Mon, 20 Jul 2020 06:59:26 -0400 Subject: interrupt-driven uart output, hopefully a nice example for teaching. --- kernel/console.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'kernel/console.c') diff --git a/kernel/console.c b/kernel/console.c index 87a83ff..a97ef30 100644 --- a/kernel/console.c +++ b/kernel/console.c @@ -27,6 +27,8 @@ // // send one character to the uart. +// called by printf, and to echo input characters, +// but not from write(). // void consputc(int c) @@ -40,9 +42,9 @@ consputc(int c) if(c == BACKSPACE){ // if the user typed backspace, overwrite with a space. - uartputc('\b'); uartputc(' '); uartputc('\b'); + uartputc('\b', 0); uartputc(' ', 0); uartputc('\b', 0); } else { - uartputc(c); + uartputc(c, 0); } } @@ -70,7 +72,7 @@ consolewrite(int user_src, uint64 src, int n) char c; if(either_copyin(&c, user_src, src+i, 1) == -1) break; - consputc(c); + uartputc(c, 1); } release(&cons.lock); -- cgit v1.2.3 From 0f50e9527c68168c8114a38b211a8744e3bd2473 Mon Sep 17 00:00:00 2001 From: Robert Morris Date: Wed, 22 Jul 2020 10:31:46 -0400 Subject: fix printf() in interrupts --- kernel/console.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'kernel/console.c') diff --git a/kernel/console.c b/kernel/console.c index a97ef30..9a18cd9 100644 --- a/kernel/console.c +++ b/kernel/console.c @@ -42,9 +42,9 @@ consputc(int c) if(c == BACKSPACE){ // if the user typed backspace, overwrite with a space. - uartputc('\b', 0); uartputc(' ', 0); uartputc('\b', 0); + uartputc_sync('\b'); uartputc_sync(' '); uartputc_sync('\b'); } else { - uartputc(c, 0); + uartputc_sync(c); } } @@ -72,7 +72,7 @@ consolewrite(int user_src, uint64 src, int n) char c; if(either_copyin(&c, user_src, src+i, 1) == -1) break; - uartputc(c, 1); + uartputc(c); } release(&cons.lock); -- cgit v1.2.3 From e3b7058907dff779cf94e23bf6bb84245faf481d Mon Sep 17 00:00:00 2001 From: Robert Morris Date: Fri, 7 Aug 2020 15:06:43 -0400 Subject: streamline copyin/copyout code in usertests fix bugs in read/write return values when there's an error --- kernel/console.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'kernel/console.c') diff --git a/kernel/console.c b/kernel/console.c index 9a18cd9..2b1ed3c 100644 --- a/kernel/console.c +++ b/kernel/console.c @@ -76,7 +76,7 @@ consolewrite(int user_src, uint64 src, int n) } release(&cons.lock); - return n; + return i; } // -- cgit v1.2.3