1. 上下文切换的分类:分成抢占和让权两种;
  2. 上下文切换的过程分成保存和恢复两步。抢占时的保存会占用堆栈,可视为线程;让权时的保存会让出堆栈,可视为协程。恢复过程按是否需要空栈分成线程恢复和协程恢复两种情况。
  3. 可能的实施线路:
    1. 在uCOS中没有中断的场景下,引入embassy,以支持协程;(线程被视为不会暂停的协程)
      • 统一线程和协程的控制块结构TCB(Task Control Block);
      • 只有让权情况出现,让权时栈空,可以复用栈;(解决堆栈的分配和回收问题)
    2. 在uCOS中没有中断的场景下,引入embassy和优先级,以支持线程和协程的优先级调度;
      • 按优先级选就绪任务(可能是线程,也可能是协程);
    3. 在uCOS中有中断的场景下,引入embassy和优先级,以支持线程和协程的优先级调度;
      • 中断就是抢占情况,需要保存堆栈,并(有可能)分配新堆栈,用于恢复下一个任务;

整体思路设计

任务切换设计

模块、接口、结构设计文档