浏览代码

Merge pull request #2063 from jesven/fix_smp

fix_smp
Bernard Xiong 6 年之前
父节点
当前提交
c059503007
共有 3 个文件被更改,包括 10 次插入2 次删除
  1. 1 1
      include/rtdef.h
  2. 1 1
      src/cpu.c
  3. 8 0
      src/scheduler.c

+ 1 - 1
include/rtdef.h

@@ -500,7 +500,7 @@ typedef siginfo_t rt_siginfo_t;
 #define RT_THREAD_CTRL_CLOSE            0x01                /**< Close thread. */
 #define RT_THREAD_CTRL_CHANGE_PRIORITY  0x02                /**< Change thread priority. */
 #define RT_THREAD_CTRL_INFO             0x03                /**< Get thread information. */
-#define RT_THREAD_CTRL_BIND_CPU         0x03                /**< Set thread bind cpu. */
+#define RT_THREAD_CTRL_BIND_CPU         0x04                /**< Set thread bind cpu. */
 
 #ifdef RT_USING_SMP
 

+ 1 - 1
src/cpu.c

@@ -86,6 +86,6 @@ void rt_cpus_lock_status_restore(struct rt_thread *thread)
         rt_hw_spin_unlock(&_cpus_lock);
     }
 }
-RTM_EXPORT(rt_post_switch);
+RTM_EXPORT(rt_cpus_lock_status_restore);
 
 #endif

+ 8 - 0
src/scheduler.c

@@ -99,11 +99,19 @@ static void _rt_scheduler_stack_check(struct rt_thread *thread)
         level = rt_hw_interrupt_disable();
         while (level);
     }
+#if defined(ARCH_CPU_STACK_GROWS_UPWARD)
+    else if ((rt_ubase_t)thread->sp > ((rt_ubase_t)thread->stack_addr + thread->stack_size))
+    {
+        rt_kprintf("warning: %s stack is close to the top of stack address.\n",
+                   thread->name);
+    }
+#else
     else if ((rt_ubase_t)thread->sp <= ((rt_ubase_t)thread->stack_addr + 32))
     {
         rt_kprintf("warning: %s stack is close to end of stack address.\n",
                    thread->name);
     }
+#endif
 }
 #endif