From 10857e58edf86eb89fc7df65a22b08ce8f2f4afa Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Wed, 26 Aug 2026 18:11:47 +0800 Subject: [PATCH] =?UTF-8?q?debug(intr):=20isr32=5Fhandler=20=E5=85=A5?= =?UTF-8?q?=E5=8F=A3=E6=89=93=E5=8D=B0=20T=20+=20isr=5Fdefault=20=E6=89=93?= =?UTF-8?q?=E5=8D=B0=20D=EF=BC=8C=E5=AE=9A=E4=BD=8D=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E4=B8=AD=E6=96=AD=E4=B8=A2=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 前一轮 timer_handler [T] 未打印 → timer_handler 未被调用。本轮加两处 确定性诊断:isr32_handler 入口 'T'(IRQ0 是否到达 isr32)、isr_default 'D'(是否有中断向量到默认处理)。三种结果: - 无输出 → 定时中断根本没触发(PIC/PIT/APIC 路由问题) - D 输出 → 中断触发但向量到默认处理(IDT gate 未设置) - T 输出 → IRQ0 到达 isr32(问题在 handler 内) 用后移除。 --- VKernel/Kernel/intr/idt.vp | 4 +++- VKernel/Kernel/intr/isr.s | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/VKernel/Kernel/intr/idt.vp b/VKernel/Kernel/intr/idt.vp index 416bca4..31b4ea2 100644 --- a/VKernel/Kernel/intr/idt.vp +++ b/VKernel/Kernel/intr/idt.vp @@ -17,7 +17,7 @@ class idt_entry: base_middle: t.CUInt16T base_high: t.CUInt32T reserved1: t.CUInt32T -idt: t.CArray[idt_entry, 256] = [] +idt: t.CArray[idt_entry, 256] | t.CExport = [] irq_handler_t: t.CTypedef = t.Callable[[], t.CInt] @@ -201,6 +201,8 @@ def isr29_handler() -> t.CExport | t.CVoid: isrCommonhandler(29) def isr30_handler() -> t.CExport | t.CVoid: isrCommonhandler(30) def isr31_handler() -> t.CExport | t.CVoid: isrCommonhandler(31) def isr32_handler() -> t.CExport | t.CVoid: + # [DBG] 中断入口诊断:若打印 'T' 说明 IRQ0 到达 isr32(用后移除) + serial.puts("T") timer.timer_handler() def isr33_handler() -> t.CExport | t.CVoid: diff --git a/VKernel/Kernel/intr/isr.s b/VKernel/Kernel/intr/isr.s index c03757f..152a9f5 100644 --- a/VKernel/Kernel/intr/isr.s +++ b/VKernel/Kernel/intr/isr.s @@ -16,6 +16,9 @@ isr_default: push rax push rdx + mov dx, 0x3F8 + mov al, 0x44 # [DBG] 'D' = 中断向量到默认处理(用后移除) + out dx, al mov al, 0x20 out 0xA0, al out 0x20, al