2017-04-12 3 views
1

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?

+1

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. –

+0

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

Antwort

2

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.

Verwandte Themen