如题,若用rt_thread_suspend函数强行挂起空闲线程一段时间会对整个系统造成什么影响?
我遇到的问题是在硬件定时器的超时回调函数(中断上下文环境)中使用rt_thread_delay函数挂起当前线程,其实就是空闲线程,然后一个软件定时器中的超时回调函数(线程上下文环境)就无法使用rt_thread_delay函数挂起当前线程(即
timer线程)。
代码如下:
static rt_timer_t timer1;
static struct rt_timer timer2;
static void timer1_callback(void *parameter){
rt_kprintf("[%u]timer1
", rt_tick_get());
rt_thread_delay(10000);
}
static void timer2_callback(void *parameter){
rt_kprintf("[%u]timer2
", rt_tick_get());
rt_thread_mdelay(10000);
}
static int tick_sample(void){
timer1 = rt_timer_create("tm1",
timer1_callback,
RT_NULL,
3000,
RT_TIMER_FLAG_PERIODIC | RT_TIMER_FLAG_HARD_TIMER);
if(!timer){
return -RT_ENOMEM;
}
rt_timer_init(&timer2,
"tm2",
timer2_callback,
NULL,
1000,
RT_TIMER_FLAG_PERIODIC | RT_TIMER_FLAG_SOFT_TIMER);
rt_timer_start(timer1);
rt_timer_start(&timer2);
return RT_EOK;
}
INIT_APP_EXPORT(tick_sample);
打印结果:
可以看到timer2软件定时器超时回调函数后面一直按设定的超时间隔打印,并没有挂起10s。
PS:此次仅为学习过程中的测试,我知道最好不要在超时回调函数中使用rt_thread_delay函数。