今天遇到在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,
在定时器中创建线程不成功,在线程中创建这个线程没有问题, 很明显,不能在中断上下文中创建线程。 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是中断上下文中吗? 你在停下来时,地方用仿真器看下当前的栈 callback 信息就知道是否是在中断上下文中了。 已经解决,在定时器中不能够创建线程,【没有理解,软件定时器也属于中断吗?】
重新修改程序了, shellgo 发表于 2012-5-2 11:05 static/image/common/back.gif
已经解决,在定时器中不能够创建线程,【没有理解,软件定时器也属于中断吗?】
重新修改程序了, ...
没有设定RT_TIMER_FLAG_SOFT_TIMER,实际是在tick中断中调用的
页:
[1]