02-任务调度与状态管理.md 3.2 KB


tags: [source-summary] type: source source: "尚硅谷嵌入式技术之FreeRTOS实时操作系统 V1.0.3 — 第2章" author: "尚硅谷研究院" date: 2026-07-12 url: ""

created: 2026-07-12

任务调度与状态管理

来源:尚硅谷 FreeRTOS 教程第 2 章。覆盖:多任务处理、任务调度策略、任务状态、滴答定时器、上下文切换、空闲任务。

多任务处理

内核是操作系统的核心组件。多任务操作系统可以将复杂应用程序分割成一组更小、更易管理的任务。即使单核处理器一次只能执行一项任务,通过任务间快速切换也能制造并发执行的假象。

任务调度

调度器决定在任何特定时间应执行哪个任务。FreeRTOS 默认使用 固定优先级的抢占式调度策略,对同等优先级的任务执行时间片轮询

  • 抢占式调度:更高优先级的任务可随时抢占正在执行的低优先级任务
  • 时间片轮询:同优先级任务轮流执行一个时间片(即 SysTick 中断周期)

高优先级任务等待资源(延时或等待信号量等)而无法执行时,调度器会选择执行其他就绪的高优先级任务。

任务状态

FreeRTOS 中共 4 种任务状态:

状态 说明
运行态(Running) 任务实际执行中,单核下仅一个任务处于此状态
就绪态(Ready) 任务可执行但尚未运行,因同/更高优先级任务正在运行
阻塞态(Blocked) 任务等待延时或外部事件
挂起态(Suspended) 调用 vTaskSuspend() 进入,需 vTaskResume() 恢复

只有就绪态可转变成运行态,其他状态必须先转为就绪态。

每种状态对应一个任务状态列表:

  • 就绪列表pxReadyTasksLists[x](x 为优先级数值)
  • 阻塞列表pxDelayedTaskList
  • 挂起列表xSuspendedTaskList

32 位硬件中保存 32 位变量代表 0-31 优先级,某位置 1 代表该优先级就绪列表有任务存在。多个同优先级任务连接在同一就绪列表上。

调度器总是在所有就绪列表中选择最高优先级的任务执行。

FreeRTOS 滴答(Tick)

FreeRTOS 通过滴答计数变量测量时间。定时器中断(RTOS 滴答中断)以严格时间精度增加滴答数。每次滴答增加时,内核检查是否需要解除阻塞或唤醒任务。

上下文切换

上下文包括处理器寄存器、堆栈等任务执行资源。任务被挂起时保存上下文到任务堆栈,恢复时从堆栈还原到处理器寄存器。

切换时机:

  1. RTOS 滴答中断:处理就绪列表,判断是否切换(抢占/时间片)
  2. 任务执行完毕:主动调用任务切换函数

上下文切换在 PendSV ISR 中处理。PendSV 被设置为最低中断优先级,避免影响其他 ISR。通过将 ICSR 寄存器的 bit28(PendSV 挂起位)置 1 来触发 PendSV 中断。

空闲任务

调度器启动时自动创建空闲任务(最低优先级),确保始终有任务可运行。空闲任务负责释放被删除任务的内存。

后续章节:[[05-任务创建删除与挂起恢复]]、[[06-中断管理与时间管理]]