完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
如题,若用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函数。 |
|
相关推荐
3个回答
|
|
|
|
|
|
中断并不属于线程上下文哦,在中断里是不能挂起当前线程的
|
|
|
|
你是在定时回调函数中增加延时,挂起当前中断吗?
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
529 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
2000 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1174 浏览 0 评论
1674 浏览 0 评论
1439 浏览 0 评论
74747 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 22:47 , Processed in 0.444853 second(s), Total 41, Slave 35 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号