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