2017-04-12 11 views
2

나는 ESP8266의 플래시 메모리에 코드를 성공적으로 저장할 수있는 문제를 발견했지만 시작하자 마자 "충분하지 않은 메모리"오류가 발생합니다.루아 스크립트는 실행 전에 메모리에로드됩니까?

코드 자체는 많은 개체를 생성하지 않습니다. 마치 코드 크기 그 자체가 문제인 것처럼 보입니다. 그래서 전체 코드가 실제로 실행되는 동안 일반 텍스트로 RAM에로드되는지 궁금합니다.

내 Esplorer에서 업로드 버튼 & 업로드를 시도했는데 많이 변경되지 않았습니다.
루아를 컴파일하면 실제로 코드 크기가 얼마나 감소합니까? 나는 적어도 모든 흰 공간 오버 헤드가 사라질 것이라고 생각했을 것이다.

답변

2

예, 스크립트는 실행되기 전에 RAM에로드됩니다.
Lua 소스가 일반 텍스트이면 Lua VM이 바이트 코드로 컴파일해야하므로 더 많은 양의 RAM이 필요합니다. 일반적으로, 루아 소스를 타겟 Lua VM 외부에서 미리 컴파일 할 수있다. http://www.eluaproject.net/doc/v0.8/en_using.html, "eLua 프로그램 크로스 컴파일"섹션
그리고 디버그 정보를 제외하고 컴파일하려고 할 것이다. luac-s 옵션을 참조하십시오.

2

우리는 또한 https://nodemcu.readthedocs.io/en/dev/en/upload/#compiling-lua-on-your-pc-for-uploading

에서 컴퓨터의 ESP8266 크로스 컴파일 루아에 장을 한 경우 combine node.stripdebug() with node.compile() (즉, 장치에 컴파일) 당신은 또한 응용 프로그램의 메모리 사용량을 줄일 수 있습니다.

당신이 다음 코드를로드 require("XXX")를 사용하는 경우이 자동으로 XXX.lc 다음 XXX.lua

소스를 검색합니다 : https://nodemcu.readthedocs.io/en/latest/en/lua-developer-faq/#how-do-i-reduce-the-size-of-my-compiled-code