背景
部分芯片或嵌入式环境不支持 malloc、calloc、realloc、free,或项目规范禁止直接依赖标准库动态内存。CuTest 需要新增一层 Memory Middleware,用固定静态内存模拟动态内存分配能力。
该中间件应参考 FreeRTOS heap_4.c 的设计思路:单块静态 heap、按地址排序的空闲链表、释放时合并相邻空闲块,从而降低碎片。
参考资料:
目标
新增一个可选的 heap_4-style Memory Middleware,使 CuTest 可以在无标准堆环境中运行。
需求
- 默认行为保持兼容,未启用中间件时继续使用标准库分配函数。
- 启用中间件后,
CU_MALLOC、CU_CALLOC、CU_REALLOC、CU_FREE 应切换到 CuTest Memory Middleware。
- 中间件应支持:
malloc 模拟
calloc 模拟
realloc 模拟
free 模拟
- 中间件实现参考 FreeRTOS
heap_4:
- 固定静态 heap buffer
- block header 记录大小和空闲链表指针
- 空闲块按地址排序
- 分配时可拆分较大空闲块
- 释放时合并相邻空闲块
- 支持内存对齐
- 支持剩余空间统计
- 不破坏
scripts/make-tests.py 现有扫描和生成逻辑。
- 不改变测试文件编写格式,测试仍应兼容
test/CuTestTest.c 当前风格:
void TestXxx(CuTest* tc)
- 使用现有
CuAssert...
- 可由
make-tests 自动聚合
非目标
- 不直接引入 FreeRTOS 依赖。
- 不要求用户项目修改测试入口或测试函数格式。
- 不直接复制 FreeRTOS 源码,仅参考其内存管理算法和结构。
验收标准
./test.ps1 update 能正常生成 test/AllTests.c。
./test.ps1 能完整通过。
- 启用 Memory Middleware 后,CuTest 可在不调用标准库
malloc/free 的情况下完成测试运行。
- 覆盖以下测试场景:
- 普通分配和释放
calloc 清零
realloc 扩容、缩容、NULL 指针、0 字节
- 释放后相邻空闲块合并
- heap 空间不足时返回
NULL
- 不影响
make-tests 聚合规则
背景
部分芯片或嵌入式环境不支持
malloc、calloc、realloc、free,或项目规范禁止直接依赖标准库动态内存。CuTest 需要新增一层 Memory Middleware,用固定静态内存模拟动态内存分配能力。该中间件应参考 FreeRTOS
heap_4.c的设计思路:单块静态 heap、按地址排序的空闲链表、释放时合并相邻空闲块,从而降低碎片。参考资料:
heap_4.c: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/portable/MemMang/heap_4.c目标
新增一个可选的 heap_4-style Memory Middleware,使 CuTest 可以在无标准堆环境中运行。
需求
CU_MALLOC、CU_CALLOC、CU_REALLOC、CU_FREE应切换到 CuTest Memory Middleware。malloc模拟calloc模拟realloc模拟free模拟heap_4:scripts/make-tests.py现有扫描和生成逻辑。test/CuTestTest.c当前风格:void TestXxx(CuTest* tc)CuAssert...make-tests自动聚合非目标
验收标准
./test.ps1 update能正常生成test/AllTests.c。./test.ps1能完整通过。malloc/free的情况下完成测试运行。calloc清零realloc扩容、缩容、NULL指针、0 字节NULLmake-tests聚合规则