1.概念理解
所谓时间片,指的是同一优先级下多个任务,每个任务轮流享有的CPU时间。
最小时间单位:RTOS的最小时间单位是一个tick,即SysTick的一个中断周期。
2.案例分析
上图是案例,三个任务,任务1和任务2具有同等的优先级2,任务3的优先级为3级,任务1和任务2都是无线循环执行并且翻转flag1和flag2,任务3采用阻塞延时翻转flag3
切换任务主要做两件事情:
(1)选择最高优先级,根据位图表选择就绪任务列表中最高优先级的任务链表
(2)同一优先级多任务的切换:核心代码是链表操作中有一个获取下一个节点的OWNER的宏,所以在每切换一次任务时,在该优先级对应的链表取下一个任务来执行,就完成了相同优先级多任务运行的切换
(3)修改任务切换的机制,两种情况需要切换任务:第一种是延时到时,从延时列表退出,插入到就绪列表,并且任务优先级比当前运行任务优先级高,则进行任务切换;第二种是当前任务优先级链表中有多个任务,在时间片机制里,下一个时间片应该切换到同等优先级其他的任务执行。
切换任务的时机:在时基计数中断服务中,判断以上两种情况,是否任务延时到期,同等优先级就绪链表上是否有多个任务
学习心得:
1.理解时间片的含义,即相同优先级下多个就绪任务轮流享有CPU的时间
2.任务切换的地方:都是在时基中断服务函数中进行切换
3.任务切换的两个条件:一是,延时任务链表有延时到期任务,从延时队列移除,插入就绪链表,并且任务优先级比当前pxCurrentTCB任务的优先级高;另外一种情况是,就绪链表中有多个与当前正在执行的任务优先级相同,由于需要轮流享用时间片,因此需要进行切换