debug(intr): isr32_handler 入口打印 T + isr_default 打印 D,定位定时中断丢失

前一轮 timer_handler [T] 未打印 → timer_handler 未被调用。本轮加两处
确定性诊断:isr32_handler 入口 'T'(IRQ0 是否到达 isr32)、isr_default
'D'(是否有中断向量到默认处理)。三种结果:
- 无输出 → 定时中断根本没触发(PIC/PIT/APIC 路由问题)
- D 输出 → 中断触发但向量到默认处理(IDT gate 未设置)
- T 输出 → IRQ0 到达 isr32(问题在 handler 内)
用后移除。
This commit is contained in:
TermiNexus committed 2026-08-26 18:11:47 +08:00
1 parent 7336ddff48
commit 10857e58ed
2 files changed
+6 -1

No files matched your search

+3 -1
View File
@@ -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:
+3
View File
@@ -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