FreeRTos延时函数xTaskDelayUntil的工作原理

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

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

初始化 pxPreviousWakeTime

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

计算机小混子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值