mcpField
M
memory-budgeting

memory-budgeting

github.com/wedsamuel1230开发2854 次安装2 周前更新
代码仓库

关于 memory-budgeting

memory-budgeting 是面向嵌入式 C/C++ 项目的技能,将内存视为需测量的预算,而非开发板规格上的名义容量。它指导开发者分类核算、检查构建体积、测量运行时内存并进行压力测试。

主要功能

  1. 01分类核算各类内存占用
  2. 02设定预算与安全余量
  3. 03检查编译器体积输出
  4. 04测量运行时堆与栈
  5. 05在代表性负载下检查内存

适用场景

  1. 01添加功能前估算内存需求
  2. 02排查构建体积变化
  3. 03检查运行时堆与栈用量
  4. 04验证峰值负载下的内存占用

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/wedsamuel1230/embedded-engineering-skills --skill memory-budgeting

安装后在 Claude Code 中输入/memory-budgeting确认已加载。

详细介绍

内存预算

将内存视为经过测量的预算,而不是板卡上标注的名义值。实现使用嵌入式 C/C++;如果解析构建或运行时日志是有用且确定的工具,也可以使用脚本。

信息收集

记录具体的板卡/模块、闪存/RAM/EEPROM/PSRAM、引导加载程序和分区布局、框架、编译器标志、库、静态缓冲区、任务栈、文件系统/OTA 需求、协议峰值大小,以及可用的测量输出。

流程

  1. 区分静态数据、代码/闪存、堆、任务栈、中断状态、文件系统、引导加载程序和 OTA/更新槽。
  2. 为每个类别设定数值预算和最低余量。使用具体板卡的参考数据,而不是将整个系列的数值直接当作项目结论。
  3. 保存编译器大小输出,并将变化对应到某项功能或依赖项。
  4. 在框架支持的情况下,在代表性负载下测量运行时可用堆内存、最大连续块、栈高水位标记,以及重置/分配失败情况。
  5. 在 AVR 上,适当使用 F() 将字面量保存在闪存中,优先采用有界缓冲区和固定大小存储,并避免无界地使用动态 String。在 ESP32/RP2040 上,同样要限制缓冲区大小,并区分堆、栈、闪存和文件系统。
  6. 每次更改内存相关内容后,重新运行压力测试并记录权衡。

避免自我安慰

捷径应对方式
“数据手册说有 520 KB,所以内存没问题。”区分可用堆、栈、保留区域,以及无线电/RTOS 的占用。
“编译通过了。”检查大小输出,并测试运行时分配路径。
“把缓冲区加大。”限定协议范围,并证明所需的最大值。
“到处都用 String。”检查内存碎片和生命周期;必要时使用有界替代方案。
“OTA 只需要应用映像。”将两个更新槽、引导加载程序、元数据和回滚映像都纳入预算。

验证

  • 构建大小输出和运行时内存证据应标明具体目标/版本。
  • 每项预算都有余量和故障应对方案。
  • 压力测试应在适用情况下覆盖消息、传感器、日志、无线电和任务负载峰值。
  • 优化不得移除边界、安全检查或恢复行为。

共享输出约定

使用共享的 Arduino 技能约定:说明假设、所需工具和版本、实现步骤、各验证阶段的测试/证据、已知限制,以及恢复/安全说明。

评论

支持 Markdown