我在使用 duinotech XC-3800 的 ESP32 芯片上使用 ESP IDF 测试了运行裸机代码,并在图像大小方面获得了以下结果。
分析 ESP32 的二进制大小
文件夹结构
- 温度/
- 主要的/
- CMakeLists.txt
- 主程序
- CMakeLists.txt
- 主要的/
文件内容
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)
主>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
至少 145KB 的样板代码只是为了获得一个空的主运行。
猜测
我怀疑 145KB 是由许多库组成的,无论您是否使用它们,这些库总是加载到芯片上。其中一些必须是FreeRTOS
,WiFi
等HTTP
。
我们能否以某种方式降低这个尺寸并仅加载操作所需的最低限度?