FreeRTOS 中的延时函数是任务调度的核心机制之一,用于控制任务的执行节奏,实现任务阻塞、周期性执行或等待特定时间。以下从原理到源码的详细解析:
1. 延时函数的作用
- 任务阻塞:调用延时函数的任务会主动让出 CPU,进入阻塞状态(Blocked State)。
- 资源释放:在等待期间,CPU 资源可被其他任务利用,提高系统效率。
- 时间管理:基于系统节拍(Tick)实现精准的时间控制。
2. 核心延时函数
FreeRTOS 提供两类延时函数,适用于不同场景:
(1)相对延时:vTaskDelay()
- 功能:任务阻塞指定的 相对时间(从调用时刻开始计算)。
- 原型:
void vTaskDelay(const TickType_t xTicksToDelay); - 参数:
xTicksToDelay为延时的系统节拍数(如 100 表示阻塞 100 个 Tick)。 - 特点:
- 延时时间可能因任务调度或中断而 不精确。
- 适用于无需严格周期性的场景(如非实时任务)。
(2)绝对延时:vTaskDelayUntil()
- 功能:任务阻塞到指定的 绝对时间点,确保周期性任务的 稳定间隔。
- 原型:
void vTaskDelayUntil(TickType_t *pxPreviousWakeTime, const TickType_t xTimeIncrement); - 参数:
pxPreviousWakeTime:指向记录上一次唤醒时间的变量。xTimeIncrement:期望的任务执行周期(单位:Tick)。
- 特点:
- 自动补偿任务执行时间,避免时间累积误差。
- 适用于需要严格周期性的场景(如传感器采样、PWM 控制)。
3. 源码实现原理
(1)vTaskDelay() 的流程
-
计算唤醒时间:

最低0.47元/天 解锁文章
3612

被折叠的 条评论
为什么被折叠?



