From 39ddc21ca52aaa9330e4028add0c2d9901ac8dff Mon Sep 17 00:00:00 2001 From: fslongjin Date: Sat, 29 Jan 2022 15:12:34 +0800 Subject: [PATCH] =?UTF-8?q?:new:=20=E5=AE=9E=E7=8E=B0=E7=AE=80=E5=8D=95?= =?UTF-8?q?=E7=9A=84=E8=AF=BB=E5=8F=96=E9=94=AE=E7=9B=98=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/common/printk.c | 24 +++++++++++------------- kernel/exception/irq.c | 14 ++++++++++++++ kernel/main.c | 1 - 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/kernel/common/printk.c b/kernel/common/printk.c index d78b73ea..645fba7c 100644 --- a/kernel/common/printk.c +++ b/kernel/common/printk.c @@ -346,21 +346,20 @@ static int vsprintf(char *buf, const char *fmt, va_list args) if (qualifier == 'l') ip = va_arg(args, long long *); else - ip = (ll*)va_arg(args, int *); + ip = (ll *)va_arg(args, int *); *ip = str - buf; break; case 'f': // 默认精度为3 - //printk("1111\n"); - //va_arg(args, double); - //printk("222\n"); - + //printk("1111\n"); + //va_arg(args, double); + //printk("222\n"); + if (precision < 0) precision = 3; - str = write_float_point_num(str, va_arg(args, double), field_width, precision, flags); - - + str = write_float_point_num(str, va_arg(args, double), field_width, precision, flags); + break; //对于不识别的控制符,直接输出 @@ -402,12 +401,11 @@ static char *write_num(char *str, ull num, int base, int field_width, int precis if (flags & SMALL) digits = "0123456789abcdefghijklmnopqrstuvwxyz"; - if(flags&LEFT) + if (flags & LEFT) flags &= ~PAD_ZERO; // 设置填充元素 pad = (flags & PAD_ZERO) ? '0' : ' '; - sign = 0; if (flags & SIGN && num < 0) { @@ -451,7 +449,7 @@ static char *write_num(char *str, ull num, int base, int field_width, int precis field_width -= precision; // 靠右对齐 - if (!(flags & (LEFT+PAD_ZERO))) + if (!(flags & (LEFT + PAD_ZERO))) while (field_width-- > 0) *str++ = ' '; @@ -465,8 +463,8 @@ static char *write_num(char *str, ull num, int base, int field_width, int precis } else if (base == 8) *str++ = digits[24]; //注意这里是英文字母O或者o - if(!(flags&LEFT)) - while(field_width-->0) + if (!(flags & LEFT)) + while (field_width-- > 0) *str++ = pad; while (js_num < precision) { diff --git a/kernel/exception/irq.c b/kernel/exception/irq.c index 1ad7c7ef..02f84815 100644 --- a/kernel/exception/irq.c +++ b/kernel/exception/irq.c @@ -126,6 +126,20 @@ void init_irq() */ void do_IRQ(ul rsp, ul number) { + unsigned char x; + switch (number) + { + case 0x20: // 时钟中断信号 + + break; + case 0x21: // 键盘中断 + + x = io_in8(0x60); + printk_color(ORANGE, BLACK, "Received key irq, key code:%#018lx\n", x); + break; + default: + break; + } if(number!=0x20) printk_color(ORANGE, BLACK, "Received irq:%#018x\n", number); diff --git a/kernel/main.c b/kernel/main.c index a79475c7..7535a09c 100644 --- a/kernel/main.c +++ b/kernel/main.c @@ -116,7 +116,6 @@ void Start_Kernel(void) test_mm(); //test_printk(); - //int t = 1 / 0; // 测试异常处理模块能否正常工作 触发除法错误 // int t = *(int *)0xffff80000aa00000; // 触发页故障