在使用FreeRTOS的过程中,我们通常会在一个任务函数中使用延时函数对这个任务延时,当执行延时函数的时候就会进行任务切换,并且此任务就会进入阻塞太,直到延时完成,任务重新进入就绪态。延时函数舒属于FreeRTOS的时间管理。
0x00 FreeRTOS的延时函数
FreeRTOS中,延时函数相对模式和绝对模式,相对模式是使用vTaskDelay()函数,绝对模式是使用vTaskDelayUntil函数。
vTaskDelay要将INCLUDE_vTaskDelay配置为1,单位是ms
void vTaskDelay( const TickType_t xTicksToDelay );
//vTaskDelay(500) 延时500ms
使用vTaskDelayUntil要将INCLUDE_vTaskDelayUntil配置为1,那些需要按照一定的频率运行的任务可以使用vTaskDelayUntil
void vTaskDelayUntil( TickType_t * const pxPreviousWakeTime, const TickType_t xTimeIncrement )
- pxPreviousWakeTime:上一次任务延时结束被唤醒的时间点
- xTimeIncrement :任务需要延时的时间节拍数
// 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 ();for( ;; ){// Wait for the next cycle.vTaskDelayUntil( &xLastWakeTime, xFrequency );// Perform action here.}}
0x01 FreeRTOS系统时钟节拍
xTickCount就是FreeRTOS的系统时钟节拍计数器,每个滴答时钟中断中xTickCount会加1