使用cloud compiling website我創建了一個定製的NodeMCU固件,其中包含很多模塊。很多固件本身的容量幾乎都是700KB。我通常只爲一個項目使用多達5個模塊,所以我想知道在固件中包含所有其他模塊是否對RAM使用有明顯的負面影響。使用大量模塊編譯NodeMCU是否會影響內存使用?
1
A
回答
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-footprint。 https://github.com/nodemcu/nodemcu-firmware/pull/1899正在進行重大改革。
相關問題
- 1. CreateThread是否會影響VirtualAlloc的使用?
- 2. 使用require()是否會影響性能?
- 3. C#文件的結構是否會影響編譯的內容?
- 4. GD庫是否使用大量內存?
- 5. 編譯模塊的數量是否影響了Linux內核在RAM中的大小?
- 6. Angular - 注入模塊的數量是否會影響性能?
- 7. 調用__device__函數是否會影響CUDA中使用的寄存器數量?
- 8. 使用Plovr編譯模塊
- 9. 是否重複使用Android Shared Preference存儲會影響性能?
- 10. 使用Esplorer編譯NodeMCU代碼
- 11. Ruby數組中的對象的大小是否會影響數組本身的內存使用量?
- 12. 在Android中使用單例模式會如何影響內存使用?
- 13. 使用vmalloc爲內核模塊分配大量內存
- 14. 對象屬性名稱的長度是否會影響內存使用情況?
- 15. 使用AJAX是否會增加PHP的內存使用量?
- 16. 額外使用語句會影響編譯時間嗎?
- 17. 大班是否會影響表現?
- 18. 即使我不使用事務,死鎖是否會影響我?
- 19. 操作碼緩存對內存使用量的影響
- 20. 變量是否會影響性能?
- 21. 是否圍繞功能編譯影響內部函數
- 22. Docker --rm = true是否會影響緩存?
- 23. 分配的內存是否使模塊被內核認爲是「已使用」
- 24. 應用程序大小是否影響啓動速度和內存大小
- 25. 使用名稱空間會影響性能還是編譯時間?
- 26. 編譯器的編譯可能會影響編譯的程序?
- 27. 使用magic_quotes()會影響mysql_real_escape_string()的使用
- 28. 具有部分代碼的較大二進制文件是否會影響二級CPU內存的使用?
- 29. 進口模塊的內存影響和範圍/使用壽命python
- 30. 在Maven中,模塊是否受存儲庫的updatePolicy影響?
內存使用情況和閃存使用情況是兩回事。您的固件保存在閃存中,其中的一部分可能會臨時加載到IRAM(指令RAM,與DRAM,數據RAM一起使用)。使用ESP-12F時,您有4 MB閃存可用於您的固件。但是從閃存中獲取代碼可能會很慢,因此IRAM(64 KiB大)。其他一切(堆棧和堆棧)都在DRAM(96 KiB)中。您不能從固件的大小(佔用閃存和IRAM的一部分)推斷DRAM中的動態內存使用情況,您必須知道模塊在堆棧上創建或靜態分配的對象。 –
好的,如果我在我的版本中包含'tmr'模塊,那麼我可以在任何時候簡單地調用'tmr.now()'。所以我會假設tmr對象/類總是加載到RAM中。但是也許我錯了,一旦我嘗試訪問tmr,固件只會加載模塊。我不知道......我之所以問這個問題是因爲固件本身幾乎佔用了所有內存(一旦我的Lua腳本長於300行左右,腳本就不會再執行了,我得到內存錯誤)。 – Forivin