2017-04-12 4 views
2

Je suis tombé sur un problème où je suis en mesure d'enregistrer mon code sur la mémoire flash d'un ESP8266 avec succès, mais dès qu'il commence, je reçois une erreur "pas assez de mémoire".Les scripts Lua sont-ils chargés dans la mémoire avant l'exécution?

Le code lui-même ne crée pas beaucoup d'objets. Il me semble que la taille du code en soi est le problème. Donc je me demandais si le code complet serait effectivement chargé dans la RAM en texte brut pendant l'exécution.

J'ai également essayé de compiler le bouton & de téléchargement dans mon Esplorer, qui n'a pas semblé changer beaucoup.
De combien la compilation de Lua réduit-elle réellement la taille du code? J'aurais pensé qu'au moins tous les frais généraux de l'espace blanc seraient partis.

Répondre

2

Oui, le script est chargé dans le RAM avant d'être exécuté.
Il faut plus de RAM si Lua source est en texte brut, car Lua VM devra le compiler en bytecode. En général, vous pouvez précompiler la source Lua en dehors de la machine virtuelle Lua cible, voir http://www.eluaproject.net/doc/v0.8/en_using.html, section "Compilation croisée de vos programmes eLua"
Et vous voudrez compiler avec les informations de débogage retirées. Voir l'option -s de luac.

2

Nous avons un chapitre sur Lua compilation croisée pour le ESP8266 sur votre ordinateur à https://nodemcu.readthedocs.io/en/dev/en/upload/#compiling-lua-on-your-pc-for-uploading

De plus, si vous combine node.stripdebug() with node.compile() (à savoir la compilation sur l'appareil), vous pouvez également réduire l'empreinte mémoire de votre application.

si vous utilisez require("XXX") pour charger votre code, puis cette recherche automatiquement XXX.lc puis XXX.lua

Source: https://nodemcu.readthedocs.io/en/latest/en/lua-developer-faq/#how-do-i-reduce-the-size-of-my-compiled-code