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:
1 parent
7336ddff48
commit
10857e58ed
2 files changed
+6
-1
No files matched your search
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in new issue
Block a user