本页内容 参考工程的链接期占用托管入口的默认资源视频需要另算缓冲测量运行时峰值非 ESP32 的移植顺序
HARDWARE SDK / FreeRTOS

资源与平台移植

核对参考占用、栈与队列,测量峰值并移植自有 BSP。

本章用于选板、分配资源和移植 BSP。先确认 CPU、编译器 ABI、FreeRTOS 版本、可用内部 RAM/外部 RAM 与 Flash;按这些条件取得匹配的二进制包。

参考工程的链接期占用

2026-10-11,以公开 ESP32-P4 工程、ESP-IDF 5.5.4、SDK 1.0.0 / ABI 8 / package revision 14 的现有构建产物核对:

这是 revision 14 的历史构建样本,当前 r27 的资源须另行测量。道路矢量窗口、异步校验、音频 sink、播放队列、TLS 5006 和独立镜像都会影响占用,启用后须在自己的目标构建重新测量。

表中按 1 KB = 1024 字节换算,保留两位小数。

项目 完整 P4 工程 managed-terminal 模板
应用 .bin 2,497.47 KB 589.25 KB
.dram0.data + .dram0.bss 69.45 KB 21.50 KB
.iram0.text 95.09 KB 74.31 KB
.tcm.text + .tcm.data 0.10 KB 0.38 KB

完整工程包含 1024×600 显示、无线、视频、HUD 等板级实现;模板的 BSP 驱动尚待实现。表中是整个应用的链接期数据,不是 SDK 单独开销或两种等价功能的性能对比。.bin 不含 bootloader、分区表与持久化数据;RAM 项不含运行时堆、任务栈和 PSRAM 峰值。不能据此认定“有 72 KB RAM 就能运行”。

在自己的工程运行 idf.py size 与 idf.py size-components;同时记录实际应用 .bin 的字节数、SDK 包信息、sdkconfig 和启用功能。其他工具链使用对应 map/section 报告;静态库文件大小不能当作固件 Flash 占用。

托管入口的默认资源

配置 默认值 分配与调整
task_stack ESP-IDF:12,288 字节;其他 FreeRTOS:3,072 个 StackType_t 启动 SDK 任务时分配;先确认端口单位
rx_slots 16;每项最多 512 字节输入 创建时分配,范围 1–128,另有队列和对齐开销
command_slots 16 创建时分配,范围 1–64
event_slots 8 创建时按 sizeof(moto_terminal_event) 分配,范围 2–64
bulk_rx_slots 8 开启 bulk 时额外分配,范围 1–128
task_priority 5 必须小于目标 configMAX_PRIORITIES

先用 moto_terminal_config_init,不要把另一平台的栈单位直接搬过来。降低队列会增加背压或关闭会话的概率;降低栈需要通过最忙场景的栈水位验证。生命周期、SDK 回调和应用任务的关系见 线程与数据所有权。

视频需要另算缓冲

视频重组、解码、显示和 UI 不包含在上述托管队列中。以 1024×600 RGB565 为例,单个可见画面为 1024 × 600 × 2 = 1,228,800 字节;双缓冲再乘以 2。解码器对齐、DMA、旋转和 UI 可能需要额外空间。

P4 MJPEG 参考重组参数为每帧上限 512 KiB、4 个槽,仅压缩帧数据容量就是 2 MiB,还需 FEC、索引和实例开销。分辨率、帧率、codec、帧上限与解码驱动共同决定预算;不要把 PSRAM 总量当作可用内部 DMA 内存。

测量运行时峰值

目前没有可用于所有板型的最低 RAM/Flash 或 CPU 占用百分比。量产前在目标板分别记录:启动后、TLS 握手、首次配对、导航投屏稳定运行、通知与视频并发、断连重连时的最小空闲堆、最大连续空闲块、各任务最小剩余栈及 CPU 负载。

ESP-IDF 可使用 heap_caps_get_free_size、heap_caps_get_minimum_free_size、heap_caps_get_largest_free_block,分别观察内部 RAM 与 PSRAM;栈水位和运行时间统计按目标 FreeRTOS 端口单位及配置读取。记录测试时长、屏幕参数与功能组合,再为峰值、碎片和升级增长留出产品预算。尚未测量的 CPU/堆峰值应标记为未测,不能以链接结果代替。

非 ESP32 的移植顺序

  1. 提供目标 CPU/指令集、编译器及 ABI、FreeRTOS 版本与配置、密码库配置,取得匹配头文件和静态库。
  2. 实现授权读取、绑定持久化、安全随机数和线程安全的单调毫秒时钟。
  3. 实现无线 AP、IP/DHCP 和 moto_network_port 非阻塞原语。使用 SDK 网络入口时,由 SDK 管理监听、连接和背压;网络状态变化更新 generation。
  4. 提供本地 PIN 显示,运行单个托管实例和事件消费者,先验证配对、主题、重启重连。
  5. 按功能分别接车辆、视频、通知等驱动。独立镜像和 Wi-Fi 音频可用 Managed 的启动前配置接口;BLE 辅助、底图及同 owner 的连接接管按 Core 参考工程 接线。

通用 API 与回调契约适用于匹配平台;ESP 的 NVS、NimBLE、LCD 和硬件解码驱动不能直接用于其他芯片。完成基础连接和资源测量后,再扩展功能。