2017-04-12 9 views
1

cloud compiling websiteを使用して、多くのモジュールを持つカスタムNodeMCUファームウェアを作成しました。ファームウェア自体のサイズは約700KBです。私は通常、1つのプロジェクトに最大5つのモジュールしか使用しないので、ファームウェアに他のすべてのモジュールを含めるとRAMの使用に著しい悪影響が及ぼされるかどうかは疑問です。多くのモジュールを含むNodeMCUをコンパイルすると、メモリ使用量に影響がありますか?

+1

RAMの使用方法とフラッシュの使用方法は2種類あります。ファームウェアはフラッシュに保存され、その一部はIRAM(DRAM、データRAMに対抗する命令RAM)に一時的にロードされます。 ESP-12Fを使用する場合は、ファームウェア用に4MBのフラッシュメモリを使用できます。しかし、フラッシュからコードをフェッチするのが遅く、IRAM(64 KiB big)が遅くなる可能性があります。他のもの(ヒープ&スタック)はDRAM(96 KiB)にあります。ファームウェア(フラッシュとIRAMの一部を占める)のサイズからDRAMのダイナミックメモリ使用量を推測することはできません。モジュールがどのオブジェクトを作成するか、スタックに静的に割り当てるオブジェクトを知る必要があります。 –

+0

さて、私のビルドに 'tmr'モジュールを含めておけば、いつでも' tmr.now() 'を呼び出すことができます。だから私は、tmrオブジェクト/クラスは常にRAMにロードされると仮定します。しかし、おそらく私は間違っていて、ファームウェアはtmrにアクセスしようとするとモジュールをロードするだけです。まあ、私がこの質問をしたのは、ファームウェア自体がほぼすべてのRAMを占有しているように思えるからです(私のLuaスクリプトが約300行以上になると、スクリプトはもう実行されません。代わりにメモリエラーが発生する)。 – Forivin

答えて

2

https://www.kickstarter.com/projects/214379695/micropython-on-the-esp8266-beautifully-easy-iot/posts/1501224には、ESP8266のメモリマップ(および他の興味深いビット)の優れた説明があります。さらに、あなたはコメントとして素晴らしい答えを得ました。

バイナリに焼き付けられたすべてのモジュールは、「存在する」だけでメモリを消費します。使用可能なヒープ上に1つのモジュールが持つ影響を測定したい場合は、2つのバイナリを作成する必要があります。両方とも点滅し、開始直後にnode.heap()を実行するデルタを計算します。

多くのモジュールを含むNodeMCUをコンパイルすると、メモリ使用量に影響がありますか?

ありがとうございました。私は通常のみ、我々はすべてのプロジェクトのためのモジュールの異なるセットを(「最小限のセットを」読み取り)を使用することをお勧めする理由だ単一のプロジェクト

のために5つのモジュールまで使用

。 NodeMCUファームウェアの美しさは、これを一度行うだけで済みます。 Arduino、その後、スワップスクリプトや個々の関数in'n outは超高速です。

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です。

関連する問題