我在引脚D3上连接了一个ds18b20传感器,在引脚D1上连接了一个霍尔传感器。我在引脚D1上使用tmr.trig来计算下降沿事件。当我调用ds18b20:read_temp(callback, pin, ds18b20.C)时,一切都按预期运行。
当来自霍尔传感器的中断开始到达时,奇怪的事情开始发生。每秒仅中断一次就足够了。read_temp挂起,没有调用回调,我也没有得到任何读数。过了一段时间,对read_temp的大量调用堆积起来,esp8266就会重置。
我将这个问题追溯到ds18b20.lua的205行
if lcb then node_task_post(node_task_LOW_PRIORITY, lcb) end如果我用node.task.HIGH_PRIORITY替换node_task_LOW_PRIORITY,这个问题就解决了。这看起来像是调度器正在抢占低优先级的任务。
我在想我是不是做错了什么?或者这是一个bug?中断是否会干扰node.task?
发布于 2020-04-29 00:38:11
我回答我自己的问题。我找出了干扰这项任务的因素。这并不是中断本身,而是在回调函数中调用gpio.serout。如文档中所述:
硬件定时器FRC1_SOURCE模式用于更改状态。由于只有一个硬件定时器,因此可以同时使用哪些模块有限制。如果计时器已在使用中,则会引发错误。
事实上,我确实收到了一个错误,但无法读取,因为它在串行终端中打印为胡言乱语。
https://stackoverflow.com/questions/61480597
复制相似问题