• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь WeMos D1 mini NodeMCU перезагружается при выполнении программы

Гек

New member
Всем дорого дня.
Люди помогите пожалуйста с проблемкой.
Есть у меня WeMos D1 Mini на ESP8266 12F, я туда залил NodeMCU:
NodeMCU custom build by frightanic.com
branch: master
commit: 5073c199c01d4d7bbbcd0ae1f761ecc4687f7217
SSL: false
modules: bme280,cron,crypto,file,gpio,http,i2c,net,node,rtctime,sntp,spi,tmr,u8g,uart,websocket,wifi
build built on: 2018-02-25 09:04
powered by Lua 5.1.4 on SDK 2.1.0(116b762)

и прописал вот такой вот скетчик (пользуюсь для этого ESPlorer v0.2.0-rc5):
Код:
--GPIO output config
lighton=0
pin=4
timer_period = 500
gpio.mode(pin,gpio.OUTPUT)

--timer config
timer_accelerator=tmr.create()
timer_accelerator:register(timer_period, 1, function()
    if lighton==0 then
    lighton=1
    gpio.write(pin,gpio.HIGH)
    else
    lighton=0
    gpio.write(pin,gpio.LOW)
    end
end)
timer_accelerator:start()


--WiFi AP Settup
wifi.setmode(wifi.STATIONAP)
cfg={}
cfg.ssid="ESPWIFI"
cfg.pwd="1234567890"
wifi.ap.config(cfg)
cfg = nil

--Starting server
sv=net.createServer(net.TCP)

function receiver(sck, data)
    speed = string.sub(data,7)
    while type(speed)~="number" do
        speed =tonumber(speed)
    end
    print(speed)
    --timer_accelerator:interval(timer_period/speed)
end

if sv then
    sv:listen(123, function(conn)
        conn:on("receive", receiver)
        end)
end
на своем смартфоне установил RoboRemoFree, создал там слайдер, который при перемещении ползунка отправляет данные о делителе скорости мигания светодиодом. Данные приходят такие speed X, где Х - это значение делителя скорости. И вот незадача - если в функции receiver() просто выводить принятые данные в консоль, то все в порядке, но если нагрузить чип обработкой данных, то в случае если слайдер потаскать изрядно (создать большой поток данных), NodeMCU вылетает в перезагрузку. Предполагаю, что происходит это потому что каждый прием данных запускает на выполнение отдельный экземпляр функции receiver(), и при большом потоке данных переполняется либо стек вызовов, либо буфер данных. Отсюда вопрос - как заблокировать или даже дропать выполнение функции до завершения текущей (как по мне то связываться с прерываниями дорого по ресурсам выйдет) до выполнения текущего ее экземпляра (выполнение обработки именно текущего значения не критично - оно все равно будет заменено другим при перетаскивании слайдера).
Помогите решить проблему плз или ткните куда читать, а то что-то роюсь в доках а понять куда копать не могу (((
Спасибо заранее.
 
Сверху Снизу