【发布时间】:2017-09-08 07:23:16
【问题描述】:
使用cloud compiling website,我创建了一个包含很多模块的自定义 NodeMCU 固件。如此之多以至于固件本身的大小几乎是 700KB。对于一个项目,我通常最多只使用 5 个模块,所以我想知道固件中包含所有其他模块是否会对 RAM 使用产生明显的负面影响。
【问题讨论】:
-
RAM 使用和闪存使用是两个不同的东西。您的固件保存在闪存中,其中的一部分可能会临时加载到 IRAM(指令 RAM,与 DRAM 相对,数据 RAM)中。使用 ESP-12F 时,您有 4 MB 的闪存可供固件使用。但是从闪存中获取代码可能很慢,因此 IRAM(64 KiB 大)。其他所有内容(堆和堆栈)都在 DRAM (96 KiB) 中。您无法从固件的大小(占用闪存和部分 IRAM)推断 DRAM 中的动态内存使用情况,您必须知道模块在堆栈上创建或静态分配的对象。
-
好的,例如,如果我在构建中包含
tmr模块,那么我可以随时调用tmr.now()。所以我会假设 tmr 对象/类总是加载到 RAM 中。但也许我错了,固件只有在我尝试访问 tmr 时才会加载模块。我不知道.. 好吧,我问这个问题的原因是因为固件本身似乎占据了几乎所有的 RAM(一旦我的 Lua 脚本超过 300 行左右,脚本就不再执行了,并且我得到了内存错误)。
标签: memory lua ram esp8266 nodemcu