Przeglądaj źródła

[kernel]fix scheduling exception caused by interrupt preemption in rt_schedule

wdfk-prog 3 miesięcy temu
rodzic
commit
2d375b236c
1 zmienionych plików z 5 dodań i 2 usunięć
  1. 5 2
      src/scheduler_up.c

+ 5 - 2
src/scheduler_up.c

@@ -32,6 +32,7 @@
  * 2023-10-17     ChuShicheng  Modify the timing of clearing RT_THREAD_STAT_YIELD flag bits
  * 2025-08-04     Pillar       Add rt_scheduler_critical_switch_flag
  * 2025-08-20     RyanCW       rt_scheduler_lock_nest use atomic operations
+ * 2025-09-20     wdfk_prog    fix scheduling exception caused by interrupt preemption in rt_schedule
  */
 
 #define __RT_IPC_SOURCE__
@@ -283,12 +284,14 @@ void rt_schedule(void)
     rt_base_t level;
     struct rt_thread *to_thread;
     struct rt_thread *from_thread;
-    /* using local variable to avoid unecessary function call */
-    struct rt_thread *curr_thread = rt_thread_self();
+    struct rt_thread *curr_thread;
 
     /* disable interrupt */
     level = rt_hw_interrupt_disable();
 
+    /* using local variable to avoid unnecessary function call */
+    curr_thread = rt_thread_self();
+
     /* check the scheduler is enabled or not */
     if (rt_scheduler_lock_nest == 0)
     {