Busy-waiting和定时器中断在编程中的优缺点是什么?

What are the advantages and disadvantages of Busy-waiting and timer interrupts in programming?

实现合适的时间延迟的可行方法是使用忙等待,但是 使用忙等待或定时器中断方法编程的优点和缺点是什么?

可能有很多,我会尝试解决对我来说最重要的问题。

busy-waiting的优点:

  • 执行流程通常更容易理解,因此更不容易出错。
  • 在某些情况下可以更准确地确定时间

缺点:

  • 无法执行其他代码(可能除了其他中断例程)。
  • CPU-time 是浪费:如果没有其他工作必须处理,设置一些 powersaving-state 并让定时器中断及时唤醒它仍然更有效。

busy-waiting 在嵌入式设备中的缺点是功耗增加。在忙等待中,处理器运行full-blast,耗电无果。大多数低功耗处理器都能够在等待定时器中断时让处理器进入休眠状态,从而显着降低功耗。更低的功耗 = 更长的电池寿命。

除非您的应用程序无事可做或需要立即处理结果(这种情况很少见),否则您不想忙等待。它会占用本可用于做其他事情或睡觉的周期。

一个简单的例子,假设您正在制作一个通过 UART 与 wifi 芯片通信的 wifi 恒温器。您的应用程序将需要读取和处理温度、在新数据可用时更新、发送 wifi 消息、接收 wifi 消息以及从按钮推送接收更新等等。如果您正忙着等待其中任何一个发生,那么您的恒温器将无法执行任何其他操作,除非它被中断。