RT-Threadwilliam hill官网
直播中

摩托罗拉

9年用户 938经验值
私信 关注

RTTnano的用户main函数中的优先级是多少?

RTTnano 的用户main函数中的优先级是多少?为什么会出现创建新的task之后,main函数会抢占掉低优先级的task,例如RT_THREAD_PRIORITY_MAX设置为8 ,低于3的优先级任务都会被main抢占,从而导致无法执行,这样该如何优雅一点解决,目前我的解决办法就是增大任务优先级。

回帖(2)

张早

2024-2-26 16:55:22
建议读一遍启动过程
Reset handler (CMSIS/…/arm/startup_stm32fxxx.s)
{SystemInit / __main}
rtthread_startup (components.c)
rt_application_init
main_thread_entry
define RT_MAIN_THREAD_PRIORITY (RT_THREAD_PRIORITY_MAX / 3)
优先级判定逻辑在 rt_system_scheduler_start()
举报

余温重顾

2024-2-27 09:35:30
RTTnano的用户main函数没有明确的优先级,它是最高优先级的空闲任务。当创建了更低优先级的任务时,main函数会被抢占掉,这是因为RTTnano调度器采用优先级抢占式调度算法。这种算法会根据任务的优先级来决定任务的调度顺序,优先级越高的任务被调度的概率越大。而优先级低于main函数的任务会被main函数抢占,从而导致无法执行。

为了解决这个问题,可以采取以下方法:
1. 调整任务的优先级:将低于main函数优先级的其他任务的优先级调高,以确保它们能够正常执行。
2. 创建其他高优先级的任务:如果需要保持低优先级任务的执行,可以创建其他高优先级的任务,使它们和main函数竞争执行资源,以确保所有任务都能被调度执行。
3. 使用协程或定时器:考虑使用协程或定时器来实现一些功能,而不是使用低优先级的任务。协程可以在main函数中运行,无需创建新的任务,从而避免了任务被抢占的问题。
4. 调整RTTnano的配置参数:RTTnano提供了一些配置参数来调整调度器的行为,例如可以调整时间片的长度或者改变调度算法,以满足具体需求。

综上所述,根据具体情况选择适合的解决方案,并根据实际需求调整任务的优先级或RTTnano的配置参数,以确保任务能够按照预期执行。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分