Я протестировал выполнение кода «голые кости» с использованием ESP IDF на чипе ESP32 с использованием Duinotech XC-3800 и получил следующие результаты в отношении размера изображения.
Анализ двоичного размера для ESP32
Структура папки
Содержимое файла
CMakeLists.txt
# The following lines of boilerplate have to be in your project's
# CMakeLists in this exact order for cmake to work correctly
cmake_minimum_required(VERSION 3.5)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(temp)
main> CMakeLists.txt
idf_component_register(SRCS "main.c"
INCLUDE_DIRS "")
Тест 1 main> main.c
#include <stdio.h>
void app_main(void) {
printf("Hello world!\n");
for (int i = 10; i >= 0; i--) {
printf("Restarting in %d seconds...\n", i);
}
printf("Restarting now.\n");
fflush(stdout);
}
Тест 2 main> main.c
#include <stdio.h>
void app_main(void) { printf("Hello world!\n"); }
Тест 3 main> main.c
void app_main(void) {}
Сравнение размеров
Получено при запуске idf_size.py build/temp.map
Тест 1
Total sizes:
DRAM .data size: 8320 bytes
DRAM .bss size: 4072 bytes
Used static DRAM: 12392 bytes ( 168344 available, 6.9% used)
Used static IRAM: 38804 bytes ( 92268 available, 29.6% used)
Flash code: 75408 bytes
Flash rodata: 23844 bytes
Total image size:~ 146376 bytes (.bin may be padded larger)
Тест 2
Total sizes:
DRAM .data size: 8320 bytes
DRAM .bss size: 4072 bytes
Used static DRAM: 12392 bytes ( 168344 available, 6.9% used)
Used static IRAM: 38804 bytes ( 92268 available, 29.6% used)
Flash code: 75240 bytes
Flash rodata: 23796 bytes
Total image size:~ 146160 bytes (.bin may be padded larger)
Тест 3
Total sizes:
DRAM .data size: 8320 bytes
DRAM .bss size: 4072 bytes
Used static DRAM: 12392 bytes ( 168344 available, 6.9% used)
Used static IRAM: 38804 bytes ( 92268 available, 29.6% used)
Flash code: 75004 bytes
Flash rodata: 23780 bytes
Total image size:~ 145908 bytes (.bin may be padded larger)
Анализ
Размер для кода, полученного при запуске stat --format="%s" main/main.c
Все размеры указаны в байтах
Test No. | Code | Image | Flash Code | Flash rodata
-------- | -----| ------ | ---------- | ------------
1 | 207 | 146376 | 75408 | 23844
2 | 70 | 146160 | 75240 | 23796
3 | 43 | 145908 | 75004 | 23780
Не менее 145 КБ кода котельной пластины только для полученияпустой основной прогон.
Предположение
Я подозреваю, что 145KB сделан Up из множества библиотек, которые всегда загружаются в чип независимо от того, используете вы их или нет. Некоторые из них должны быть FreeRTOS
, WiFi
, HTTP
и т. Д.
Можем ли мы каким-то образом уменьшить этот размер и загрузить только необходимый минимум для работы?