我正在开发一个在 uCOS-III 下使用的 C 库。CPU 是 ARM Cortex M4 SAM4C。在库中,我想使用第三方产品 X,其特定名称与此处无关。X 的源代码是完全可用的并且可以毫无问题地编译。
在 X 内部,使用 calloc() 和 free() 执行了大量内存分配。问题是,由于内存碎片,不建议嵌入式系统直接使用 malloc。uCOS-III 的文档明确建议不要使用 malloc - 而是应使用 OSMemCreate/OSMemGet/OSMemPut 从静态分配的内存块中分配和释放内存块。
问题一:
绕过malloc的“标准实现”的一般建议是什么?我更喜欢一种 malloc,我可以在其中访问固定的内存池(例如,专用于特殊任务)
问题2:
应该如何正确使用 OSMemCreate()?我首先要初始化一个具有一定块大小的内存分区。请求的内存量在 4 字节和大约 800 字节之间。我可以根据要求获得块,但大小固定。如果 block-size=4 我不能分配 16 字节,因为块在内存中不连续。如果 block-size=800 并且我只需要 4 个字节,那么大部分块都没有使用,我很快就会用完块。
所以我不知道,如何通过使用 OSMemCreate 来解决我原来的问题......
任何人都可以给我一个建议,我该如何继续?
非常感谢,迈克尔