Przeglądaj źródła

Merge pull request #2074 from zhaohengbo/master

fix some bug when stack grows upward
Bernard Xiong 6 lat temu
rodzic
commit
9e990be572
2 zmienionych plików z 5 dodań i 1 usunięć
  1. 1 1
      components/finsh/cmd.c
  2. 4 0
      src/scheduler.c

+ 1 - 1
components/finsh/cmd.c

@@ -116,7 +116,7 @@ static long _list_thread(struct rt_list_node *list)
         else if (stat == RT_THREAD_CLOSE)   rt_kprintf(" close  ");
 
 #if defined(ARCH_CPU_STACK_GROWS_UPWARD)
-        ptr = (rt_uint8_t *)thread->stack_addr + thread->stack_size;
+        ptr = (rt_uint8_t *)thread->stack_addr + thread->stack_size - 1;
         while (*ptr == '#')ptr --;
 
         rt_kprintf(" 0x%08x 0x%08x    %02d%%   0x%08x %03d\n",

+ 4 - 0
src/scheduler.c

@@ -82,7 +82,11 @@ static void _rt_scheduler_stack_check(struct rt_thread *thread)
 {
     RT_ASSERT(thread != RT_NULL);
 
+#if defined(ARCH_CPU_STACK_GROWS_UPWARD)
+	if (*((rt_uint8_t *)((rt_ubase_t)thread->stack_addr + thread->stack_size - 1)) != '#' ||
+#else
     if (*((rt_uint8_t *)thread->stack_addr) != '#' ||
+#endif
         (rt_ubase_t)thread->sp <= (rt_ubase_t)thread->stack_addr ||
         (rt_ubase_t)thread->sp >
         (rt_ubase_t)thread->stack_addr + (rt_ubase_t)thread->stack_size)