【问题标题】:Interupts Vs Poling a Device中断与轮询设备
【发布时间】:2012-06-11 09:26:10
【问题描述】:

在我的申请中没有。的设备(相机、A/D、D/A 等)正在与服务器通信。我有两个选项可以节省设备的功耗,因为并非所有设备都必须始终工作:

1- 进行轮询,即每个设备定期继续查看文件的内容,并在其中获取唤醒或睡眠的值。如果它发现唤醒,那么它就会醒来并完成它的工作。

在这种情况下,实际上设备将处于睡眠状态,但驱动程序将处于活动状态并进行轮询。

2- 使用中断,我可以在需要时唤醒设备。

我无法决定要走哪条路以及为什么。有人可以在这方面启发我吗?

平台:Windows 7,32 位,在 Intel Core2Duo 上运行

【问题讨论】:

  • 显然中断驱动的方法比轮询更好,因为(..很多原因..)。这是用于什么平台的?
  • Windows 7,32 位,在 Intel Core2Duo 上运行

标签: c windows-7 embedded


【解决方案1】:

轮询本质上是不精确的。你的目标精度越高,轮询就越浪费。理想情况下,仅当您无法对中断进行某些操作时才应考虑轮询;否则,最好使用中断。

此规则的一个例外是,如果您想有意“限制”某事,例如,当您可能每秒获得多个事件,但您希望每分钟只对一个事件做出反应。在这种情况下,您经常使用轮询和中断的组合,其中中断设置一个标志,而轮询完成真正的工作,但只有在设置了标志时。

【讨论】:

    【解决方案2】:

    如果要定期唤醒您的设备,我会以适当的频率进行轮询(这总是更容易设置,因为它只是在看一点点)。如果唤醒事件是异步的,我宁愿选择中断驱动的架构,尽管有代码和电子开销。

    【讨论】:

      【解决方案3】:

      这取决于您的硬件和软件结构以及软件的复杂性。最好选择中断机制而不是轮询。

      在轮询时,您的控制器将忙于不断地轮询硬件以检查所需的值是否可用。

      虽然使用中断机制将释放控制器以执行其他任务,并且当中断出现时,您的 ISR 可以执行特定需要的任务。

      【讨论】:

        猜你喜欢
        • 2016-08-12
        • 2016-06-15
        • 2012-05-10
        • 1970-01-01
        • 1970-01-01
        • 2013-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多