主要内容
首先要明确的两点:
- 任务在延时过程中,应当尽可能地让出CPU给其它任务,从而提升CPU地利用率。
- 应当选择合适的延时方式,保证延时准确度。
系统延时接口
RTOS提供的系统延时接口采用的是基于系统时钟节拍为基准,结合在《自己动手从0到1写嵌入式操作系统》课程中的描述,这种接口的延时往往精度不高,如下图列出了几种延时不准确的情况。
软延时
这种方式是通过让CPU执行无效地空指令,白白浪费CPU来执行延时。
在课程中,提到过这种延时有两大缺点:
具体延时时间难以计算。需要确定具体执行哪些指令,每条指令的执行时间。如果采用C语言编写,开启编译优化后,延时时间发生生变化。
受CPU从Flash取指时间影响、流水线工作影响等。
所以,这种方式很难做到准确的延时。
硬件定时器
采用硬件定时器来软延时,只需要判断定时器的溢出标志位,不需要再统计指令执行时间,也不易受Flash、流水线影响,较为准确和容易,但是仍然会耗用CPU。
如果不想耗费CPU,可以在定时器中断处理函数中完成。
重点难点
RTOS上延时问题
无论是采用哪种方式,都会受到系统中更高优先级任务、中断的打断影响,造成最终延时不准确。所以,如果想避免这些因素的影响,可以采用关中断、调度锁等方式来避免,当然缺点就是会影响到整个系统任务调度和中断响应。
具体选择
注意事项
没有一种延时方式是同时百分百准确同时没有副作用。在选择用时,需根据实际延时的精度,选择尽可能对系统影响小的选择的一种。