【问题标题】:Timer interrrupts vs Dummy loops [closed]定时器中断与虚拟循环[关闭]
【发布时间】:2016-04-24 16:22:32
【问题描述】:

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

【问题讨论】:

  • 计时器不需要中断,您可以使用计数到 n 的循环,这取决于编译器和处理器,有时如果可能的话很难调整。然后是准确的轮询计时,然后是准确的中断。中断更难实现和维护,但允许你做其他事情。
  • 我很确定我们之前在 SO 上已经多次遇到过这个问题。懒得去搜了。粗略总结:考虑到任何计时问题,硬件计时器是专业的解决方案,而虚拟循环是车库黑客的业余解决方案。实现可以在代码中的多个位置重复使用的通用计时器 HAL 相当容易。

标签: embedded infinite-loop interrupt cpu-architecture


【解决方案1】:

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

在虚拟循环中,CPU 忙于计数,因此无法切换到另一个任务或进入睡眠状态。如果虚拟循环被中断,则周期将增加服务中断所需的时间。换句话说,在处理中断时,虚拟循环会暂停。

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

【讨论】:

    【解决方案2】:

    虚拟循环需要 CPU 持续工作(增加计数器,或将阈值与系统计时器进行比较)。

    CPU 时间什么都不做,因此得名 Dummy Loop。

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

    如果您只做一项任务/没有其他事情可做。是时候花在低能耗模式上了(除了省电之外,这对电池供电的设备也很重要)。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-28
        • 2015-05-31
        • 2020-04-26
        • 1970-01-01
        • 1970-01-01
        • 2016-03-25
        相关资源
        最近更新 更多