ESP32显示图片动画问题
前言
我有20个动画要显示,但是ESP32资源可能不够
硬件
使用ESP32-S3-WROOM-1 N16R8 模组
-内置ESP32-S3 系列芯片,Xtensa® 双核 32 位LX7 微处理器(支持单精度浮点运算单元),支持高达240MHz的时钟频率
- 384 KBROM
- 512 KB SRAM
- 16 KB RTCSRAM
- 16M Flash
- 8M SPI RAM
当前程序编译信息
我的程序分区表
# ESP-IDF Partition Table
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x4000,
otadata, data, ota, 0xd000, 0x2000,
phy_init, data, phy, 0xf000, 0x1000,
model, data, spiffs, 0x10000, 0xF0000,
ota_0, app, ota_0, 0x100000, 6M,
ota_1, app, ota_1, 0x700000, 6M,
使用idf.py size查看内存使用
Memory Type Usage Summary
+--------------------------------------------------------------------------------+
| Memory Type/Section | Used [bytes] | Used [%] | Remain [bytes] | Total [bytes] |
|---------------------+--------------+----------+----------------+---------------|
Total image size: 4745384 bytes (.bin may be padded larger)
| Flash Data | 2809184 | 8.37 | 30745216 | 33554400 |
| .rodata | 2808928 | 8.37 | | |
| .appdesc | 256 | 0.0 | | |
| Flash Code | 1801010 | 21.47 | 6587566 | 8388576 |
| .text | 1801010 | 21.47 | | |
| DIRAM | 164015 | 47.99 | 177745 | 341760 |
| .text | 100243 | 29.33 | | |
| .data | 33632 | 9.84 | | |
| .bss | 29008 | 8.49 | | |
| .vectors | 1027 | 0.3 | | |
| RTC FAST | 328 | 4.0 | 7864 | 8192 |
| .text | 256 | 3.12 | | |
| .rtc_reserved | 40 | 0.49 | | |
| .force_fast | 32 | 0.39 | | |
+--------------------------------------------------------------------------------+
看不懂,total flahs怎么这么大,超出了16MB
0x1796e0 bytes (25%) free
Total image size: 4745384 bytes (.bin may be padded larger)
细致需求
依据这两句话,app flash还剩下1M多点。
但是,我有20个动画要显示,目前想了几种方式
1,显示lottie格式动画,一个lottie动画只有几十K,但是现在一使用就崩溃,因为别的应用也占用了很多RAM
2,显示图片动画,一张图片十几K,一个动画估计1M,所以只能把图片放到SD卡里面,显示的时候加载,但不知道RAM能否满足,完全一无所知
运行现象
我写了一个程序检测程序运行过程中的RAM
size_t ram_left = heap_caps_get_free_size(MALLOC_CAP_INTERNAL);
ESP_LOGW(TAG, "Internal ram left = %.2f KB, before init", (float)ram_left / 1024);
ram_left = heap_caps_get_free_size(MALLOC_CAP_SPIRAM);
ESP_LOGW(TAG, "SPI ram left = %.2f KB, before init", (float)ram_left / 1024);
vTaskDelay(pdMS_TO_TICKS(5000)); // 每 5 秒打印一次

浙公网安备 33010602011771号