2016-04-24 43 views
-2

在区分体系结构,编程问题和操作系统方面,使用定时器中断而不是虚拟环路来实现时间延迟有什么优势?任何帮助将不胜感激。提前致谢。定时器中断与虚拟环路

+0

定时器不需要中断,你可以使用循环计数到n,它依赖于编译器和处理器,有时很难调整。那么就有准确的轮询时间,然后中断准确的时间。中断更难实施和维护,但允许你做其他事情。 –

+0

我很确定我们之前曾经有过这么多次这个问题。不能被打扰搜索它。粗略总结:鉴于任何时间问题,硬件定时器是专业解决方案,虚拟循环是车库破解,业余解决方案。实现可从代码中多个地方重用的通用计时器HAL相当容易。 – Lundin

回答

1

虚拟循环要求CPU始终工作(增加一个计数器,或将阈值与系统计时器进行比较)。

CPU时间花费无所事事,因此名为Dummy Loop。

在多任务操作系统上,这很糟糕,因为时间可能会花在做其他事情上。

如果你在一个单一的任务/没有任何事情要做。现在是时候可以花在低能耗模式上了(除了对电力友好,对于电池供电的设备来说非常重要)。

0

虚拟循环取决于处理器速度。当您使用定时器中断时,您将处理对事件的更快响应,并且您将提供功耗。

2

一旦硬件定时器已经设置好,它将独立于CPU正在执行的任何代码进行计数。 CPU可以运行其他任务,服务中断,或者甚至可以在定时器运行时进入睡眠状态以节省电力。然后,当定时器中断发生时,CPU将唤醒和/或切换回等待的任务以服务定时器到期。定时器的持续时间不受CPU在定时器计数时所做的任何影响。

在虚拟循环中,CPU正忙于计数,因此无法切换到其他任务或进入睡眠状态。如果虚拟循环被中断,则周期将增加服务中断所花费的时间。换句话说,在中断服务期间,虚拟环路暂停。

虚拟循环的持续时间可能受编译器和/或链接器选项的影响。例如,如果您更改编译器优化级别,则虚拟循环的速度可能会改变。或者,如果虚拟循环函数位于具有不同数量的等待状态的不同存储器中,那么虚拟循环的速度可能会改变。硬件计时器将不受这些变化的影响。