我偶然发现了一个问题,我可以成功地将我的代码保存到 ESP8266 的闪存中,但是一旦启动,我就会收到“内存不足”错误。
代码本身不会创建很多对象。在我看来,代码大小本身就是问题所在。所以我想知道完整的代码是否真的会在执行过程中以纯文本形式加载到 RAM 中。
我还尝试了我的 Esplorer 中的编译和上传按钮,它似乎没有太大变化。
编译 Lua 实际上减少了多少代码大小?我原以为至少所有的空白开销都会消失。
是的,脚本在执行之前加载到 ram 中。
如果 Lua 源是纯文本,则需要更多内存,因为 Lua VM 必须将其编译成字节码。通常,您可以在目标 Lua VM 之外预编译 Lua 源代码,请参阅http://www.eluaproject.net/doc/v0.8/en_using.html,“交叉编译您的 eLua 程序”部分
,您需要编译删除了调试信息。见-s
选项luac
。
我们有一章关于在您的计算机上为 ESP8266 交叉编译 Lua,位于https://nodemcu.readthedocs.io/en/dev/en/upload/#compiling-lua-on-your-pc-for-uploading
此外,如果您结合node.stripdebug()
使用node.compile()
(即在设备上编译),您还可以减少应用程序的内存占用。
如果您使用
require("XXX")
加载代码,那么这将自动搜索XXX.lc
thenXXX.lua