diff --git a/bsp/ESP32_C3/rtt.patch b/bsp/ESP32_C3/rtt.patch index 37c41b76b0f148a480905d8373b329c0e24ac572..7f583abd2b38de6c35f5997d81da8c47fe19450d 100644 --- a/bsp/ESP32_C3/rtt.patch +++ b/bsp/ESP32_C3/rtt.patch @@ -113,6 +113,7 @@ index d6670bf759..1d51ffeea0 100644 + __stack_cpu0 = .; + __stack_end__ = .; + } > dram0_0_seg ++ PROVIDE( __rt_rvstack = __stack_end__); + + .heap : + { diff --git a/libcpu/risc-v/common/trap_common.c b/libcpu/risc-v/common/trap_common.c index 2e978f2aedf8f4ddab7fd6b6383a6e4ee5bead88..e7d0043a111f01b602540a83a9c8fc840cade9eb 100644 --- a/libcpu/risc-v/common/trap_common.c +++ b/libcpu/risc-v/common/trap_common.c @@ -41,21 +41,26 @@ rt_weak void rt_hw_interrupt_init(void) * @param handler Break-in function requiring binding * @param param NULL * @param name NULL - * @return NULL + * @return old handler */ rt_weak rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler, void *param, const char *name) { + rt_isr_handler_t old_handler = RT_NULL; void *user_param = param; char *user_name = name; + if(vector < ISR_NUMBER) { + old_handler = rv32irq_table[vector].handler; if (handler != RT_NULL) { rv32irq_table[vector].handler = (rt_isr_handler_t)handler; rv32irq_table[vector].param = param; } } + + return old_handler; } /**