Mit der cloud compiling website erstellte ich eine benutzerdefinierte NodeMCU Firmware, die eine Menge von Modulen hat. So viele, dass die Firmware selbst fast 700 KB groß ist. Ich verwende normalerweise nur bis zu 5 Module für ein einzelnes Projekt, also frage ich mich, ob die Einbeziehung aller anderen Module in die Firmware einen merklichen negativen Einfluss auf die RAM-Nutzung hat.Hat die Kompilierung von NodeMCU mit vielen Modulen einen Einfluss auf die Speichernutzung?
Antwort
Es gibt eine ausgezeichnete Erklärung der ESP8266-Speicherabbildung (und anderer interessanter Bits) unter https://www.kickstarter.com/projects/214379695/micropython-on-the-esp8266-beautifully-easy-iot/posts/1501224. Außerdem hast du eine tolle Antwort als Kommentar.
Jedes Modul, das in die Binärdatei gebrannt wird, verbraucht Speicher, nur weil es "da ist". Wenn Sie die Auswirkungen eines einzelnen Moduls auf den verfügbaren Heap messen möchten, müssen Sie zwei Binärdateien erstellen, einen mit und einen ohne dieses. Sie würden beide blinken und das Delta der laufenden node.heap()
direkt nach dem Start berechnen.
Hat die Kompilierung von NodeMCU mit vielen Modulen einen Einfluss auf die Speichernutzung?
Ja, es ist definitiv so, wie Sie es bemerkt haben.
Ich verwende in der Regel nur für ein einzelnes Projekt zu 5 Modulen bis
Deshalb haben wir einen anderen Satz zu verwenden, empfehlen von Modulen für jedes Projekt („minimalistisch“ lesen). Das Schöne an der NodeMCU-Firmware ist, dass Sie dies nur einmal tun müssen, im Gegensatz zu z. Arduino, nach dem Skripte oder sogar einzelne Funktionen in'n out ausgetauscht werden, ist super schnell.
Ich schlage vor, Sie sehen auch https://nodemcu.readthedocs.io/en/dev/en/lua-developer-faq/#techniques-for-reducing-ram-and-spiffs-footprint. Eine Generalüberholung ist in der Herstellung bei https://github.com/nodemcu/nodemcu-firmware/pull/1899.
- 1. Hat die Benennung einer Variablen Einfluss auf die Speichernutzung einer Anwendung?
- 2. OCAMLRUNPARAM hat keinen Einfluss auf die Stack-Größe
- 3. malloc hat keinen Einfluss auf die RAM-Nutzung, warum?
- 4. statische lib mit vielen Modulen
- 5. Einstellung Auswahlwert hat keinen Einfluss auf die Tastaturnutzung
- 6. Isoliert Umfang Eigentum hat keinen Einfluss auf die Mutter
- 7. DataTemplate x: Shared = false hat keinen Einfluss auf die Ansicht
- 8. . Htaccess Mode Rewrite hat keinen Einfluss auf die Seite URL
- 9. Welchen Einfluss hat die Lambda-Sektion auf dieses Listenverständnis?
- 10. Hat die Erhöhung von Warnungen in JavascriptCore während der Kompilierung einen erheblichen Startup-Overhead?
- 11. Welchen Einfluss hat HOLDLOCK auf UPDLOCK?
- 12. Golang1.8.1: TimeoutHandler hat keinen Einfluss auf Multiplexer
- 13. Verwenden von Set hat keinen Einfluss auf die Ansicht mit Datenbindung
- 14. Android Thema hat keinen Einfluss auf
- 15. Einfluss der Kachelbildgröße auf die Seitenrenderinggeschwindigkeit
- 16. Ändern von lokalen hat keinen Einfluss auf f: convertDateTime
- 17. Einfluss von Skolemtiefe auf die Überprüfung von Formeln in Alloy
- 18. Opcode Cache Auswirkungen auf die Speichernutzung
- 19. Welchen Einfluss hat die H.264-GOV-Länge auf das Maximum (oder die vergangene Spezifikationsgrenze)?
- 20. Welchen Einfluss hat die Option -d64 auf den residenten Speicherverbrauch von Sun JVM?
- 21. Hat die Reihenfolge in Scala für Schleife Einfluss
- 22. Broker Nachrichten, die mit NodeMCU wieder
- 23. Sieb von Eratosthenes Pthread Implementierung: Thread-Nummer hat keinen Einfluss auf die Rechenzeit
- 24. Kompilieren von Code für NodeMCU mit Esplorer
- 25. Reduziert "readonly" (C#) die Speichernutzung?
- 26. Der TypeScript-Compiler hat keine Dateien für die Kompilierung erhalten, daher wird die Kompilierung übersprungen
- 27. Erhöht sich die Speichernutzung mit langen Klassennamen?
- 28. Begrenzung die gesamte Speichernutzung von PostgreSQL
- 29. Das Inkrementieren einer Integer-Variablen hat keinen Einfluss auf andere Objekte, die auf dasselbe Objekt verweisen.
- 30. URL-Monitor erhöht die Speichernutzung
RAM-Nutzung und Flash-Nutzung sind zwei verschiedene Dinge. Ihre Firmware ist im Flash gespeichert und Teile davon können vorübergehend in IRAM (Befehls-RAM, wie in DRAM, Daten-RAM) geladen werden. Wenn Sie das ESP-12F verwenden, stehen Ihnen 4 MB Flash-Speicher für Ihre Firmware zur Verfügung. Aber Code aus Flash holen kann langsam sein, also der IRAM (64 KiB groß). Alles andere (Heap & Stack) befindet sich im DRAM (96 KiB). Sie können die dynamische Speicherauslastung in DRAM nicht aus der Größe Ihrer Firmware (die Flash und Teile von IRAM belegt) ableiten, Sie müssen wissen, welche Objekte das Modul erstellt oder statisch auf dem Stack zuweist. –
Okay, wenn ich zum Beispiel das 'tmr' Modul in meinem Build habe, dann kann ich' tmr.now() 'jederzeit einfach aufrufen. Ich würde also annehmen, dass das tmr-Objekt/die Klasse immer in den RAM geladen wird. Aber vielleicht liege ich falsch und die Firmware lädt nur das Modul, wenn ich versuche, auf tmr zuzugreifen. Ich weiß nicht .. Nun, der Grund, warum ich diese Frage gestellt habe, ist, weil es scheint, dass die Firmware selbst fast den gesamten RAM belegt (sobald mein Lua-Skript länger als etwa 300 Zeilen ist, wird das Skript nicht mehr ausgeführt und Ich bekomme stattdessen Speicherfehler). – Forivin