-
上下文切换的分类:分成抢占和让权两种;
-
上下文切换的过程分成保存和恢复两步。抢占时的保存会占用堆栈,可视为线程;让权时的保存会让出堆栈,可视为协程。恢复过程按是否需要空栈分成线程恢复和协程恢复两种情况。
-
可能的实施线路:
- 在uCOS中没有中断的场景下,引入embassy,以支持协程;(线程被视为不会暂停的协程)
- 统一线程和协程的控制块结构TCB(Task Control Block);
- 只有让权情况出现,让权时栈空,可以复用栈;(解决堆栈的分配和回收问题)
- 在uCOS中没有中断的场景下,引入embassy和优先级,以支持线程和协程的优先级调度;
- 按优先级选就绪任务(可能是线程,也可能是协程);
- 在uCOS中有中断的场景下,引入embassy和优先级,以支持线程和协程的优先级调度;
- 中断就是抢占情况,需要保存堆栈,并(有可能)分配新堆栈,用于恢复下一个任务;
时间线安排:
7.28-7.29:完成思路设计结束
7.30-8.5:至少完成线路1整体代码部分,测试以及debug可以留到下周
8.6-8.12:至少完成线路1,最好线路2也完成了
8.13-8.19: 完成线路2以及完成最终的抢占设计的代码部分,测试以及debug可以留到下周
8.20-8.26:完成所有测试与debug
8.27-...: 做一些数据分析以及形成较好的文档
修正时间线:
8.13-8.19: 完成所有代码,开始debug
8.20-8.26: 完成所有测试与debug
- 在uCOS中没有中断的场景下,引入embassy,以支持协程;(线程被视为不会暂停的协程)