From 7a78a24a2a76392674bb9e723fada860d80f43bc Mon Sep 17 00:00:00 2001 From: imi415 Date: Mon, 2 May 2022 22:28:13 +0800 Subject: [PATCH] Fixed stack unbalance. --- src/ch32v30x_it.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/ch32v30x_it.c b/src/ch32v30x_it.c index 389c795..34734b1 100644 --- a/src/ch32v30x_it.c +++ b/src/ch32v30x_it.c @@ -69,8 +69,12 @@ __IRQ_WEAK void NMI_Handler(void) { __IRQ_NAKED void SysTick_Handler(void) { /* Use naked function to generate a short call, without causing stack unbalance. */ asm volatile( - "li t0, 0xE000F004\n" /* Clear SysTick->SR */ - "sw zero, 0(t0)\n" + "addi sp, sp, -4\n" /* Push */ + "sw t0, 4(sp)\n" /* Save t0 on stack */ + "li t0, 0xE000F004\n" /* SysTick->SR */ + "sw zero, 0(t0)\n" /* Write 0 to clear */ + "lw t0, 4(sp)\n" /* Restore t0 from stack */ + "addi sp, sp, 4\n" /* Pop */ "j freertos_risc_v_mtimer_interrupt_handler" ); }