freertos 系统延时函数
时间: 2023-10-20 16:08:46 浏览: 98
FreeRTOS提供了两个系统延时函数:相对延时函数vTaskDelay()和绝对延时函数vTaskDelayUntil()。相对延时是指每次延时都是从任务执行函数vTaskDelay()开始,延时指定的时间结束。绝对延时是指每隔指定的时间,执行一次调用vTaskDealyUntil()函数的任务,换句话说,就是任务以固定的频率执行。
相关问题
freertos中延时函数
FreeRTOS提供了两个系统延时函数:vTaskDelay()和vTaskDelayUntil()。vTaskDelay()函数用于相对延时,它会使任务阻塞指定的时间,然后再恢复执行。而vTaskDelayUntil()函数用于绝对延时,它会定期地阻塞任务,以实现周期性执行。
在使用vTaskDelay()函数时,任务会在每次调用该函数后阻塞指定的时间,然后再继续执行。这种相对延时的方式适用于不需要精确周期性执行的任务。
而使用vTaskDelayUntil()函数时,任务会在每隔指定的时间后阻塞一段时间,以实现周期性执行。该函数会根据当前时间和指定的周期,在每次调用时计算出下一次阻塞结束的时间点。因此,可以通过该函数实现精确周期性执行的任务。
需要注意的是,如果任务不是最高优先级,则无法保证任务的执行周期性。如果需要实现精确周期性执行的任务,可以使用系统节拍钩子函数vApplicationTickHook()。
FreeRTOS的延时函数
FreeRTOS提供了两个主要的延时函数:vTaskDelay和vTaskDelayUntil。
1. vTaskDelay:
这个函数会暂停当前任务的执行,让其他任务继续执行,直到延时时间结束。参数是延时时间的时长,单位是操作系统的时钟节拍。例如,如果操作系统的时钟节拍为1毫秒,调用vTaskDelay(1000)将会让当前任务暂停1秒钟。
2. vTaskDelayUntil:
这个函数也会暂停当前任务的执行,但是它是在指定的时间点之后再恢复执行。参数是一个时间戳(TickType_t类型),表示任务应该在何时恢复执行。通常,在使用这个函数之前,需要先调用xTaskGetTickCount函数获得当前的系统时间戳。例如,如果想要每隔1秒钟执行一次任务,可以这样使用vTaskDelayUntil函数:
```
TickType_t xLastWakeTime;
const TickType_t xFrequency = 1000; // 1秒钟
xLastWakeTime = xTaskGetTickCount();
while (1) {
vTaskDelayUntil(&xLastWakeTime, xFrequency);
// 执行任务的代码
}
```
需要注意的是,延时函数只会暂停当前任务的执行,并不会阻塞整个系统。其他任务仍然可以继续执行。
阅读全文