添加一些异常处理的注释

This commit is contained in:
2025-03-27 23:29:13 +08:00
parent 437b2ece4c
commit 3d38858db3
2 changed files with 27 additions and 16 deletions

View File

@@ -107,14 +107,14 @@
HalTaskContextSwitch: HalTaskContextSwitch:
PUSH_ALL_REG PUSH_ALL_REG
// a0 mstatus
// clear mpie // clear mpie
li a2, RISCV_MSTATUS_MPIE li a2, RISCV_MSTATUS_MPIE // 0x00000080
not a2, a2 not a2, a2 // 0xffffff7f
and a0, a0, a2 and a0, a0, a2
// get mie // get mie
andi a1, a0, RISCV_MSTATUS_MIE andi a1, a0, RISCV_MSTATUS_MIE // 0x00000008
// must be in machine mode // must be in machine mode
ori a1, a1, 0x180 ori a1, a1, 0x180
@@ -125,24 +125,25 @@ HalTaskContextSwitch:
li a2, RISCV_MSTATUS_MIE li a2, RISCV_MSTATUS_MIE
not a2, a2 not a2, a2
and a0, a0, a2 and a0, a0, a2
// a0 mie mstatus
SREG a0, 16 * REGBYTES(sp) SREG a0, 16 * REGBYTES(sp)
// //
SREG ra, 17 * REGBYTES(sp) SREG ra, 17 * REGBYTES(sp)
la a1, g_losTask la a1, g_losTask
lw a0, 0(a1) lw a0, 0(a1) // g_losTask->runTask
sw sp, TASK_CB_KERNEL_SP(a0) // sp g_losTask->runTask->stackPointer
sw sp, TASK_CB_KERNEL_SP(a0) // TASK_CB_KERNEL_SP==0
lw a0, 4(a1) lw a0, 4(a1) // g_losTask->newTask
sw a0, 0(a1) sw a0, 0(a1) // g_losTask->runTask=g_losTask->newTask
HalStartToRun: HalStartToRun:
la a1, g_losTask la a1, g_losTask
lw a0, 4(a1) lw a0, 4(a1) // g_losTask->newTask
// retireve stack pointer // retireve stack pointer
lw sp, TASK_CB_KERNEL_SP(a0) lw sp, TASK_CB_KERNEL_SP(a0) // sp=g_losTask->newTask->stackPointer
// enable global interrupts // enable global interrupts
lw t0, 16 * REGBYTES(sp) lw t0, 16 * REGBYTES(sp)
@@ -150,7 +151,7 @@ HalStartToRun:
// retrieve the address at which exception happened // retrieve the address at which exception happened
lw t0, 17 * REGBYTES(sp) lw t0, 17 * REGBYTES(sp)
csrw mepc, t0 csrw mepc, t0 // mepcmret
// retrieve the registers // retrieve the registers
POP_ALL_REG POP_ALL_REG

View File

@@ -145,14 +145,15 @@ HalTrapEntry:
csrw mscratch, sp csrw mscratch, sp
la t0, g_excInfo la t0, g_excInfo
lh t1, 0(t0) lh t1, 0(t0)
// 0
bnez t1, 1f bnez t1, 1f
la sp, __except_stack_top la sp, __except_stack_top
1: 1:
addi t1, t1, 0x1 addi t1, t1, 0x1
sh t1, 0(t0) sh t1, 0(t0) // g_excInfo->nestCnt++
call HalExcEntry call HalExcEntry
la t0, g_excInfo la t0, g_excInfo
sh zero, 0(t0) sh zero, 0(t0) // g_excInfo->nestCnt=0
csrr sp, mscratch csrr sp, mscratch
addi sp, sp, 4 * REGBYTES addi sp, sp, 4 * REGBYTES
lw t0, 16 * REGBYTES(sp) lw t0, 16 * REGBYTES(sp)
@@ -170,19 +171,28 @@ HalTrapEntry:
.global HalTrapVector .global HalTrapVector
.equ TRAP_INTERRUPT_MODE_MASK, 0x80000000 .equ TRAP_INTERRUPT_MODE_MASK, 0x80000000
.align 4 .align 4
// cpu
// mepc
// mretmepcpc
HalTrapVector: HalTrapVector:
PUSH_CALLER_REG PUSH_CALLER_REG
// mcause a0
csrr a0, mcause csrr a0, mcause
li a1, TRAP_INTERRUPT_MODE_MASK li a1, TRAP_INTERRUPT_MODE_MASK
li a2, MCAUSE_INT_ID_MASK li a2, MCAUSE_INT_ID_MASK // 0x7FFFFFFF
and a1, a0, a1 and a1, a0, a1
and a0, a2, a0 and a0, a2, a0
// 0
beqz a1, HalTrapEntry beqz a1, HalTrapEntry
// 退 // 退
// 线sp
csrw mscratch, sp csrw mscratch, sp
la sp, __start_and_irq_stack_top la sp, __start_and_irq_stack_top
// a0 0
jal HalHwiInterruptDone jal HalHwiInterruptDone
// 线sp
csrr sp, mscratch csrr sp, mscratch
// 线线
call HalIrqEndCheckNeedSched call HalIrqEndCheckNeedSched
// HalIrqEndCheckNeedSched // HalIrqEndCheckNeedSched
POP_CALLER_REG POP_CALLER_REG