Forum: Mikrocontroller und Digitale Elektronik STM32 CubeMX FreeRTOS RAM Ausnutzung


von Niine (Gast)


Lesenswert?

Hallo zusammen,

ich bin leider etwas verwirrt bezüglich der RAM Ausnutzung mit FreeRTOS 
und der Konfiguration im CubeMX.

Ich habe 8kb RAM auf meinem Controller.

Nun gibt es zwei Stellen an der der Heap Size und Stack Size definiert 
wird. Aber was genau definiert man da?

Ich habe FreeRTOS. Unter dessen Konfiguration gibt es den 
TOTAL_HEAP_SIZE.
Darunter fallen nach meinem Verständnis alle Tasks / Semaphoren etc.

Und dann gibt es aber noch unter Project Manager bei Linker Settings den 
Minimum Heap Size und den Minimum Stack Size.
Die beiden Werte werden als hex angegeben, aber welche Einheit definiere 
ich da? Also 0x100 ist dann 256 Byte?

Ist es jetzt so, dass die Gesamt-RAM-Ausnutzung folgendermaßen ist?:
TOTAL_HEAP_SIZE (FreeRTOS) + Minimum Heap Size + Minimum Stack Size !< 
8kb

Die zweite konkrete Frage ist nun, was im Code unter die einzelnen 
Bereiche fällt?

Zum Beispiel:
1
void StartTaskAlive(void *argument)
2
{
3
  /* USER CODE BEGIN StartTaskAlive */
4
   int test1 = 10;
5
   int test2 = 20;
6
  /* Infinite loop */
7
  for (;;) {
8
    HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
9
    osDelay(250);
10
  }
11
  /* USER CODE END StartTaskAlive */
12
}

Fallen die im Task definierten Variablen jetzt unter dem Stack des Tasks 
und damit unter TOTAL_HEAP_SIZE (FreeRTOS)?

Beispiel 2 Globale Variablen:
Globale Variablen, welche über der Main definiert werden und von allen 
Tasks genutzt werden. Fallen die dann unter Minimum Stack Size außerhalb 
vom FreeRTOS? Also wenn ein Task nur globale Variablen nutzt, könnte 
sein Task Stack Size minimal sein?

Danke, dass jemand mich erleuchtet :-)

Niine

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.