从单片机到操作系统⑦——深入了解FreeRTOS的延时机制
没研究过操作系统的源码都不算学过操作系统 FreeRTOS 时间管理 时间管理包括两个方面:系统节拍以及任务延时管理。 系统节拍: 在前面的文章也讲得很多,想要系统正常运行,那么时钟节拍是必不可少的, FreeRTOS 的时钟节拍通常由 SysTick 提供,它周期性的产生定时中断,所谓的时钟节拍管理的核心就是这个定时中断的服务程序。 FreeRTOS 的时钟节拍isr中核心的工作就是调用 vTaskIncrementTick() 函数。具体见上之前的文章。 延时管理 FreeRTOS提供了两个系统延时函数: 相对延时函数 vTaskDelay() 绝对延时函数 vTaskDelayUntil() 。 这些延时函数可不像我们以前用裸机写代码的延时函数操作系统不允许CPU在死等消耗着时间,因为这样效率太低了。 同时,要告诫学操作系统的同学,千万别用裸机的思想去学操作系统。 任务延时 任务可能需要延时,两种情况,一种是任务被 vTaskDelay 或者 vTaskDelayUntil 延时,另外一种情况就是任务等待事件(比如等待某个信号量、或者某个消息队列)时候指定了 timeout (即最多等待timeout时间,如果等待的事件还没发生,则不再继续等待),在每个任务的循环中都必须要有阻塞的情况出现,否则比该任务优先级低的任务就永远无法运行。 相对延时与绝对延时的区别 相对延时