vTaskDelayUntil与vTaskDelay函数区别 📅 2026/6/28 2:07:42 区别不在“是不是都用xTaskGetTickCount()”,而在延时的参考点不一样。vTaskDelay()是“从现在开始再等一段时间”。比如:vTaskDelay(10);意思是:从当前调用这一刻起,阻塞 10 个 tick所以如果你的任务里前面的处理时间忽长忽短,周期会漂。vTaskDelayUntil()是“等到某个目标时刻”。比如:vTaskDelayUntil(xLastWakeTime, xFrequency);意思是:以上一次唤醒时间为基准, 下一个唤醒点应该是 xLastWakeTime + xFrequency执行完后,函数还会把xLastWakeTime更新为这个新的周期点。所以它是用来做固定周期任务的。这里意思是如果xLastWakeTime一直不更新,那么后续每次调用vTaskDelayUntil都是以绝对时间为基准时间。而vTaskDelay不一样,每次都以调用vTaskDelay函数为基准时间,参数为需要延时的时间。你说得对的一点vTaskDelayUntil()一开始确实也常常这样初始化:xLastWakeTime = xTaskGetTickCount();这一步只是为了确定:第一个周期从“现在”开始对齐