• Система автоматизации с открытым исходным кодом на базе 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:
То, что у меня не модуль в понимании луа, который загружается и предоставляет интерфейс я понимаю, под словом модуль я подразумевал "файл, содержащий нужные функции", с модулями луа тоже посмотрел - сложно всё это, мне надо на раз, побольше функций напихать, а то в ОЗУ всё не лезет, а каждый раз модуль загружать и чистить за ним - тоже ОЗУ расходуется и иногда возникает ситуация, что её не хватает и всё падает - веб интерфейс на аяксах часто дергает вебсервер.
 
Сверху Снизу