在FreeRTOS中,vTaskDelay
和 vTaskDelayUntil
函数都用于任务延迟(暂停)一段时间,但它们的使用方式和行为略有不同。
vTaskDelay:
vTaskDelay
函数用于使任务暂停一段固定的时间,即任务将被挂起(暂停执行)指定的时间量,然后再继续执行。语法: vTaskDelay( pdMS_TO_TICKS( xTimeInMilliseconds ) );
参数: xTimeInMilliseconds
表示要延迟的时间,单位为毫秒。示例:以下示例将使任务暂停1000毫秒(1秒): vTaskDelay(pdMS_TO_TICKS(1000));
vTaskDelayUntil:
xLastWakeTime
是一个指向TickType_t
类型的变量,用于存储上一次任务恢复执行的时间。xTimeIncrement
表示任务的周期,即任务在每个周期内运行一次。vTaskDelayUntil
函数用于使任务在指定的时间间隔内周期性地运行,即任务将在固定的时间间隔内被挂起(暂停执行)。语法: vTaskDelayUntil( &xLastWakeTime, xTimeIncrement );
参数: 示例:以下示例将使任务每隔1000个时钟节拍(tick)执行一次: TickType_t xLastWakeTime;
const TickType_t xFrequency = pdMS_TO_TICKS(1000); // 1000ms
// 初始化 xLastWakeTime
xLastWakeTime = xTaskGetTickCount();
while (1) {
// 任务逻辑
// ...
vTaskDelayUntil(&xLastWakeTime, xFrequency);
}
总的来说,vTaskDelay
用于静态地延迟任务的执行,而 vTaskDelayUntil
用于实现周期性任务。初学者可以根据任务的具体需求选择适合的函数来控制任务的执行时间。