程序小白
认证:优质创作者
所在专题目录 查看专题
关于软件的作用域和生命周期的一些理解
浅析RTOS中的钩子函数(HOOK)
RTOS的时间片调度不同处——FreeRTOS与RTT
FreeRTOS中任务间的同步——事件组与全局变量
FreeRTOS的优先级翻转与继承
作者动态 更多
小小调度器——开局default,优雅总藏于细节之中
04-02 09:23
小小调度器——调度器核心的纯C实现
04-01 14:09
小小调度器——原来C代码还能这么写,原作者没少挨打吧!
03-27 15:42
解析由系统库引发的hardfault血案(RT-Thread+ESP32)
2023-07-17 16:04
TINA瞬时现象仿真分析——运放缓冲器振铃
2023-02-28 11:38

RTOS的时间片调度不同处——FreeRTOS与RTT


      学的太多反而是一种烦恼,大多的RTOS其任务调度及管理其实都差不了太多,都是换汤不换药,但是细节上确实有不少的差异性。


      例如Free和RTT的任务调度都支持时间片调度模式,先来科普下神马叫时间片调度模式,很简单,每个任务都有一个执行时间的最大限度,也就是当一个正在运行的任务,在占用CPU资源运行时,如果其并没有遇到高优先级的任务抢占,也没有自身进行阻塞或者挂起操作,那么他也不会一直运行下去,而是有个时间的限制,当时间到了以后,他会自动切换到其他同优先级的就绪的任务开始执行,

      假如不切那么这个调度器的模式就是合作式调度,他会一直执行这个运行态的任务,同优先级其他就绪的任务无法得到执行。


时间片调度和合作式调度只能二选一

合作式基本已被遗忘在布满灰尘的角落,官方针对其也不在做任何升级。


      FreeRTOS系统的默认状态下就是开启了时间片调度模式,也可以通过FreeRTOSConfig.h手动的开启时间片调度模式。

      那么问题来了,开启了时间片调度模式,那么运行任务运行的最大的时间片是多少呢?看某教程上是这么讲的。

      但是翻遍了整个config文件,都没有找到相关的参数,于是度娘请教,得到的答复是这样的,其实FreeRTOS并不支持设定时间片的设定,他的系统调度的tick就是他的最大时间片,也就是我们设定的1000HZ的系统滴答。

      在这里,好像记得RTT是可以创建任务的时间片长度的,那么每个任务的运行时间片长度是可以做到不同,

      对比一下FreeRTOS的任务创建函数,在这里和config中都没有tick的指定,那么他应该是没有这个参数的设置。

那么FreeRTOS的时间片应该是固定的,被封印在了tick上。


接下来聊聊,固定的时间片和可设定的时间片到底有什么差异呢?


      时间片长度是让一个任务独霸CPU执行的时间,在没有高优先任务抢占的情况,同优先级的任务要等到这个时间片执行完,然后切换其它同优先级就绪任务。

      时间片长度可调影响的只是任务切换的次数,站在应用的角度上来讲,切换的速度对于应用并没有任何的影响。

      同优先级皆为就绪的任务原本的目的就是要让他们执行的时候看起来像是并行的,在不考虑任务切换频率带来的损耗时间的情况下,快与慢其实并不会对应用产生任何影响。

      多一个参数,你还要思考这个任务的tick设置到多少合适,当然聊胜于无。

声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
觉得内容不错的朋友,别忘了一键三连哦!
赞 4
收藏 2
关注 117
成为作者 赚取收益
全部留言
0/200
成为第一个和作者交流的人吧