空闲任务与阻塞延时
← FreeRTOS内核实现与应用开发实战指南知识地图 | ← 主页
SysTick 硬件中断作为时基
空闲任务
没有就绪任务可运行时进入空闲任务。
- 调用
vPortFree()回收已经结束的任务的栈和TCB的空间 - 执行 ARM 汇编指令
__WFI()(Wait For Interrupt),CPU 核心立刻暂停时钟等待中断 - 如果开了
configUSE_TICKLESS_IDLE == 1那就是开低功耗定时器去睡眠⇒唤醒 - 如果开了
configUSE_IDLE_HOOK == 1,执行钩子函数,去喂狗和算CPU负载
阻塞延时
任务调用延时接口时,记录唤醒时刻,将任务从就绪链表移入延时/阻塞链表,并设置悬起标志位。任务主动让出 CPU 后,由其他就绪任务运行。
SysTick 每次将时间xTickCount加 1;当当前时间达到任务唤醒时刻时,移出阻塞链表、清除悬起标志位并重新置为就绪,随后由调度器决定是否切换。