Quellcode durchsuchen

增加了uart输出的条件编译

fslongjin vor 2 Jahren
Ursprung
Commit
0e8bf69d65
4 geänderte Dateien mit 21 neuen und 6 gelöschten Zeilen
  1. 2 1
      .vscode/c_cpp_properties.json
  2. 7 1
      kernel/Makefile
  3. 10 4
      kernel/common/printk.c
  4. 2 0
      kernel/main.c

+ 2 - 1
.vscode/c_cpp_properties.json

@@ -6,7 +6,8 @@
                 "${workspaceFolder}/**"
             ],
             "defines": [
-                "x86_64"
+                "x86_64",
+                "DEBUG"
             ],
             "compilerPath": "/usr/bin/gcc",
             "cStandard": "gnu17",

+ 7 - 1
kernel/Makefile

@@ -7,7 +7,13 @@ DIR_LIB=lib
 lib_patterns := *.a
 LIB_FILES := $(foreach DIR,$(DIR_LIB),$(addprefix $(DIR)/,$(lib_patterns)))
 
-CFLAGS := -mcmodel=large -fno-builtin -m64 -g -O0 -I . -fno-stack-protector
+DEBUG=1
+CFLAGS := -mcmodel=large -fno-builtin -m64  -O0 -I . -fno-stack-protector
+
+ifeq ($(DEBUG), 1)
+CFLAGS += -g
+endif
+
 ARCH=x86_64
 # 控制操作系统使用的中断控制器 _INTR_8259A_ _INTR_APIC_
 PIC := _INTR_APIC_

+ 10 - 4
kernel/common/printk.c

@@ -29,7 +29,7 @@ int printk_init(const int char_size_x, const int char_size_y)
 {
     struct multiboot_tag_framebuffer_info_t info;
     int reserved;
-    
+
     multiboot2_iter(multiboot2_get_Framebuffer_info, &info, &reserved);
 
     pos.width = info.framebuffer_width;
@@ -112,16 +112,20 @@ void auto_newline()
      * @brief 超过每行最大字符数,自动换行
      *
      */
-     
+
     if (pos.x > pos.max_x)
     {
-        uart_send(COM1, '\n'); 
+#ifdef DEBUG
+        uart_send(COM1, '\n');
+#endif
         pos.x = 0;
         ++pos.y;
     }
     if (pos.y > pos.max_y)
     {
+#ifdef DEBUG
         uart_send(COM1, '\n');
+#endif
         pos.y = pos.max_y;
         int lines_to_scroll = 1;
         scroll(true, lines_to_scroll * pos.char_size_y, false);
@@ -630,8 +634,10 @@ static void putchar(uint *fb, int Xsize, int x, int y, unsigned int FRcolor, uns
      * @param BKcolor 背景颜色
      * @param font 字符的bitmap
      */
-    // 输出到串口
+
+#ifdef DEBUG
     uart_send(COM1, font);
+#endif
 
     unsigned char *font_ptr = font_ascii[font];
     unsigned int *addr;

+ 2 - 0
kernel/main.c

@@ -84,7 +84,9 @@ void system_initialize()
 
     // 初始化printk
     printk_init(8, 16);
+#ifdef DEBUG
     uart_init(COM1, 115200);
+#endif
     kinfo("Kernel Starting...");
     // 重新加载gdt和idt