freeRTOS 任务是怎么调度的?
在 freeRTOS 中,任务调度主要是基于优先级的抢占式调度。每个任务都有一个优先级,系统会根据任务的优先级来决定哪个任务获得 CPU 的使用权。
当一个高优先级的任务准备运行,并且当前运行的任务优先级较低时,高优先级任务会抢占 CPU。例如,假设有任务 A 优先级为 3,任务 B 优先级为 2,当任务 B 正在运行,任务 A 进入就绪状态时,任务 A 会立即抢占 CPU 开始运行。
同时,freeRTOS 也支持时间片轮转调度。对于优先级相同的任务,系统会为每个任务分配一个时间片。当一个任务的时间片用完后,会暂停该任务,将 CPU 的使用权交给同优先级的下一个任务。
任务的状态转换在调度过程中也很关键。任务可能处于就绪、运行、阻塞等状态。处于阻塞状态的任务通常是在等待某些事件,比如等待一个信号量或者等待一段时间过去。当等待的事件满足后,任务会进入就绪状态,等待调度器调度。
调度器会在系统滴答定时器(SysTick)的中断服务程序中检查任务的状态和优先级。每次滴答定时器中断,调度器都会决定是否需要进行任务切换,以保证系统的高效运行。
freeRTOS 可以裁剪吗