ds18b20.lua任务挨饿?

问题描述 投票:0回答:1

我在引脚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_LOW_PRIORITY替换为node.task.HIGH_PRIORITY,则此问题已解决。看来调度程序正在饿死那个低优先级的任务。

我想知道我做错了什么吗?还是这是一个错误?中断会干扰node.task吗?

esp8266 nodemcu
1个回答
0
投票

我回答我自己的问题。我发现是什么干扰了任务。它本身不是中断,而是在回调函数中对gpio.serout的调用。如文档中所述:

HW定时器FRC1_SOURCE模式用于更改状态。由于只有一个硬件计时器,因此可以同时使用哪些模块受到限制。如果计时器已在使用中,则会引发错误。

事实上,我确实收到了一个错误,但由于在串行终端中打印为乱码而无法读取。

© www.soinside.com 2019 - 2024. All rights reserved.