In der RTX-RTOS-Konfigurationsdatei von Keil RTX konnte der Benutzer die Standardgröße für den Thread-Stack konfigurieren. Im Allgemeinen enthält der Stack auto/lokale Variablen. Der Abschnitt "ZI-Daten" enthält nicht initialisierte globale Variablen.Der Keil RTX-RTOS-Threadstapelgröße
Wenn ich also die Größe des Benutzer-Thread-Stacks in der RTX-Konfigurationsdatei ändere, erhöht sich die Stack-Größe und die "ZI-Daten" -Sektion wird nicht größer.
Ich teste es, das Testergebnis zeigt, dass wenn ich Benutzer Thread-Stack-Größe zu erhöhen. Die "ZI-Daten" Sektionsgröße wird synchron mit der gleichen Größe erhöht.
In meinem Testprogramm gibt es 6 Threads und jeder hat 600 Bytes Stapel. Ich benutze Keil das Programm zu bauen, und es zeigt mir, dass:
Code (inc. data) RO Data RW Data ZI Data Debug 36810 4052 1226 380 6484 518461 Grand Totals 36810 4052 1226 132 6484 518461 ELF Image Totals (compressed) 36810 4052 1226 132 0 0 ROM Totals ============================================================================== Total RO Size (Code + RO Data) 38036 ( 37.14kB) Total RW Size (RW Data + ZI Data) 6864 ( 6.70kB) Total ROM Size (Code + RO Data + RW Data) 38168 ( 37.27kB)
Aber wenn ich jeden Thread Stapelgröße auf 800 Byte geändert. Keil zeigt mich wie folgt:
============================================================================== Code (inc. data) RO Data RW Data ZI Data Debug 36810 4052 1226 380 7684 518461 Grand Totals 36810 4052 1226 132 7684 518461 ELF Image Totals (compressed) 36810 4052 1226 132 0 0 ROM Totals ============================================================================== Total RO Size (Code + RO Data) 38036 ( 37.14kB) Total RW Size (RW Data + ZI Data) 8064 ( 7.88kB) Total ROM Size (Code + RO Data + RW Data) 38168 ( 37.27kB) ==============================================================================
Die "ZI-Daten" Abschnitt Größe von 6484 auf 7684 Bytes erhöhen. 7684 - 6484 = 1200 = 6 * 200. Und 800 - 600 = 200. So sehe ich den Thread-Stack ist in "ZI Data" Abschnitt.
Meine Frage ist: Bedeutet es, Auto/lokale Variablen im Thread werden in "ZI Daten" Abschnitt gesetzt werden, wenn Thread-Stack in gesetzt wird "ZI Daten" im RAM? Wenn es wahr ist, bedeutet das, dass es überhaupt keinen Stack-Bereich gibt. Es gibt nur "RO/RW/ZI-Daten" und Heap-Abschnitte.
Dieser Artikel gibt mir die andere Antwort. Und ich bin jetzt ein wenig verwirrt darüber. https://developer.mbed.org/handbook/RTOS-Memory-Model
_ "der Stapel enthält auto/lokale Variablen" _ aus der Perspektive eines laufenden Threads, wo es "der" Stapel ist, sicher. Ich sehe keinen Grund, dass diese Stapel vom Standpunkt des Betriebssystems aus nicht statisch zugewiesene Variablen sein könnten. Sie haben hier lediglich eine Beobachtung gemacht; Was ist die spezifische Frage? – Notlikethat