ESP8266 - 是否可以仅从C语言中运行Lua(而不是完整的NodeMCU环境)?

我正在使用ESP8266,并且不想在整个项目中使用Lua,我只想运行一些从WiFi / SD卡接收到的Lua代码片段。我需要启动Lua环境并运行脚本,然后最终调用一些用于低级任务的本地函数。换句话说,我只想将Lua作为简单的脚本语言(正如它的预期)来实现某些动态行为。这是可能的吗?是否有针对Arduino的lualib版本?

谢谢!

点赞
用户6472546
用户6472546

你可以在例如extlibs/文件夹中嵌入 Lua 并在编译程序时链接它。 现有的 Lua 二进制文件,但自己构建它是容易和更好的(因为它是多平台的)。

2017-03-21 12:42:19
用户7066323
用户7066323

ESP8266有高达4MB的程序存储空间。理论上,根据数据手册的规定,你可以获得高达16MB的存储空间。

就我所记得的,编译Lua的合并版本(所有源代码都在一个文件中)占用不到100KB的空间。

因此,你可以编译Lua库并在esp8266上按需使用,甚至可以使用Arduino IDE。

但是这样做会得到裸露的Lua…没有漂亮的库控制Wifi、串行、SD卡、端口等功能。你需要用C语言提供这些功能,或按需使用NodeMCU代码。

你可以尝试使用LuaJIT,并且可以直接从Lua中访问C代码,从而省去编写库的需要。我不知道该如何将其编译到Esp8266上,或是否有人在之前尝试过,但你可以尝试“为科学而做”,并告诉我们结果如何。

2017-03-21 16:27:50
用户5085876
用户5085876

好的,我知道两个答案都告诉了我可以将代码嵌入到我的项目中,然而,我发现我需要进行一些小的更改。我提供了一个可以工作的示例项目 here,并且需要进行以下更改:

  • 启用了标志 LUA_32BITSLUA_USE_LONGJMP(C 异常处理)
  • 排除了以下库:ioospackagecoroutine
  • 从 C API 中删除了以下函数:luaL_fileresultluaL_execresultluaL_loadfileluaL_loadfilexluaL_dofileluaB_loadfileluaB_dofile
  • 将 Lua 输出消息重定向到串行接口,查看 tinylua.htinylua.cpplauxlib.h 以更改此行为

希望这能有所帮助!

2017-03-23 09:28:25