FreeRTOS 中 vTaskDelay() 延时时间详解
vTaskDelay() 是 FreeRTOS 实时操作系统中用于任务延时的函数。它的参数是一个以操作系统时钟节拍为单位的延时时间。
具体的延时时间取决于 FreeRTOS 配置的操作系统节拍周期 (tick period) 和所传递的延时时间参数。在 FreeRTOS 中,操作系统节拍周期可以通过 configTICK_RATE_HZ 宏定义进行配置,默认值为 1000Hz(即每秒 1000 个节拍)。因此,如果传递给 vTaskDelay() 的延时时间参数为 1,则将延时 1 个操作系统节拍周期。
示例用法:
#include "FreeRTOS.h"
#include "task.h"
void vTaskFunction(void *pvParameters) {
// 延时 500 毫秒
vTaskDelay(pdMS_TO_TICKS(500));
// 其他任务处理代码
}
int main(void) {
// 初始化 FreeRTOS
// 创建任务
xTaskCreate(vTaskFunction, "Task", configMINIMAL_STACK_SIZE, NULL, 1, NULL);
// 启动任务调度器
vTaskStartScheduler();
// 不应该执行到这里
while (1) {
// 主循环处理其他事物
}
return 0;
}
在上述示例中,vTaskDelay(pdMS_TO_TICKS(500)) 将延时 500 毫秒,其中 pdMS_TO_TICKS() 是一个宏,用于将毫秒转换为操作系统节拍周期。
请注意,具体的延时时间可能会受到系统负载和其他任务的影响,因此实际的延时时间可能会略有偏差。
原文地址: https://www.cveoy.top/t/topic/Rtv 著作权归作者所有。请勿转载和采集!