shellgo 发表于 2012-5-1 20:07:16

今天遇到在rt_thread_create,不成功,一直停在RT_DEBUG_NOT_IN_INT...

今天遇到在rt_thread_create,不成功,

程序很简单,
thread_cal = rt_thread_create("cal",Thread_Cal_Entry,calCallback,1024, 25, 5);
一直停在RT_DEBUG_NOT_IN_INTERRUPT,

shellgo 发表于 2012-5-1 20:27:46

在定时器中创建线程不成功,在线程中创建这个线程没有问题,

linshao 发表于 2012-5-1 20:47:05

很明显,不能在中断上下文中创建线程。

shellgo 发表于 2012-5-1 21:27:45

rt_timer_init(&buzzer_timer,
                  "st_buz",                  // 定时器名字是 timer1
                       Buzzer_timeout,         // 超时时回调的处理函数
                       RT_NULL,                  // 超时函数的入口参数
                       RT_TICK_PER_SECOND/10,    // 定时长度,以OS Tick为单位,即10个OS Tick.100ms
                   RT_TIMER_FLAG_PERIODIC);// 周期性定时器
    rt_timer_start(&buzzer_timer);



static struct rt_timer buzzer_timer;
static u8 timer_count = 0;

static rt_thread_t thread_calxxx = RT_NULL;

static void Cal_Entry(void* p)
{
}

static void Buzzer_timeout(void* parameter)
{
    thread_calxxx = rt_thread_create("xxcal",Cal_Entry,NULL,1024, 25, 5); //执行失败
    rt_thread_startup(thread_calxxx);
   
}

timer是中断上下文中吗?

linshao 发表于 2012-5-2 08:56:28

你在停下来时,地方用仿真器看下当前的栈 callback 信息就知道是否是在中断上下文中了。

shellgo 发表于 2012-5-2 11:05:53

已经解决,在定时器中不能够创建线程,【没有理解,软件定时器也属于中断吗?】
重新修改程序了,

airbox 发表于 2012-10-20 17:32:26

shellgo 发表于 2012-5-2 11:05 static/image/common/back.gif
已经解决,在定时器中不能够创建线程,【没有理解,软件定时器也属于中断吗?】
重新修改程序了, ...

没有设定RT_TIMER_FLAG_SOFT_TIMER,实际是在tick中断中调用的
页: [1]
查看完整版本: 今天遇到在rt_thread_create,不成功,一直停在RT_DEBUG_NOT_IN_INT...