CoOS Stack Berechnung

Gast #3044771
Lesenswert?

Hallo zusammen,

ich hab eine Frage zur Berechnung des benötigten Stacks in CoOS. 
(http://www.coocox.org/CoOS.htm)

Im CooCox CoOS User's Guide (Revision 1.1, 
http://www.coocox.org/downloadfile/CoOS/PDF/CooCox_CoOS_User_Guide.pdf) 
wird leider kaum auf die Berechnung der Stackgröße eingegangen.

Im Beispiel (Seite 5, User`s Guide) steht:
1
OS_STK taskA_stk[128]; /*!< define "taskA" task stack */
2
OS_STK taskB_stk[128]; /*!< define "taskB" task stack */
3
OS_STK led_stk [128]; /*!< define "led" task stack */
4

5
//Zur Info:
6
//typedef unsigned int       OS_STK;

Auf der Seite 13 im User´s Guide steht lediglich, dass
alle 16 CPU-Register (32-bit breit, entspricht 4Byte * 16 = 64 Byte = 2 
unsigned int) gesichert werden und und 4 Bytes (unsigned long) für die 
Erkennung eines StackOverflow sind.
Da sind also, nach meiner Rechnung, lediglich 3 Elemente eines jeden 
Arrays von oben belegt.

Habe ich einen Denkfehler und wozu wird der Stack so groß angegeben?
Wo werden lokale Variablen abgelegt?

Danke fürs erleuchten ;-)
Gast #3045054
Lesenswert?

Lokale Variablen werden in genau diesem Stack abgelegt.

Also kommt es drauf an wie viel Stack-Speicher sich dein Thread maximal 
genehmigt.

Das ermitteln der Stack-Groesse erfolgt durch ausprobieren.


Ist ziemlich doof, wenn du z.B. mehrere Threads hast, die alle z.B. eine 
Funktion aufrufen die sehr viel Stack-Speicher braucht.
Dann bietet es sich an diese eine Funktion (oder Funktions-Bibliothek) 
als gesonderten Thread laufen zu lassen. Als Beispiel waere da die FatFS 
library.
Gast #3045981
Lesenswert?

Danke für deine Antwort.
Wie aber "weiß" der Context Wechsel welche und vor allem wieviele 
lokalen Variablen zusätzlich gesichert werden sollen? (Für den Fall das 
die Variablen nicht in einem der CPU-Register stehen?)

Da dies von "keine" bis "viele" Variablen sein kann, muss doch dabei ein 
System bzw. Mechanismus dahinter stecken um dies möglichst effizient zu 
lösen?

Ständig zu viel zu speichern macht den Taskwechsel doch nur unnötig 
lang.

Oder wird pauschal einfach ein Teil des RAMs komplett gesichert?

Danke fürs lesen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren