Stack-size des loop Task erhöhen / definieren

Hi zusammen,

kann man eigentlich die Stack-Size des loop-Task beim ESP32 über die Arduino IDE vergrößern?

Mit eigenen Loops geht das ja z.B. so (in dem Beispiel 5000):

// WiFi-Verbindung aufrechterhalten
  xTaskCreatePinnedToCore(
    meinTask,
    "meinTask",
    5000,  
    NULL,
    2,
    NULL,
    0
  );

Geht das so auch für den loopTask?

Viele Grüße
Daniel

Ja!

Hi Combie,

quasi so?

Welche Größe hat denn der Loop-Task standardmäßig und wieviel Stacksize ist denn generell auf einem ESP32 möglich? Ich habe einen separaten Task mit 5000 und dann eben noch den loopTask.

Danke für deine Hilfe.

LG Daniel

Die Antwort liegt auf deinem Rechner.
Aber ok, einmal noch nehme ich deine Hand und führe dich dahin......

image

Auch die Antwort findest du dort!

Wieviel Stack möglich ist, wird wohl daran liegen, wieviel RAM du für andere Sachen verplemperst.
Das weißt nur du!


Mein Tipp:
Einmal die Beispiele durchsehen, versuchen zu verstehen!
Einmal den Core durchsuchen, mal in alle Ecken schauen.

Viele viele Dinge werden dort beantwortet, wo du in 2 Jahren noch nicht auf die Frage kommen würdest.

Aber: Warnung!
Du könntest dabei viel lernen.
Da weiß ich nicht, ob du das überhaupt möchtest.

1 Like

Danke Combie, ich begebe mich auf die Reise :wink:

Moinsen Combie / der Rest,

ich hab tatsächlich nochmal ne Frage zu dem Thema.

Was ich verstanden habe:

Ich kann mir die aktuelle "Rest"-Stacksize des Loop-Tasks folgendermaßen ausgeben:


Serial.printf("Arduino Stack was set to %d bytes", getArduinoLoopTaskStackSize());

Und ich kann die Stackksize (falls das erforderlich wäre, warum auch immer) folgendermaßen hochschrauben (z.B. auf 16 KB):

SET_LOOP_TASK_STACK_SIZE(16*1024); // 16KB

Nun frage ich mich immer noch, wie ich ermitteln kann, was die maximale Grenze (theoretisch) ist, auf die ich hochschrauben kann.

Gibt es auch einen Befehl, über den man die restliche verfügbare RAM-Größe (des gesamten ESP32) ausgeben kann, damit ich weiß, was ich verplempert habe?

Ich habe neben dem loop-Task noch einen weiteren Task

// WiFi-Verbindung aufrechterhalten
  xTaskCreatePinnedToCore(
    keepWiFiAlive,
    "Keep Wifi Alive",
    5000,
    NULL,
    2,
    NULL,
    0
  );

D.h. der bekommt 5kB zugewiesen, korrekt?

Folgende Grafik hab ich im Internet gefunden (blog.espressif.com):

Heißt das (und wenn ich falsch liege verstehe ich es einfach Hirnschmalz-mäßig nicht, sorry schon mal) dass ich THEORETISCH 192kB - 64kB = 128kB insgesamt zur Verfügung habe?

d.h. ich könnte dem Loop-Task 123kB zuordnen (was natürlich Irrsinn wäre)?

Sorry, wenn ich da evtl. wieder in ein Fettnäpfchen trete, aber ich will das ja lernen, komm aber teilweise mit den Begrifflichkeiten (inkl. dem Englisch) nicht klar.
Auf der Seite sind noch zahlreiche weitere Grafiken und Texte, aber damit komm ich nicht wirklich klar. Und da fühl ich mich wohler, wenn ich einen von euch aus der Community frage.
Denn Google leitet mich da oftmals auch falsch.

Ich muss ja auch nicht alles verstehen. In dem Fall möchte ich einfach nur wissen, wieviel RAM ich insgesamt für Tasks verplempern kann :wink:

Danke für eure Hilfe.

Ich glaube: Die Frage ist falsch.

Auf die Schnelle fand ich dieses:
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/mem_alloc.html

Ich seh schon, das Thema ist alles andere als einfach zu verstehen.
Und manchmal reicht da meine Hirnkapazität auch einfach nicht aus.
Aber ich versuch mich mal reinzulesen.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.