完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
请问在调用rt_enter_critical()进入临界区后,通过rt_timer_create创建的定时器是否还在运行呢?在文档里看到默认创建的是硬件定时器,此时进入临界区后定时器超时函数应该还能执行吧,但是如果通过RT_TIMER_FLAG_SOFT_TIMER设置为软件定时器的话,文档中说会创建一个timer线程,此时rt_enter_critical()之后停止线程调度,timer线程应该不会执行了吧,但是实测的话定时器还是可以正常执行超时函数 |
|
相关推荐
3个回答
|
|
|
|
|
|
但是实际测试中,就算设置为软件定时器,还是一样会执行超时函数,是我哪里设置错了吗,代码如下 #include "sys.h" #include "rtthread.h" #include rt_timer_t One_Sec_Timer; rt_thread_t Test_thread; void mdelay_ms(uint32_t ms) { uint32_t time = rt_tick_get(); while(rt_tick_get() - time < ms){} } static void One_Sec_TimeOut(void *parameter) { rt_kprintf("1srn"); } static void Test_thread_entry(void* params) { while(1) { rt_enter_critical(); rt_kprintf("ENTERrn"); mdelay_ms(5000); rt_exit_critical(); rt_kprintf("EXITrn"); rt_thread_mdelay(5000); } } int thread(void) { Test_thread = rt_thread_create("Test_thread", Test_thread_entry, RT_NULL, 128, 15, 15); if(Test_thread != RT_NULL) rt_thread_startup(Test_thread); return 0; } int main(void) { thread(); One_Sec_Timer = rt_timer_create("One_Sec_Timer", One_Sec_TimeOut, RT_NULL, 1000, RT_TIMER_FLAG_SOFT_TIMER | RT_TIMER_FLAG_PERIODIC); if(One_Sec_Timer != RT_NULL) { rt_timer_start(One_Sec_Timer); rt_kprintf("One_Sec_Timer create successrn"); } } 运行结果如图 |
|
|
|
已解决,忘记在rtconfig中开启软件定时器相关宏定义
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
1379 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1080 浏览 0 评论
1502 浏览 0 评论
1385 浏览 0 评论
1030 浏览 0 评论
74613 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 07:41 , Processed in 0.747089 second(s), Total 101, Slave 81 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号