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

вызов srv:listen(80, function(conn) дает ошибку - out of memory

vaz_mz

New member
Здравствуйте уважаемые.

пытался поднять небольшой сервер на ESP-01:
Код:
do

srv = net.createServer(net.TCP)
function receiver(sck, data)
    print(data)
    sck:send("<h1> Hello, NodeMCU!!! </h1>")
    sck:on("sent", function()
        sck:close()
    end)
end
srv:listen(80, function(conn)
  conn:on("receive", receiver)
end)
end
получаю вышеуказанную ошибку.

прошивка nodemcu:
NodeMCU custom build by frightanic.com
branch: master
commit: 11592951b90707cdcb6d751876170bf4da82850d
SSL: false
modules: am2320,cron,enduser_setup,file,gpio,http,i2c,mdns,mqtt,net,node,tmr,uart,websocket,wifi
build created on 2019-02-11 16:19
powered by Lua 5.1.4 on SDK 2.2.1(6ab97e9)

в прошивке кроме этого кода ничего нет. ОЗУ 40 кб свободно. что я делаю не так?
 

vaz_mz

New member
заработало с добавлением следующих вызовов:
Код:
station_cfg={}
station_cfg.ssid=""
station_cfg.pwd=""
wifi.setmode(wifi.STATION);
wifi.sta.config(station_cfg);
wifi.sta.autoconnect(1);
tmr.alarm(0, 1000, 1, function()
    ip = wifi.sta.getip();
    if ip~=nil then
        print(ip);
        tmr.stop(0);
        --httpserver();
    else
        print("no connect");
    end
end)
странно что подключение к роутеру с только 4 раза проходит...

и ошибка out of memory никуда не исчезла, но - РАБОТАЕТ:-D
 

nikolz

Well-known member
совершенно верно, как это вы умудрились заметить?
так Вы же сами написали про это.
А скрипт либо выкладывайте полностью либо вообще не выкладывайте. Гадать никто не будет а читать мысли никто на этом форуме не умеет.
 

vaz_mz

New member
кроме вышеуказанного куска кода, ничего в прошивку не загружено. (остальное работает, и частями, и все вместе)
прошивка вылетала на строчке с вызовом:
srv:listen(80, function(conn)

после того как в коде оформил wifi станцию. код заработал, но тоже кривовасто.

меня как программера бесит отсутствие отладки. даже сборка прошивки в режиме отладки, практически ничего не дает.

вот что значило out_of_memory в моем случае? только когда все заработало стало понятно что вызов ушел куда-то в подпространство. я понимаю что ошибки детские, но как их диагностировать?
 

nikolz

Well-known member
кроме вышеуказанного куска кода, ничего в прошивку не загружено. (остальное работает, и частями, и все вместе)
прошивка вылетала на строчке с вызовом:
srv:listen(80, function(conn)

после того как в коде оформил wifi станцию. код заработал, но тоже кривовасто.

меня как программера бесит отсутствие отладки. даже сборка прошивки в режиме отладки, практически ничего не дает.

вот что значило out_of_memory в моем случае? только когда все заработало стало понятно что вызов ушел куда-то в подпространство. я понимаю что ошибки детские, но как их диагностировать?
Вы пишите на луа. верно?
Луа знаете?
документацию эту смотрели?
nodemcu/nodemcu-firmware
Overview - NodeMCU Documentation
там есть примеры.
 

vaz_mz

New member
читал. но там даже на заглавной странице пример неправильный для текущей(2.2.1) версии прошивки. там:
wifi.sta.config("ххх", "ххх") -- а это работает только в 1.5.2 версии

а должно быть:
station_cfg={}
station_cfg.ssid="ххх"
station_cfg.pwd="ххх"
wifi.sta.config(station_cfg);

и по отладке ничего внятного не нашел. вот как к примеру проверить существует ли мой вызов функции?

не подавилась ли она аргументом?

есть ли в этой версии прошивки аргумент который я передаю или синтаксис вызова поменялся?
 

nikolz

Well-known member
читал. но там даже на заглавной странице пример неправильный для текущей(2.2.1) версии прошивки. там:
wifi.sta.config("ххх", "ххх") -- а это работает только в 1.5.2 версии
а должно быть:
station_cfg={}
station_cfg.ssid="ххх"
station_cfg.pwd="ххх"
wifi.sta.config(station_cfg);
и по отладке ничего внятного не нашел. вот как к примеру проверить существует ли мой вызов функции?
не подавилась ли она аргументом?
есть ли в этой версии прошивки аргумент который я передаю или синтаксис вызова поменялся?
Там Все правильно, так как написано что это для версии 1.5.4 .
вообще-то версия SDK не влияет на вызов функций в луа.
Версия SDK влияет на процесс сборки VMLua.
Возможно Вы взяли самопальную сборку в которой функции переделаны
-------------------------------------
Поэтому ,есть два варианта:
1) поставить сборку от nodemcu и брать примеры из ее исходников
nodemcu/nodemcu-firmware.
2) Взять документацию (исходники) на ту версию , которую вы поставили.
--------------
То как Вы написали - это обращение в ардуине.
-----------------------
 

nikolz

Well-known member
что же касается отладки, то я Вас спросил
Вы знаете луа?
Если нет, то изучите и узнаете как и что отлаживать.
 

vaz_mz

New member
Если нет, то изучите и узнаете как и что отлаживать.
хорошо. в нашем случае(прошивка nodemcu)
вызов библиотечной функции это вызов кода на lua или кода
на Си?

какую оболочку использовать pcall или lua_pcall
и как в них обернуть к примеру вызов:

model, version, serial=am2320.setup()

или вызов

i2c.setup(id, sda, scl, i2c.SLOW)??
 

vaz_mz

New member
2) Взять документацию (исходники) на ту версию , которую вы поставили.
--------------
То как Вы написали - это обращение в ардуине.
-----------------------
в документации нет рабочих примеров по работе с am2320. тот код что есть в виде примеров в описании функций - не работает.

и указанный мной код относительно синтаксиса вызова wifi станции, взят из примеров nodemcu а не ардуины))
 

vaz_mz

New member
так. тема закрыта. был дохлый датчик.

но вопрос с отладкой для меня открытый. может знает кто что почитать по отладке кроме иерусалимски?
 
Сверху Снизу