尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

ESP32 零拷贝加载 Lottie 动画:esp_mmap_assets 闪存资源映射实战

ESP32 零拷贝加载 Lottie 动画:esp_mmap_assets 闪存资源映射实战
📅 发布时间:2026/7/30 22:25:07

在 ESP32 这类嵌入式设备上,资源文件(图片、动画等)通常存储在 Flash 中。传统方式需要通过 SPIFFS 文件系统读取,存在以下问题:

  • 需要额外的文件系统开销
  • 读取效率较低
  • 资源与代码耦合

esp_mmap_assets 是乐鑫官方提供的一个 资源打包与内存映射组件,cmake文件中使用该组件封装好的spiffs_create_partition_assets函数,把资源文件(图片、字体、JSON 等)存到FLASH分区中;通过 内存映射 (mmap) 技术,将 Flash 中的资源文件高效地映射到内存中,让 CPU 可以直接从 Flash 地址空间读取资源,无需经过文件系统层。就是一个 "构建时打包 + 运行时零拷贝访问" 的资源管理方案,特别适合嵌入式场景下对性能和内存有严格要求的 UI 资源加载

使用方法

例如在LCD显示动态表情的项目中, Lottie 动画资源以JSON 文件放在lottie_assets文件夹内。

image

拉取esp_mmap_assets 组件

这是组件是不在ESP_IDF中的,需要使用ESP-IDF 组件管理器自动拉取第三方组件库,生成的idf_component.yml 如:

## IDF Component Manager Manifest File
dependencies:esp_mmap_assets: "1.*"

编译时自动把这个组件构建依赖注入到编译系统。

FLASH分区

partitions.csv文件:

# Name,     Type,   SubType,    Offset,     Size,   Flags
nvs,        data,   nvs,        0x10000,    0x6000,
lottie_assets,  data,   spiffs,      ,          304K,

在main文件夹内的CMakeLists.txt文件:

spiffs_create_partition_assets(lottie_assets"../lottie_assets"FLASH_IN_PROJECTMMAP_FILE_SUPPORT_FORMAT ".bmp,.json"
)
  1. animation 【分区目标名称】

  2. "../lottie_assets" 【本地资源目录路径】

电脑上存放静态资源的文件夹(相对当前 CMakeLists.txt 路径)

⚠️ 路径注意:CMake 相对路径基于当前 CMakeLists.txt 文件位置,不是工程根目录。

  1. FLASH_IN_PROJECT

关键选项含义:直接链接进项目固件(.bin)

也就是主 bin已经包含 SPIFFS 文件系统镜像;烧录主 bin 就能一并写入资源,

4. MMAP_FILE_SUPPORT_FORMAT ".bmp,.json"

开启 SPIFFS mmap 内存映射功能,并指定支持 mmap 的文件后缀列表。

编译时esp_mmap_assets 的操作

  1. 扫描 ../lottie_assets 目录下的 .bmp 和 .json 文件
  2. 打包成 animation.bin 烧录到 Flash
  3. 在构建编译时自动生成 mmap_generate_lottie_assets.h头文件(生成的头文件名是基于分区名称)),包含文件数量、校验和等宏定义
/*** @file* @brief This file was generated by esp_mmap_assets, don't modify it*/#pragma once#include "esp_mmap_assets.h"#define MMAP_LOTTIE_ASSETS_FILES           5
#define MMAP_LOTTIE_ASSETS_CHECKSUM        0xAD4Cenum MMAP_LOTTIE_ASSETS_LISTS {MMAP_LOTTIE_ASSETS_ASK_JSON = 0,        /*!< ask.json */MMAP_LOTTIE_ASSETS_LOOK_JSON = 1,        /*!< look.json */MMAP_LOTTIE_ASSETS_RUNNING_JSON = 2,        /*!< running.json */MMAP_LOTTIE_ASSETS_SPEAK_JSON = 3,        /*!< speak.json */MMAP_LOTTIE_ASSETS_THINK_JSON = 4,        /*!< think.json */
};

程序使用方法

#include "mmap_generate_lottie_assets.h"
// Lottie动画资源句柄
mmap_assets_handle_t asset_lottie;
//====================初始化=====================//
const mmap_assets_config_t config_lottie = {.partition_label = "animation",           // 分区标签名称.max_files = MMAP_LOTTIE_ASSETS_FILES,    // 最大文件数.checksum = MMAP_LOTTIE_ASSETS_CHECKSUM,  // 资源包打包时生成的校验值.flags = {.mmap_enable = true,                  // 启用内存映射,可以直接从Flash中读取数据,节省RAM空间.app_bin_check = true,                // 启用应用二进制检查},
};
// 创建新的内存映射资源,返回资源句柄asset_lottie,后续所有文件操作都依靠这个句柄
mmap_assets_new(&config_lottie, &asset_lottie);
printf("[%s]stored_files:%d", config_lottie.partition_label, mmap_assets_get_stored_files(asset_lottie));//===========使用Lottie动画==============//
//获取指定Lottie动画资源(look.json)
void *data = mmap_assets_get_mem(asset_lottie, MMAP_LOTTIE_ASSETS_LOOK_JSON);
//获取大小只
size_t size = mmap_assets_get_size(asset_lottie, MMAP_LOTTIE_ASSETS_LOOK_JSON);
//显示look动画
lv_lottie_set_src_data(ui_face_canvas, data, size);

相关新闻

  • 计算机毕业设计之xx小学智慧校园管理系统
  • 邯郸消防职业培训哪家正规靠谱?想考消防证怕踩坑的人该怎么选? - 米諾
  • 长春本地漏水检测哪家好 - 米諾

最新新闻

  • 2026年北京合同纠纷律师实战指南 从典型案例看专业律师的价值 - 本地品牌推荐
  • 家用电梯长期使用安全吗?开放维保、通用配件、质保范围与责任边界解析 - 产业观察报
  • vue-notifications最佳实践:提升Vue应用通知体验的10个技巧
  • 2026年口碑好的婚纱摄影影楼榜-第一名无隐形缴费 - 优企甄选
  • DownGit:3步精准下载GitHub文件,告别整个仓库克隆的烦恼
  • C++面试核心:从变量与类型系统到内存模型与工程实践

日新闻

  • 终极TeamSpeak3音乐机器人搭建指南:5分钟实现语音聊天室音频播放
  • 广州海珠区内搬家攻略,平价靠谱搬家服务商推荐,专业打包搬运省心避坑全流程指南 - 厚道搬家
  • 大语言模型入门指南:从零到精通掌握AI核心技术的5大步骤

周新闻

  • 大连理工大学与东京大学联手打造的“主动型AI助手“
  • 170.2026年国家级科研瓶颈:超精密单点金刚石切削(SPDT)光学表面生成
  • SongBloom:革命性歌曲生成框架深度解析——如何通过交织自回归与扩散模型创作完整音乐

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号