2016-05-31 45 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