gpt4 book ai didi

timer - 如果 NodeMCU 计时器中的代码在我设置的计时器间隔内执行,会发生什么情况?

转载 作者:行者123 更新时间:2023-12-05 07:42:44 25 4
gpt4 key购买 nike

借助NodeMCU,我们可以轻松地在esp8266芯片中创建定时器功能。但是,我想知道如果定时器中的代码在我设置的定时器间隔内执行会发生什么情况?

请看下面的代码。如果我设置一个间隔为 2 秒的计时器,并且这个计时器中的“Something to do”执行超过 2 秒,那么会发生什么?

tmr.alarm(0, 2000, 1, function ()
--Something to do
end)

a) 一旦间隔达到 2 秒,“Something to do”是否会终止?

b) 或者“Something to do”会一直执行到结束,而下一个“Something to do”会被延迟?

c) 或者这个计时器的每一轮都会等待“要做的事情”完成而不考虑 2 秒的间隔? (区间自动扩大)

d) 或者其他?

最佳答案

该函数的行为与您想象的不同。通常当你需要提供一个回调函数时,回调会在事件发生时执行;这就是这里发生的事情。回调函数在计时器到期后执行。

tmr.alarm() 的文档表示该函数是 tmr.register() 的组合和 tmr.start()tmr.register() 文档说

Configures a timer and registers the callback function to call on expiry.

因此,您的答案是“Something to do”将运行,直到它完成, tmr.alarm() 函数被调用后 2 秒。

tmr.alarm()(以及它所基于的 tmr.register())可以采用 mode 参数。我将描述它们的行为以及回调函数的执行时间如何影响它们。

  • tmr.ALARM_SINGLE:在 tmr.alarm() 调用完成后 n 秒运行回调函数仅一次。完全独立于回调函数的执行时间。
  • tmr.ALARM_AUTO:在 tmr.alarm() 调用完成后每 n 秒重复运行一次回调函数。重要的是要注意,下一个间隔在前一个间隔结束后立即开始,而不管回调的执行时间。因此,如果回调需要 0.5s 完成执行,并且计时器为 2s,则下一次调用将在回调函数完成后 1.5s 发生。
  • tmr.ALARM_SEMI:在 tmr.alarm() 调用完成后 n 秒运行回调函数。与 tmr.ALARM_AUTO 不同,下一个间隔不会自动开始,而只会在您调用 tmr.start() 后开始;您可能应该在回调函数中执行此操作。这意味着您可以将计时器设置为依赖于回调函数的执行时间。如果计时器为 2 秒,并且您在回调函数结束时重新启动计时器,则下一次回调将在 2 秒后运行。

您可能会说,您不希望回调函数的执行时间大于计时器周期,回调将不断堆叠在一起,永远不会结束。回调应该简单快速地执行,或许可以将额外的工作安排为另一项任务。

关于timer - 如果 NodeMCU 计时器中的代码在我设置的计时器间隔内执行,会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44279101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com