嵌入式学习小组
直播中

李玉鑫

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

为什么时间片轮转调度实验中时间片不起作用?

开发板探索者STM32F407,学习UCOSIII,按照例程做到时间片轮转调度实验。

按照例程结果是对的,现在想看看时间片没起作用是个什么情况,把时间片使能语句屏蔽掉了,运行下来屏幕上的数字还是同步一致的啊,这个实验没看到怎么体现时间片工作和不工作的区别啊

回帖(3)

张超

2019-11-8 14:56:22
把时间片使能语句屏蔽掉(即:#define OS_CFG_SCHED_ROUND_ROBIN_EN     0u)后,虽然结果似乎与之前相同,但是仔细分析程序代码,还是完全不同:
第一,OS_SchedRoundRobin()代码没有编译,所以程序中肯定没有时间片轮转调度功能。
第二,task1_task和task2_task任务,通过OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err)出让CPU使用权,所以两个同优先级的任务可以轮流工作。
第三,可以去掉两个任务的OSTimeDlyHMSM(),使之不出让CPU使用权,则同优先级的任务只能有一个工作。但是如果在时间片轮转调度情况下,此时两个任务仍然是可以工作。
从楼主的帖子,引申出一个新问题,如果几个任务优先级相同,又不使用时间片轮转调度,实际应用是否可行呢?
几个任务的关系,就不是抢占式调度了,需要当前任务主动出让CPU使用权,同优先级的下一个任务才能运行。不过由此带来的一个好处是:各任务中可以使用不可重入函数,可以使用一些共享资源,不必担心资源冲突。
举报

h1654155275.5814

2019-11-8 15:13:59
我在时间片轮转调度实验时,结果不对,好像程序跑飞了样
举报

李芳

2019-11-8 15:23:48
举一反三啊,厉害
举报

更多回帖

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