2017-04-12 8 views
1

cloud compiling website을 사용하여 모듈이 많은 사용자 정의 NodeMCU 펌웨어를 만들었습니다. 펌웨어 자체가 거의 700KB에 이르는 크기입니다. 나는 일반적으로 하나의 프로젝트에 최대 5 개의 모듈만을 사용하므로, 펌웨어의 다른 모든 모듈을 RAM에 포함 시키면 RAM 사용에 현저한 부작용이 있는지 궁금합니다.많은 모듈을 가진 NodeMCU를 컴파일하는 것이 메모리 사용에 영향을 미칩니 까?

+1

RAM 사용과 플래시 사용은 서로 다른 두 가지입니다. 펌웨어는 플래시에 저장되며 플래시 메모리의 일부는 IRAM (DRAM, 데이터 RAM과 반대되는 명령어 RAM)에 임시로로드 될 수 있습니다. ESP-12F를 사용하면 4MB의 플래시 메모리를 사용할 수 있습니다. 그러나 플래시에서 코드를 가져 오는 속도가 느릴 수 있으므로 IRAM (64KB 큰 크기). 그 밖의 모든 것 (heap & stack)은 DRAM (96 KiB)에 있습니다. 플래시의 크기와 IRAM의 부분을 차지하는 DRAM의 동적 메모리 사용량을 추론 할 수 없기 때문에 모듈이 어떤 객체를 생성하는지 또는 스택에 정적으로 할당 하는지를 알아야합니다. –

+0

좋아요. 예를 들어 빌드에서'tmr' 모듈을 포함한다면 원하는 때에 언제든지'tmr.now() '를 호출 할 수 있습니다. 그래서 나는 tmr 객체/클래스가 항상 RAM에로드된다고 가정합니다. 하지만 어쩌면 틀렸어. tmr에 액세스하려고하면 펌웨어가 모듈을로드 만합니다. 글쎄, 내가 왜이 질문을 한 이유는 펌웨어 자체가 거의 모든 RAM을 차지하는 것처럼 보이기 때문이다. (일단 루아 스크립트가 약 300 줄보다 길면 스크립트는 더 이상 실행되지 않고 대신 메모리 오류가 발생합니다.) – Forivin

답변

2

https://www.kickstarter.com/projects/214379695/micropython-on-the-esp8266-beautifully-easy-iot/posts/1501224에는 ESP8266 메모리 맵 (및 기타 흥미로운 비트)에 대한 훌륭한 설명이 있습니다. 게다가, 당신은 코멘트로서 훌륭한 대답을 얻었습니다.

바이너리로 구워진 모든 모듈은 "있는 것"으로 메모리를 소비합니다. 하나의 모듈이 사용 가능한 힙에 미치는 영향을 측정하려면 두 개의 바이너리를 작성해야합니다. 하나는 모듈이 있고 다른 하나는 모듈이없는 것입니다. 둘 다 플래시하고 시작 직후 node.heap() 실행 델타를 계산합니다.

많은 모듈을 가진 NodeMCU를 컴파일하는 것이 메모리 사용에 영향을 줍니까?

예, 분명히 눈치 챘습니다.

나는 보통 모든 프로젝트에 대한 모듈 ("최소한의"를 읽어) 우리가 다른 세트를 사용하는 것이 좋습니다 이유 하나의 프로젝트

5 개 모듈을 사용합니다. NodeMCU 펌웨어의 장점은 한 번만 수행해야한다는 것입니다. Arduino, 그 후 스왑 스크립트 나 심지어 개별 기능이 빠져 나간 것은 매우 빠릅니다.

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에 있습니다.