我正在为学生卫星的嵌入式系统开发软件系统。我们的代码是C / C ++的混合,运行在AT32UC3A3256S 32位AVR微控制器上。我们在硬件上运行FreeRTOS操作系统,工作正常。由于物理内存布局以及任务操作的概念,我们还需要一种特殊的内存管理方案。
我一直在尝试使用名为dlmalloc的动态内存实现,主要是由于mspace的可用性,它允许动态内存分配到包含和跟踪的部分。我有一些包含dlmalloc的代码,以便在内存中的某些位置创建mspace,并根据发出请求的FreeRTOS任务将分配绑定到这些mspace。最终产品是一个内存管理系统,它给出了一个给定任务分配的内存量,如果它超过了它的限制,将重置任务并释放它的内存。
我创建了一个基本上是大内存泄漏的测试任务,不断释放内存而不释放内存。现有的内存管理系统应该在溢出限制时定期重置此任务,释放所有可能泄漏的内存。这适用于单个任务运行,但如果同时运行此任务的两个相似副本,则会以非常奇怪的方式失败,这使我相信内存分配不是线程安全的。
我已经用FreeRTOS例程包围了对内存分配例程的每次调用,这些例程确保只有任务分配内存将在内存请求的持续时间内运行。对我而言,这似乎应该提供所需的线程安全性,但显然还有其他错误。
对于如何将dlmalloc移植到我正在使用的硬件,我可能使用的任何其他并发内存分配器,或任何建议,是否有人对我可能缺少的内容有任何想法?如果有必要的话,我可以提供更多的信息,但是我不想比原来的帖子更加膨胀。