]> Zhao Yanbai Git Server - kernel.git/commitdiff
printk的buf改为局部变量
authoracevest <zhaoyanbai@126.com>
Tue, 17 Sep 2024 02:54:57 +0000 (10:54 +0800)
committeracevest <zhaoyanbai@126.com>
Tue, 17 Sep 2024 02:54:57 +0000 (10:54 +0800)
Makefile
kernel/irq.c
kernel/printk.c
kernel/task_root.c
qemu.sh

index b2c8ab4b02e3b7a8f46fa9b56419c9ef743550b0..3fa3152a1ab6cc4fa2bdbd76151085d7790eb609 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -22,7 +22,7 @@ CC                    = $(CROSS_PREFIX)gcc
 LD                     = $(CROSS_PREFIX)ld
 
 CFLAGS         = -g -c -fno-builtin -m32 -DBUILDER='"$(shell whoami)"'
-# æ\8c\87示ç¼\96è¯\91å\99¨ç\94\9fæ\88\90ä¸\8dä¾\9dèµ\96位置无关代码
+# æ\8c\87示ç¼\96è¯\91å\99¨ç¦\81æ­¢ç\94\9fæ\88\90位置无关代码
 CFLAGS     += -fno-pic
 # 指示编译器在生成目标文件时不省略函数调用栈帧指针: frame pointer
 CFLAGS     += -fno-omit-frame-pointer
index 701513ad35ad3010be3c9a7020bc01ee056801d8..63ee4e97462356aed86cc06351066e92b35b86ed 100644 (file)
@@ -90,6 +90,7 @@ __attribute__((regparm(1))) void irq_handler(pt_regs_t *regs) {
     irq_desc_t *p = irq_desc + irq;
     irq_action_t *action = p->action;
 
+    // 在qemu启动后如果gdb有加断点,就很会一直触发中断重入
     reenter++;
     reenter_count += reenter == 0 ? 0 : 1;
     assert(irq_disabled());
@@ -160,6 +161,10 @@ __attribute__((regparm(1))) void irq_handler(pt_regs_t *regs) {
         return;
     }
 
+    // if (irq != 0) {
+    //     return;
+    // }
+
     enable_irq();
 
     // 如果需要调度程序
index 74fd9a1d83770029e545f5bf466dbd9788357f45..393424537c638dc154239847f7e422014cb5af9a 100644 (file)
@@ -22,41 +22,45 @@ int vsprintf(char *buf, const char *fmt, char *args);
 
 void serial_write(const char *buf, size_t size);
 
-char pkbuf[1024];
+
 extern tty_t *const default_tty;
 int printk(const char *fmtstr, ...) {
-    ENTER_CRITICAL_ZONE;
+    char pkbuf[1024];
+    // ENTER_CRITICAL_ZONE;
 
     char *args = (char *)(((char *)&fmtstr) + 4);
     int size = vsprintf(pkbuf, fmtstr, args);
     tty_write(default_tty, pkbuf, (size_t)size);
     serial_write(pkbuf, (size_t)size);
 
-    EXIT_CRITICAL_ZONE;
+    // EXIT_CRITICAL_ZONE;
     return 0;
 }
 
 extern tty_t *const debug_tty;
-char pdbuf[1024];
 int printd(const char *fmtstr, ...) {
-    ENTER_CRITICAL_ZONE;
+    char pdbuf[1024];
+    // ENTER_CRITICAL_ZONE;
 
     char *args = (char *)(((char *)&fmtstr) + 4);
     int size = vsprintf(pdbuf, fmtstr, args);
     tty_write(debug_tty, pdbuf, (size_t)size);
     serial_write(pdbuf, (size_t)size);
 
-    EXIT_CRITICAL_ZONE;
+    // EXIT_CRITICAL_ZONE;
     return 0;
 }
 
-char plobuf[1024];
+
 extern tty_t *const monitor_tty;
 int printlo(unsigned int xpos, unsigned int ypos, const char *fmtstr, ...) {
-    ENTER_CRITICAL_ZONE;
+    char plobuf[1024];
 
     char *args = (char *)(((char *)&fmtstr) + 4);
     int size = vsprintf(plobuf, fmtstr, args);
+
+    ENTER_CRITICAL_ZONE;
+
     tty_write_at(monitor_tty, xpos, ypos, plobuf, (size_t)size);
 
     EXIT_CRITICAL_ZONE;
index b71231d3dc9845e3c4f586ece685cfa4e687bae0..59ad457bb41312fad4e429247bd29db159c42332 100644 (file)
@@ -101,7 +101,7 @@ void taskA_entry() {
     current->priority = 7;
 
     while (1) {
-        sysc_wait(7);
+        sysc_wait(37);
 
         uint64_t sect_nr = get_next_deubug_sect_nr();
         memset(disk_buf1, 0, 512);
@@ -128,7 +128,7 @@ void taskB_entry() {
     current->priority = 13;
 
     while (1) {
-        sysc_wait(7);
+        sysc_wait(73);
         uint64_t sect_nr = get_next_deubug_sect_nr();
         memset(disk_buf2, 0, 512);
         disk_request_t r;
diff --git a/qemu.sh b/qemu.sh
index 50df4d328cd2c171a5149b0111acdfa15b07cb93..9fd85e08420a4dd84411daee4dab573ea1f16e16 100755 (executable)
--- a/qemu.sh
+++ b/qemu.sh
@@ -31,6 +31,9 @@ qemu-system-i386 \
     -s -S \
     &
 
+    #-cpu qemu32,+apic \
+    #-cpu core2duo-v1,+apic \
+
 pid=$!
 echo "pid is ${pid}"