任务模型
任务的概念
Task是可被调度的执行流。- 在大多数 MCU 场景里,
Task更接近“线程”,不是完整“进程”。 - 任务的核心对象是:任务函数、任务栈、任务控制块
TCB。
为什么每个任务都要有自己的栈
- 函数调用现场、局部变量、返回地址都要落在栈上。
- 任务切换时,本质上是在切换“当前使用哪一份栈和寄存器现场”。
任务状态
| 状态 | 含义 |
|---|---|
| Running | 当前正在 CPU 上运行 |
| Ready | 已经具备运行条件,但还没轮到 |
| Blocked | 在等时间、队列、信号量、事件 |
| Suspended | 被显式挂起,等待恢复 |
除了运行态,另外 3 个状态都有对应链表。
- 就绪列表:
pxReadyTasksLists[x] - 阻塞列表:
pxDelayedTaskList - 挂起列表:
xSuspendedTaskList
创建与删除任务
xTaskCreate();
xTaskCreateStatic();
vTaskDelete();这一篇要盯住什么
Task和“线程”到底像在哪里,不像在哪里。- 任务切换为什么离不开任务栈。
- 阻塞态和挂起态不要混。