FreeRTOS任务调度
1. 任务调度
调度器的核心作用是决定当前哪个任务应占用 CPU 执行。FreeRTOS 主要支持两种实用的调度方式:
1.1 抢占式调度
适用场景:优先级不同的任务。
核心特点:高优先级任务可以立即抢占正在运行的低优先级任务的 CPU 使用权。只要高优先级任务不主动释放 CPU(如进入阻塞态),低优先级任务就无法运行。
1.2 时间片调度
适用场景:优先级相同的多个任务。
核心特点:系统为每个任务分配一个固定的执行时间片(由系统时钟节拍决定),它们轮流执行。如果一个任务在时间片用完前阻塞(如调用延时),则会立即切换任务,剩余的时间片作废。
2 任务状态
FreeRTOS 的任务在其生命周期中会在以下四种核心状态间转换:
1. 运行态
任务正在 CPU 上执行。在单核处理器上,任一时刻只有一个任务处于此状态。
2. 就绪态
任务已准备就绪,可以运行,但因为当前有更高优先级的任务正在运行,而暂时等待调度。调度器总是从就绪态的任务中选择最高优先级的来执行。
3. 阻塞态
任务因等待某个事件(如延时结束、信号量、队列消息)而暂停执行。事件发生后,任务会自动回到就绪态。
4. 挂起态
任务被通过vTaskSuspend()函数手动暂停,不再参与调度。只能通过调用 vTaskResume()函数手动恢复到就绪态。它与阻塞态的关键区别在于没有自动唤醒的条件。
3 核心规则总结
调度基础:调度器永远只从就绪态的任务中选择一个来运行。
状态管理:除了运行态,其他状态的任务都由对应的列表进行管理:
就绪列表pxReadyTasksLists[]:按优先级管理所有就绪任务。
阻塞列表pxDelayedTaskList:管理正在延时或等待事件的任务。
挂起列表 xSuspendedTaskList:管理所有被挂起的任务。
状态转换:任务是动态的,通过调用 API 函数(如延时、请求资源)或事件触发,任务会在运行、就绪、阻塞、挂起几种状态间切换。
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)