在 FreeRTOS 中,任务的**运行态(Running State)**是任务实际占用 CPU 执行代码的状态。FreeRTOS 的调度器(Scheduler)会根据任务优先级和调度策略自动选择就绪态中的最高优先级任务进入运行态。没有直接通过 API 强制任务进入运行态的方法,但可以通过以下操作使阻塞或挂起的任务进入就绪态:
1. 触发调度器切换任务
任务的运行态由调度器自动管理,但可以通过以下方式触发调度器重新选择任务:
taskYIELD()
主动让出 CPU,触发调度器重新选择最高优先级的就绪态任务运行。- 用途:在任务中手动切换任务(例如协作式调度)。
- 示例:
// 任务 A 执行部分操作后主动让出 CPU vTaskDelay(pdMS_TO_TICKS(1)); // 短暂阻塞或直接让出 taskYIELD(); // 显式触发调度
2. 提升任务优先级
vTaskPrioritySet(TaskHandle_t xTask, UBaseType_t uxNewPriority)
提高任务的优先级,使其在就绪态中优先级最高,从而被调度器选中进入运行态。- 示例:
vT
- 示例: