2016-05-31 200 views
0

最近我写了一个Microblaze的C应用程序,我用的是uC/OS-II。 uC/OS-II提供内存池来分配和释放固定大小的内存块。我现在正在为这个时候使用FreeRTOS的STM32编写一个C应用程序。看起来FreeRTOS不提供相同的机制,或者我错过了什么?我认为五个堆实现不是我正在寻找的。FreeRTOS中的内存池,如uC/OS II

如果实际上没有内存池,有什么具体的原因为什么?

回答

0

FreeRTOS的原始版本使用了内存池。然而,发现用户努力确定池的大小,这导致了持续不断的支持请求。另外,由于FreeRTOS的原始版本是针对非常受RAM限制的系统,因此发现使用超大型池浪费的RAM是不可接受的。因此,决定将内存分配移动到便携式层,理解为没有一个方案适用于多于一个应用程序子集,并且允许用户提供他们自己的方案。正如你所提到的,there are five example implementations provided,它涵盖了几乎所有的应用程序,但如果你绝对必须使用内存池实现,那么你可以通过提供自己的pvPortMalloc()和vPortFree()实现(内存池是更容易的执行)。

另请注意,在FreeRTOS V9中,您不需要任何内存分配方案,因为所有内容都可以静态分配。

+0

堆的五个示例实现之一可能适合为操作系统(任务,队列...)分配RAM,对于我的应用程序也可能是这种情况。但是,如果我想存储某种类型的消息(基本上是一个字节数组),它们的大小都是相同的?在这种情况下,我必须实现线程安全内存池(我认为这不是很困难),因为我不能使用pvPortMalloc()或vPortFree(),因为我使用的可能是heap_1? – Semaphor