关于两个函数
vTaskDelay() 函数:相对延时,即相对于当前时间进行延时
vTaskDelayUntil() 函数:绝对延时,即相对于上一次的唤醒时间进行延迟
这两个函数延时都是延时节拍数的!而每个节拍多长时间可见 FreeRTOSConfig.h 文件的代码:
#define configTICK_RATE_HZ (1000) //时钟节拍频率,这里设置为1000,周期就是1ms
以上1000的单位为Hz。
两个函数的使用
vTaskDelay()
void vTaskFunction( void * pvParameters )
{
/* Block for 500ms. */
const TickType_t xDelay = 500 / portTICK_PERIOD_MS;
for( ;; )
{
/* Simply toggle the LED every 500ms, blocking between each toggle. */
vToggleLED();
vTaskDelay( xDelay );
}
}
vTaskDelayUntil()
// Perform an action every 10 ticks.
void vTaskFunction( void * pvParameters )
{
TickType_t xLastWakeTime;
const TickType_t xFrequency = 10;
// Initialise the xLastWakeTime variable with the current time.
xLastWakeTime = xTaskGetTickCount(); //参数xLastWakeTime只需要在第一次使用时进行赋值,之后会自动更新
for( ;; )
{
// Wait for the next cycle.
vTaskDelayUntil( &xLastWakeTime, xFrequency );
// Perform action here.
}
}