FreeRTos延时函数xTaskDelayUntil的工作原理

通过一个简单的例子来解释 xTaskDelayUntil 的工作原理:

假设你有一个任务,需要每隔 100 个时钟节拍唤醒一次来执行某些操作。

初始化 pxPreviousWakeTime

在任务开始时,你首先获取当前的时钟节拍数并将其赋值给 pxPreviousWakeTime
例如,pxPreviousWakeTime = xTaskGetTickCount();
任务循环:

在任务的循环中,你调用 xTaskDelayUntil(&pxPreviousWakeTime, 100);
这里的 100 是你希望任务等待的时钟节拍数。
如何更新 pxPreviousWakeTime

当 xTaskDelayUntil 被调用时,它计算下一个唤醒时间:当前的 pxPreviousWakeTime 加上 100 个节拍。
在任务唤醒并执行后,xTaskDelayUntil 会自动更新 pxPreviousWakeTime 为下一个预定唤醒时间(即当前的 pxPreviousWakeTime 加上 100)。
结果:

这样,不管任务执行需要多少时间,它总是会在每个 100 个时钟节拍周期后被唤醒。
任务不会因为执行时间的长短而影响下一次的唤醒时间,因为唤醒时间是基于原始 pxPreviousWakeTime 加上固定的间隔计算的。
通过这种方式,xTaskDelayUntil 保证了任务以固定的频率执行,这对于需要精确时间控制的应用来说非常重要。

你可能感兴趣的:(FreeRTOS,stm32)