FreeRtos的时间管理包括相对延时vTaskDelay、绝对延时vTaskDelayUntil、系统时钟Systick
本篇主要分析相对延时vTaskDelay函数
调用vTaskDelay是一定会触发任务切换的,需要分析下PendSv中断触发的位置。
一、 函数流程
二 、prvAddCurrentTaskToDelayedList
注意,delay链表的列表项的值xItemValue为要task要恢复的时钟节拍数,并且是个有序链表,
xNextTaskUnblockTime为下一个要唤醒的时钟节拍
三、xTaskResumeAll
xPendedTicks为任务挂起阶段的时钟节拍数
四、为什么叫相对延时
我们一般使用vTaskDelay的用法,函数体+delay,由于函数体运行的时间是不固定的,所以整个1+2的时间就是不固定的,所以才叫相对延时