Forum: Mikrocontroller und Digitale Elektronik FreeRTOS mit variabler Stackadresse für Tasks


von Michael A. (schopf16)


Lesenswert?

Hallo zusammen

Ich bin dabei, meine Software von Keil RLARM nach FreeRTOS zu portieren. 
Ich habe einen STM32F1 mit einem kleinen und schnellen internen RAM 
(64k) sowie einem etwas langsameren, grossen externen RAM (per FSMC).

Bei Keil konnte ich für jeden Task neben der Stackgrösse auch den 
Speicherort des Stacks angeben (per Übergabe eines Pointers). Dies war 
wichtig, da ich für alles Stacks im internen RAM zuwenig Speicher habe, 
jedoch für einige Task das externe RAM zu langsam ist (häufiger 
Taskwechsel).

Aktuell bin ich immer noch am portieren und habe deswegen noch keinen 
lauffähigen Code. Ich habe jedoch bereits jetzt ein Augenmerk auf den 
FreeRTOS Memorymanager heap_3.c geworfen. Da könnte ich bei 
pvPortMalloc() feststellen, aus welchem Task die Funktion aufgerufen 
wurde und entsprechend Speicher aus dem internen oder externen RAM 
bereitstellen. Ich bin mir jedoch nicht sicher, ob dies die optimale 
Lösung wäre.

heap_4.c bietet mir die Möglichkeit, sowohl Speicher im internen wie 
auch im externen RAM bereit zu stellen. Da ich aber keinen Einfluss 
nehmen kann, welcher Teil welchem Task zugesprochen wird ist dies für 
meinen Fall nicht brauchbar.

Habe ich bei FreeRTOS beim Erstellen eines Tasks die Möglichkeit, neben 
der Stackgrösse auch den Speicherort des Stacks anzugeben? Auf der 
Homepage habe ich keine verwendbaren Informationen gefunden. Die 
Funktion xTaskGenericCreate() könnte vieleicht die Lösung sein, doch ich 
finde keine Beschreibung zu dieser Funktion, selbst das FreeRTOS Manual 
schweigt sich aus.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.