void vTaskDelay( const TickType_t xTicksToDelay )这个函数比较简单,主要分析prvAddCurrentTaskToDelayedList这个函数。
①:将该任务挂到延迟列表里面。
分析:
static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait, const BaseType_t xCanBlockIndefinitely )
①:把当前任务从就序列表中删除
①:获取下次任务的唤醒时间
②:将唤醒时间赋给任务列表的状态列表项中
③:如果下次唤醒时间小于当前时间,则表示时间溢出,把该任务添加到溢出延迟列表中
④:如果没有溢出,就把该任务添加到延迟列表中。
⑤:如果该任务唤醒的时间小于下次任务的阻塞时间,则把该任务的唤醒时间赋值给任务阻塞时间。
因此通过上述分析,
任务函数通过调用vTaskDelay( const TickType_t xTicksToDelay ),任务的延时周期是函数运行的时间加Delay的时间。因为函数不是按照一定的周期运行的。