多任务与调度

2 任务调度

2.1 基本特性

2.1.1 任务调度原则

FreeRTOS默认使用固定优先级的抢占式调度策略,其基本原则如下:

  1. 高优先级任务可以在任何时刻抢占低优先级的任务。
  2. 同优先级任务之间使用时间片轮转调度算法,每个任务轮流执行一个时间片。
  3. 当某任务释放CPU时,不用等待该时间片用完即可调度到下一个任务。
    高优先级需要主动释放CPU(例如等待或请求资源等)才能避免低优先级任务饿死。
    在FreeRTOS中,优先级数值越大,优先级越高

2.1.2 任务状态

FreeRTOS中,任务有以下几种状态:

  1. 运行态
  2. 就绪态
  3. 阻塞态:线程等待资源时为阻塞态。
  4. 挂起态:使用 vTaskSuspend() 可以将任务暂停进挂起态,使用 vTaskResume() 可以使任务解除挂起。
    与大多数操作系统中一致,只有就绪态可以转换为运行态