双任务延时原理与空闲任务
在这节课时中我们要解决另一个重要的问题:即实现任务的延时。
注意,这里的延时并不指用while实现软延时,而是允许任务延时时将CPU释放给其它任务运行代码,这样从很大程度上能够提高CPU的利用率。
使用前后台结构与使用RTOS,在CPU利用率上提升的关键原因就在于此!
主要内容
我们通过一个硬件定时器来实现所有的任务延时。这个定时器周期性地触发溢出中断,然后在溢出中断中对任务的延时做处理,当延时完成后再唤醒任务。
这个定时时钟节拍中断,就是我们常见的RTOS系统时钟节拍。
任务要完成整个延时过程,需要三者配合:
- tTaskDelay()中负责设置任务延时时间,然后释放CPU
- tTaskSystemTickHandler()负责处理定时中断,扫描所有的任务的延时状态
- tTaskSched()最最重要的部分:决定了要运行哪些任务。
重点难点
有同学反馈说,tTaskSched()中的实现算法有些问题。是的,请略过。这个实现在接下来课时中很快会被重写,所以请不要在意。