Skip to content

feat: add heap_4-style memory middleware for platforms without malloc/free #24

Description

@viys

背景

部分芯片或嵌入式环境不支持 malloccallocreallocfree,或项目规范禁止直接依赖标准库动态内存。CuTest 需要新增一层 Memory Middleware,用固定静态内存模拟动态内存分配能力。

该中间件应参考 FreeRTOS heap_4.c 的设计思路:单块静态 heap、按地址排序的空闲链表、释放时合并相邻空闲块,从而降低碎片。

参考资料:

目标

新增一个可选的 heap_4-style Memory Middleware,使 CuTest 可以在无标准堆环境中运行。

需求

  • 默认行为保持兼容,未启用中间件时继续使用标准库分配函数。
  • 启用中间件后,CU_MALLOCCU_CALLOCCU_REALLOCCU_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 聚合规则

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions