2017-04-12 40 views
1

使用cloud compiling website我創建了一個定製的NodeMCU固件,其中包含很多模塊。很多固件本身的容量幾乎都是700KB。我通常只爲一個項目使用多達5個模塊,所以我想知道在固件中包含所有其他模塊是否對RAM使用有明顯的負面影響。使用大量模塊編譯NodeMCU是否會影響內存使用?

+1

內存使用情況和閃存使用情況是兩回事。您的固件保存在閃存中,其中的一部分可能會臨時加載到IRAM(指令RAM,與DRAM,數據RAM一起使用)。使用ESP-12F時,您有4 MB閃存可用於您的固件。但是從閃存中獲取代碼可能會很慢,因此IRAM(64 KiB大)。其他一切(堆棧和堆棧)都在DRAM(96 KiB)中。您不能從固件的大小(佔用閃存和IRAM的一部分)推斷DRAM中的動態內存使用情況,您必須知道模塊在堆棧上創建或靜態分配的對象。 –

+0

好的,如果我在我的版本中包含'tmr'模塊,那麼我可以在任何時候簡單地調用'tmr.now()'。所以我會假設tmr對象/類總是加載到RAM中。但是也許我錯了,一旦我嘗試訪問tmr,固件只會加載模塊。我不知道......我之所以問這個問題是因爲固件本身幾乎佔用了所有內存(一旦我的Lua腳本長於300行左右,腳本就不會再執行了,我得到內存錯誤)。 – Forivin

回答

2

https://www.kickstarter.com/projects/214379695/micropython-on-the-esp8266-beautifully-easy-iot/posts/1501224有ESP8266內存映射(和其他有趣的位)的一個很好的解釋。此外,你作爲評論得到了一個很好的答案。

烘焙到二進制文件中的每個模塊都會通過「在那裏」而消耗內存。如果你想測量單個模塊對可用堆的影響,你必須建立兩個二進制文件,一個和一個沒有該模塊。你可以同時閃爍並在開始後立即計算運行node.heap()的增量。

使用大量模塊編譯NodeMCU是否會影響內存使用?

是的,它絕對如你所見。

我一般最多隻能使用5個模塊爲一個單一的項目

這就是爲什麼我們建議使用一組不同的每一個項目的模塊(讀「最小集合」)。 NodeMCU固件的美妙之處在於,您只需執行一次操作,與例如Arduino,之後交換腳本甚至是個人功能都非常快。

我建議你也看看https://nodemcu.readthedocs.io/en/dev/en/lua-developer-faq/#techniques-for-reducing-ram-and-spiffs-footprinthttps://github.com/nodemcu/nodemcu-firmware/pull/1899正在進行重大改革。

相關問題