Dzięki temu mnie olśniło i zrozumiałem co robiłem nie tak, albo czego nie dopilnowałem. Można też po prostu wyrugowaćQLQ pisze: ↑pt sty 18, 2019 5:33 pm Właśnie rozwiązałęm problem restartu :
Jak nie masz wpisanego :albo go brakuje (do testu wyremowałem) to modół się restartuje. jak ten wpis jest DZIAŁA !!!Kod: Zaznacz cały
cb.get_temperature = NULL
Kod: Zaznacz cały
// SuplaDevice.addDS18B20Thermometer(); // chaneel 1 siła sygnału Wifi
W tym przykładzie ode mnie rejestrowane są trzy kanały i jeden z nich jest do prezentacji RSSI, ale prezentacja sygnału jest na kanale temperatury.
Klasa SuplaDevice posiada chronioną metodę begin_thermometer, której zadaniem jest rozpoczęcie odczytów, dla kanałów temperatury.
Każdy typ kanału ma swojego callbacka, czyli tak naprawdę wskaźnik do adresu jakiejś funkcji zwracającej zmienną określonego typu, do której musimy coś przypisać, chociażby NULL.
Oczywiście jak przypiszemy NULL to na kanale nie zobaczymy żadnych wartości, ale jeśli nie przypiszemy do callbacka nic to wskazuje on na jakiś przypadkowy adres w pamięci naszego esp.
Definicja callbacków w strukturze SuplaDeviceCallbacks tego za nas nie robi, bo nie jest od tego i po stworzeniu obiektu przez konstruktor dla struktury callbackom rezerwowany jest obszar w pamięci, ale obszar ten bez właściwej inicjacji zawierać może przypadkowe śmieci.
Funkcji begin_thermometer, która jest wywołana w pętli dla wszystkich kanałów, sprawdza typ kanału i czy callback przypisany do typu kanału nie jest NULLem.
Callback ma zarezerwowany jakiś obszar w pamięci na którym mogą być jakiś śmieciowe dane, i zatem nie jest NULLem więc program wchodzi do warunku, próbując go wykonać i wtedy klops.
Procek się gubi, dochodzi do stack overflow i reastartu przez watchdoga.
Można by było do konstruktora dopisać i zainicjować callbacki domyślnie NULLem, tylko po co skoro inicjacja już tam jest poprzez przypisanie funkcji supla_arduino_get_callbacks definiowanej w naszym '.ino'.
Po prostu trzeba o tym pamiętać, żeby inicjować używane zmienne. To co zadeklarowane w strukturze SuplaDeviceCallbacks musi być zainicjowane w supla_arduino_get_callbacks i kropka.
Tak to sobie wytłumaczyłem