嵌入式学习小组
直播中

谭丽

7年用户 133经验值
私信 关注

FreeRTOS中时间片调度实验碰到的问题如何解决

在做原子时间片调度的实验的时候,自己遇到了一个问题,就是我把时间片时间改为了1ms(原来是50ms),task1、task2和task3中把延时函数改成了10ms(其实我想做的实验就是时间片小于任务执行的时间会发生什么情况),然后最后得到下图的实验现象,确实,由于时间片调度的原因,三个任务里面的日志几乎是同一时刻打印的,而不是说要等到任务1完全延时好才能执行其他任务,但是有个问题是任务2执行的间隔是30ms,我本来认为应该是10ms才对(因为有时间片(1ms)的任务切换),为什么任务2要等到task1和task2执行完后才能再执行呢这是我配置的时间片时间为1ms下图是我的三个task任务函数:
实验结果:

回帖(3)

康根

2020-7-14 13:34:22
嗯嗯,我突然还想到另一个问题,就是如果我把上面三个任务函数中的延时函数换成10ms调度的延时,那么他中间的的过程又是怎么样的,我自己实验看到的现象确实是三个任务还是同时打出日志,但是同一个任务之间的间隔变成了10ms而不是30ms,这个现象说明的三个任务确实真正的在同时运行,但是里面的运行细节跟上面区别在哪里?
任务函数:

10ms调度延时下的实验结果:
举报

贺服窍

2020-7-14 13:52:44
也对呀,调度延时那个函数微妙就执行完了,执行的结果就是把一个任务挂起一定时间,滴答定时器调度器判断这个时间到了没,到了就让任务就绪,所以第一次三个打印完,延时也就结束了,三个任务都被挂起了,开始执行空闲任务,空闲任务被调度切换了10次,不过只有他自己还是在执行他,10ms以后,时间到了,三个任务同时就绪又开始执行打印,一共只需要10ms,你还是多看看视频教程吧,一遍不行看两遍,两边不行三遍,看懂为止,懂了才能触类旁通
举报

罗兰君

2020-7-14 14:07:23
原来是这样,谢谢大虾
举报

更多回帖

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