|
楼主 |
发表于 2011-5-16 09:23:01
|
显示全部楼层
再看看源码,确实是一个BUG.
----------------------------------------------------------
static void _rt_scheduler_stack_check(struct rt_thread* thread)
{
RT_ASSERT(thread != RT_NULL);
if ( (rt_uint32_t)thread->sp <= (rt_uint32_t)thread->stack_addr ||
(rt_uint32_t)thread->sp >
(rt_uint32_t)thread->stack_addr + (rt_uint32_t)thread->stack_size )
{
rt_uint32_t level;
rt_kprintf("thread:%s stack overflow\n", thread->name);
level = rt_hw_interrupt_disable();
while (level);
}
else if ((rt_uint32_t)thread->sp <= ((rt_uint32_t)thread->stack_addr + 32))
{
rt_kprintf("warning: %s stack is close to end of stack address.\n",
thread->name);
}
}
-------------------------------------------------------------------------------------------------- |
|