任务模型

← 返回 MOC | ← 相关原理 | ← 主页


任务的概念

  • Task 是可被调度的执行流。
  • 在大多数 MCU 场景里,Task 更接近“线程”,不是完整“进程”。
  • 任务的核心对象是:任务函数、任务栈、任务控制块 TCB

为什么每个任务都要有自己的栈

  • 函数调用现场、局部变量、返回地址都要落在栈上。
  • 任务切换时,本质上是在切换“当前使用哪一份栈和寄存器现场”。

任务状态

状态含义
Running当前正在 CPU 上运行
Ready已经具备运行条件,但还没轮到
Blocked在等时间、队列、信号量、事件
Suspended被显式挂起,等待恢复

除了运行态,另外 3 个状态都有对应链表。

  • 就绪列表:pxReadyTasksLists[x]
  • 阻塞列表:pxDelayedTaskList
  • 挂起列表:xSuspendedTaskList

创建与删除任务

xTaskCreate();
xTaskCreateStatic();
vTaskDelete();

这一篇要盯住什么

  • Task 和“线程”到底像在哪里,不像在哪里。
  • 任务切换为什么离不开任务栈。
  • 阻塞态和挂起态不要混。