Всем дорого дня.
Люди помогите пожалуйста с проблемкой.
Есть у меня 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):
на своем смартфоне установил RoboRemoFree, создал там слайдер, который при перемещении ползунка отправляет данные о делителе скорости мигания светодиодом. Данные приходят такие speed X, где Х - это значение делителя скорости. И вот незадача - если в функции receiver() просто выводить принятые данные в консоль, то все в порядке, но если нагрузить чип обработкой данных, то в случае если слайдер потаскать изрядно (создать большой поток данных), NodeMCU вылетает в перезагрузку. Предполагаю, что происходит это потому что каждый прием данных запускает на выполнение отдельный экземпляр функции receiver(), и при большом потоке данных переполняется либо стек вызовов, либо буфер данных. Отсюда вопрос - как заблокировать или даже дропать выполнение функции до завершения текущей (как по мне то связываться с прерываниями дорого по ресурсам выйдет) до выполнения текущего ее экземпляра (выполнение обработки именно текущего значения не критично - оно все равно будет заменено другим при перетаскивании слайдера).
Помогите решить проблему плз или ткните куда читать, а то что-то роюсь в доках а понять куда копать не могу (((
Спасибо заранее.
Люди помогите пожалуйста с проблемкой.
Есть у меня 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
Помогите решить проблему плз или ткните куда читать, а то что-то роюсь в доках а понять куда копать не могу (((
Спасибо заранее.