添加一些异常处理的注释

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

View File

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