任务切换
任务切换的本质:就是CPU寄存器的切换
假设当由任务A切换到任务B时,主要分为两步:
第一步:需暂停任务的执行,并将此时任务A的寄存器保存到任务堆栈,这个过程叫做保存现场;
第二步:将任务B的各个寄存器值(被存于任务堆栈中)恢复到CPU寄存器中,这个过程叫做恢复现场;
对任务A保存现场,对任务B恢复现场,这个整体的过程称之为:上下文切换。
注意:任务切换的过程在PendSV中断服务函数里边完成
PendSV中断是如何触发的?
- 滴答定时器中断调用
- 执行FreeRTOS提供的相关API函数:portYIELD()
本质:通过向中断控制和状态寄存器ICSR的bit28写入1挂起PendSV来启动PendSV中断
时间片调度
同等优先级人物轮流地享有相同的CPU时间(可设置),叫时间片,在FreeRTOS中,一个时间片就等于SysTick中断周期
- 同等优先级任务,轮流执行;时间片流转
- 一个时间片大小,取决于抵达定时器中断频率
- 注意没有用完的时间片不会再使用。