在Keil RTX RTOS配置文件中,用戶可以配置默認的用戶線程堆棧大小。 通常,堆棧包含自動/本地變量。 「ZI數據」部分保存未初始化的全局變量。Keil RTX RTOS線程堆棧大小
因此,如果我更改RTX配置文件中的用戶線程堆棧大小,堆棧大小將增加,並且「ZI數據」節大小不會增加。
我測試一下,測試結果顯示如果我增加用戶線程堆棧大小。 「ZI數據」部分的大小將以相同大小同步增加。
在我的測試程序中,有6個線程,每個線程有600個字節的堆棧。我使用Keil來構建程序,它告訴我:
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)
但是,如果我將每個線程堆棧大小更改爲800字節。 Keil顯示如下:
============================================================================== 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) ==============================================================================
「ZI數據」部分的大小從6484增加到7684字節。 7684 - 6484 = 1200 = 6 * 200和800 - 600 = 200。 所以我看到線程堆棧放在「ZI數據」部分。
我的問題是: 這是否意味着汽車/在線程局部變量將被放置在「ZI數據」部分,當線程棧放在「ZI數據」一節中RAM? 如果這是真的,那意味着根本沒有堆疊部分。根本只有「RO/RW/ZI數據」和堆段。
這篇文章給了我不同的答案。我現在對此有點困惑。 https://developer.mbed.org/handbook/RTOS-Memory-Model
_「堆棧保存自動/本地變量」_ - 從正在運行的線程的角度來看,當然是「該」堆棧。儘管如此,我沒有理由認爲這些堆棧不能從操作系統的角度來看是靜態分配的變量。你只是在這裏提出一個觀察;具體的問題是什麼? – Notlikethat