学的太多反而是一种烦恼,大多的RTOS其任务调度及管理其实都差不了太多,都是换汤不换药,但是细节上确实有不少的差异性。
例如Free和RTT的任务调度都支持时间片调度模式,先来科普下神马叫时间片调度模式,很简单,每个任务都有一个执行时间的最大限度,也就是当一个正在运行的任务,在占用CPU资源运行时,如果其并没有遇到高优先级的任务抢占,也没有自身进行阻塞或者挂起操作,那么他也不会一直运行下去,而是有个时间的限制,当时间到了以后,他会自动切换到其他同优先级的就绪的任务开始执行,
假如不切那么这个调度器的模式就是合作式调度,他会一直执行这个运行态的任务,同优先级其他就绪的任务无法得到执行。
时间片调度和合作式调度只能二选一
合作式基本已被遗忘在布满灰尘的角落,官方针对其也不在做任何升级。
FreeRTOS系统的默认状态下就是开启了时间片调度模式,也可以通过FreeRTOSConfig.h手动的开启时间片调度模式。
那么问题来了,开启了时间片调度模式,那么运行任务运行的最大的时间片是多少呢?看某教程上是这么讲的。
但是翻遍了整个config文件,都没有找到相关的参数,于是度娘请教,得到的答复是这样的,其实FreeRTOS并不支持设定时间片的设定,他的系统调度的tick就是他的最大时间片,也就是我们设定的1000HZ的系统滴答。
在这里,好像记得RTT是可以创建任务的时间片长度的,那么每个任务的运行时间片长度是可以做到不同,
对比一下FreeRTOS的任务创建函数,在这里和config中都没有tick的指定,那么他应该是没有这个参数的设置。
那么FreeRTOS的时间片应该是固定的,被封印在了tick上。
接下来聊聊,固定的时间片和可设定的时间片到底有什么差异呢?
时间片长度是让一个任务独霸CPU执行的时间,在没有高优先任务抢占的情况,同优先级的任务要等到这个时间片执行完,然后切换其它同优先级就绪任务。
时间片长度可调影响的只是任务切换的次数,站在应用的角度上来讲,切换的速度对于应用并没有任何的影响。
同优先级皆为就绪的任务原本的目的就是要让他们执行的时候看起来像是并行的,在不考虑任务切换频率带来的损耗时间的情况下,快与慢其实并不会对应用产生任何影响。
多一个参数,你还要思考这个任务的tick设置到多少合适,当然聊胜于无。