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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.