irq context switch do not use flag variable anymore
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
.equ REGBYTES, 4
|
||||
#include "port.h"
|
||||
|
||||
.align 2
|
||||
.global rv32_trap_entry
|
||||
@@ -53,25 +53,23 @@ rv32_trap_entry:
|
||||
j irq_restore
|
||||
|
||||
handle_irq:
|
||||
slli a0, a0, 16
|
||||
srli a0, a0, 16
|
||||
slli a0, a0, 1
|
||||
srli a0, a0, 1
|
||||
call cpu_irq_entry
|
||||
|
||||
la t0, k_task_irq_switch_flag
|
||||
lw t1, (t0)
|
||||
beqz t1, irq_restore
|
||||
sw zero,(t0)
|
||||
la t0, k_curr_task
|
||||
la t1, k_next_task
|
||||
|
||||
beq t0, t1, irq_restore
|
||||
|
||||
// save sp to k_curr_task.sp
|
||||
la t0, k_curr_task // t0 = &k_curr_task
|
||||
lw t1, (t0)
|
||||
sw sp, (t1)
|
||||
lw t2, (t0)
|
||||
sw sp, (t2)
|
||||
|
||||
// switch task
|
||||
// k_curr_task = k_next_task
|
||||
la t1, k_next_task // t1 = &k_next_task
|
||||
lw t1, (t1) // t1 = k_next_task
|
||||
sw t1, (t0)
|
||||
sw t1, (t0) // k_curr_task = k_next_task
|
||||
|
||||
// load new task sp
|
||||
lw sp, (t1)
|
||||
|
Reference in New Issue
Block a user