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

Lua Flash Store

EvgenyZ

New member
Привет всем.
Не могу разобраться как пользоваться LFS в NodeMCU, не достаточно информации. Прошу поделится ссылками на обучающие материалы, желательно с примерами.
 

dmitrij2023

New member
Привет всем.
Не могу разобраться как пользоваться LFS в NodeMCU, не достаточно информации. Прошу поделится ссылками на обучающие материалы, желательно с примерами.
Добрый день.
Тоже возникла необходимость в LFS. Из чтения мануалов смог понять только то, что при компиляции прошивки необходимо указывать размер будущего LFS. Чем создавать образ на ПК и как его инициализировать после загрузки понять не могу. Скажите, пожалуйста, что Вам удалось сделать в этом направлении?
 

EvgenyZ

New member
Добрый день.
Тоже возникла необходимость в LFS. Из чтения мануалов смог понять только то, что при компиляции прошивки необходимо указывать размер будущего LFS. Чем создавать образ на ПК и как его инициализировать после загрузки понять не могу. Скажите, пожалуйста, что Вам удалось сделать в этом направлении?
Я нашел на своем компе файл с текстом с какого-то форума по LFS, который я когда-то давно сохранял(прикреплю сюда). Но информация в нем немного устарела, судя по всему код в файле _init.lua должен быть другим. Далее держа уже в голове информацию из форума почитал мануал по этой ссылке https://nodemcu.readthedocs.io/en/dev/getting-started/#build-luaccross , вроде стало понятно и ссылка на github с кодом для _init.lua там есть. Пока не опробовал это все, но думаю получится.
И еще, веб-сервис компиляции не работает, поэтому нужно качать luac.cros и компилировать локально на своем компе.
 

Вложения

  • 8.9 KB Просмотры: 4

dmitrij2023

New member
Нашел вчера гитхаб с этим файлом:
Меня в заблуждение ввело название luac.cross без расширения. Это обычный экзешник exe, который компилирует скрипт lua под nodemcu (кросс-компилятор, что и следует из названия).
Разобрался как работает, может кому надо, сэкономят время:
1. Пишем модуль lua. Тут самое сложное, как я понял, модуль нужно писать в формате модулей загружаемых через require, т.е. они возвращают таблицу, которая содержит функции и т.п. тут я не разбираюсь, никогда надобности не было. В общем случае в тело модуля можно вписать весь вызываемый код, параметры передавать через глобальные переменные.
2. Кладем этот модуль в папку с luac.cross.exe и выполняем в каталоге luac.cross.exe -o lfs.img -f m.lua, где lfs.img - имя результирующего образа; m.lua - написанный модуль, можно задавать по маске *.lua - в образ будут включены все файлы lua из каталога.
3. Полученный образ загружаем в контроллер.
4. Выполняем в контроллере один раз после загрузки модуля node.LFS.reload("lfs.img") контроллер перезагружается.
5. Получаем модуль как функцию k=node.LFS.get("m") где k - переменная, в которую будет помещена ссылка на модуль, в ней он будет записан как функция, m - имя модуля (файла) lua которое было передано компилятору.
6. Вызываем этот модуль-функцию по мере необходимости k()
Содержимое моего модуля m:
C-like:
function func2()
    print("From func2.")
end

function func3()
    print("From func3.")
end

print("From module.")
При вызове k() выдает "From module." Вызывать функции из него я пока не умею :(
 

serg3295

New member
В LFS могут располагаться не только модули, но также и обычные скрипты.
Логичнее вызывать сначала _init, так как в нём кроме всего прочего устанавливается порядок загрузки скриптов в package.loaders и перегружается функция dofile (полезно при отладке).
То, что у вас в примере - это не модуль, а текст скрипта и вызывать его можно без присваивания переменной node.LFS.get("m")()

Если вы только начинаете разбираться с LFS, то взгляните на мои скрипты для работы с LFS и загрузки в модуль. Может окажется полезным. Ссылка на github.
 

dmitrij2023

New member
Спасибо. Я начал пробовать с вписыванием переменных в _G, в принципе тоже работает, функции вызываются, попробую как у Вас.
Настройки visual studio code понравились, надо тоже с ним разобраться, а то всё notepad++ и ESPlorer.
upd:
То, что у меня не модуль в понимании луа, который загружается и предоставляет интерфейс я понимаю, под словом модуль я подразумевал "файл, содержащий нужные функции", с модулями луа тоже посмотрел - сложно всё это, мне надо на раз, побольше функций напихать, а то в ОЗУ всё не лезет, а каждый раз модуль загружать и чистить за ним - тоже ОЗУ расходуется и иногда возникает ситуация, что её не хватает и всё падает - веб интерфейс на аяксах часто дергает вебсервер.
 
Сверху Снизу