2016-05-31 4 views
0

Kürzlich schrieb ich eine C-Applikation für eine Microblaze und ich benutzte uC/OS-II. uC/OS-II bietet Speicherpools zum Reservieren und Freigeben von Speicherblöcken mit fester Größe. Ich schreibe jetzt eine C-Applikation für ein STM32 wo ich dieses Mal FreeRTOS nutze. Es sieht so aus, als ob FreeRTOS nicht den gleichen Mechanismus bietet oder habe ich etwas vermisst? Ich denke, dass die fünf Heap-Implementierungen nicht das sind, wonach ich suche.Speicherpool in FreeRTOS wie in uC/OS II

Wenn es tatsächlich keine Speicherpools gibt, gibt es einen bestimmten Grund warum?

Antwort

0

Die ursprüngliche Version von FreeRTOS verwendete Speicherpools. Es stellte sich jedoch heraus, dass die Benutzer Schwierigkeiten hatten, die Pools zu dimensionieren, was zu einem ständigen Strom von Supportanfragen führte. Da die ursprünglichen Versionen von FreeRTOS auch für sehr RAM-beschränkte Systeme gedacht waren, wurde festgestellt, dass das durch die Verwendung von übergroßen Pools verschwendetes RAM nicht akzeptabel war. Es wurde daher beschlossen, die Speicherzuweisung auf die tragbare Schicht zu verschieben, wobei zu beachten ist, dass kein Schema für mehr als eine Teilmenge von Anwendungen geeignet ist und es Benutzern ermöglicht, ihr eigenes Schema bereitzustellen. Wie Sie erwähnen, there are five example implementations provided, die fast alle Anwendungen abdecken, aber wenn Sie unbedingt eine Speicherpoolimplementierung verwenden müssen, können Sie dies leicht hinzufügen, indem Sie Ihre eigenen Implementierungen pvPortMalloc() und vPortFree() bereitstellen (Speicherpools sind einer der leichteren) implementieren).

Beachten Sie auch, dass Sie in FreeRTOS V9 kein Speicherzuordnungsschema haben müssen, da alles statisch zugewiesen werden kann.

+0

Eine der fünf Beispielimplementierungen des Heapspeichers kann für die Zuweisung von RAM für das Betriebssystem (Tasks, Queues, ...) geeignet sein, was auch für meine Anwendung der Fall sein kann. Aber wenn ich irgendeine Art von Nachrichten (im Grunde ein Byte-Array) speichern möchte, die alle die gleiche Größe haben? In diesem Fall muss ich threadsichere Speicherpools implementieren (was meiner Meinung nach nicht sehr schwierig ist), da ich pvPortMalloc() oder vPortFree() nicht verwenden kann, da ich vielleicht heap_1 verwende? – Semaphor