相对延时:指每次延时都是从任务执行函数vTaskDelay()开始,延时指定的时间结束。
绝对延时:指每隔指定的时间,执行一次调用vTaskDelayUntil()函数的任务。换句话说:任务以固定的频率执行。
c
void StartMyTask1(void *argument)
{
printf("StartMyTask1\r\n");
for(;;)
{
HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
for(int i=0;i<100;i++)
{
printf("Task1...\r\n");
}
//for循环耗时100ms左右,所以任务循环周期为600ms左右,
//如果有较高优先级任务抢占,那么时间还会增加
vTaskDelay(pdMS_TO_TICKS(500));//500ms
}
}
c
void StartMyTask2(void *argument)
{
// printf("StartMyTask2\r\n");
TickType_t lastWakeTime=0;
lastWakeTime = xTaskGetTickCount();
//在这里首先就获取了tick
for(;;)
{
HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
for(int i=0;i<100;i++)
{
printf("Task1...\r\n");
}
vTaskDelayUntil(&lastWakeTime,pdMS_TO_TICKS(500));
//从lastWakeTime的代码,到这里为止,耗时500个tick
//如果中间的代码耗时时间已经大于500个tick了,
//那么在vTaskDelayUntil函数中就不需要阻塞了,整个任务循环耗时也就是大于500个tick了。
}
}