关于两个函数
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.}}