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バイトに、各スレッドのスタックサイズを変更した場合。
============================================================================== 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 Data"セクションに置かれています。
私の質問は: それは、スレッドスタックは、「ZIデータ」RAM内のセクションに置かれたとき、スレッドの自動車/ローカル変数は、「ZIデータ」セクションに置かれるということですか? 真の場合は、スタックセクションがまったくないことを意味します。 「RO/RW/ZIデータ」とヒープセクションのみがあります。
この記事では、私にはさまざまな答えが与えられます。そして今私はちょっと混乱しています。 https://developer.mbed.org/handbook/RTOS-Memory-Model
_実行中のスレッドの観点から、 "スタックは自動/ローカル変数"を保持します。私はこれらのスタックが静的に割り当てられた変数をOSの観点から考えることはできないという理由は見当たりません。あなたは単にここで観測を提示しただけです。特定の質問は何ですか? – Notlikethat