Друзья, подскажите, может не в ту сторону копаю?
Использую ESP8266 от WeMos с двумя DHT22. Использую стандартную библиотеку от AdaFruit DHT.h. Известно, что сами датчики DHT22/DHT11 медленные, обработка датчика может занимать аж до 2-х секунд. Посмотрел в коде библиотеки DHT.h так эти редиски, собирая сведения с датчика запрещают прерывания. Собственно там возникает цикл, на который и реагирует программный сторожевой пес в ESP8266.
Сами Espriff рекомендуют в таком случае, перед выполнением корявых участков кода, где якобы запрещаются прерывания (есть сведения, что в новых версиях API полностью все не запрещаются) нужно отключать программного сторожевого пса, который реагирует если цикл длился 3.2 секунды. И тогда останется только аппаратный пес, с интервалом в 6 секунд. Либо пытаться кормить пса в своем цикле.
Собственно операции отключения, включения, кормления делаются следующими функциями:
systerm_soft_wdt_stop();
systerm_soft_wdt_feed();
systerm_soft_wdt_restart();
Собственно, я погуглил на локальном диске и нашел указанные функции в файле Esp.cpp расположенном в "C:\Program Files (x86)\Arduino\hardware\esp8266com\esp8266\cores\esp8266"\
В нем есть нечто такое:
Я пробую написать такой код:
Но понимаю, что делаю что-то неверно, ибо мне приезжает ошибка, мол:
ESP-Test:6: error: 'systerm_soft_wdt_restart' was not declared in this scope
systerm_soft_wdt_restart();
Т.е. такой функции нету в прикладываемом файле.
Однако, нутром чую, что нужно создать объект ESP и из него вызвать, например, wdtDisable(void). Но на уровне сверху не понимаю, как это сделать.
Использую ESP8266 от WeMos с двумя DHT22. Использую стандартную библиотеку от AdaFruit DHT.h. Известно, что сами датчики DHT22/DHT11 медленные, обработка датчика может занимать аж до 2-х секунд. Посмотрел в коде библиотеки DHT.h так эти редиски, собирая сведения с датчика запрещают прерывания. Собственно там возникает цикл, на который и реагирует программный сторожевой пес в ESP8266.
Сами Espriff рекомендуют в таком случае, перед выполнением корявых участков кода, где якобы запрещаются прерывания (есть сведения, что в новых версиях API полностью все не запрещаются) нужно отключать программного сторожевого пса, который реагирует если цикл длился 3.2 секунды. И тогда останется только аппаратный пес, с интервалом в 6 секунд. Либо пытаться кормить пса в своем цикле.
Собственно операции отключения, включения, кормления делаются следующими функциями:
systerm_soft_wdt_stop();
systerm_soft_wdt_feed();
systerm_soft_wdt_restart();
Собственно, я погуглил на локальном диске и нашел указанные функции в файле Esp.cpp расположенном в "C:\Program Files (x86)\Arduino\hardware\esp8266com\esp8266\cores\esp8266"\
В нем есть нечто такое:
Код:
void EspClass::wdtDisable(void)
{
/// Please don't stop software watchdog too long (less than 6 seconds),
/// otherwise it will trigger hardware watchdog reset.
system_soft_wdt_stop();
}
void EspClass::wdtFeed(void)
{
system_soft_wdt_feed();
}
Код:
#include <Esp.h>
void setup() {
// put your setup code here, to run once:
systerm_soft_wdt_stop();
systerm_soft_wdt_feed();
systerm_soft_wdt_restart();
}
void loop() {
// put your main code here, to run repeatedly:
}
ESP-Test:6: error: 'systerm_soft_wdt_restart' was not declared in this scope
systerm_soft_wdt_restart();
Т.е. такой функции нету в прикладываемом файле.
Однако, нутром чую, что нужно создать объект ESP и из него вызвать, например, wdtDisable(void). Но на уровне сверху не понимаю, как это сделать.