В файле конфигурации Keil RTX RTOS пользователь может настроить размер стека пользовательских потоков по умолчанию. Как правило, стек содержит автоматические / локальные переменные. Раздел «ZI data» содержит неинициализированные глобальные переменные.
Поэтому, если я изменю размер стека пользовательских потоков в файле конфигурации RTX, размер стека увеличится, а размер раздела «ZI data» не увеличится.
Я тестирую его, результат теста показывает, что если я увеличу размер стека пользовательского потока. Размер раздела «ZI data» будет увеличиваться синхронно с тем же размером.
В моей тестовой программе 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 data» увеличен с 6484 до 7684 байт. 7684 - 6484 = 1200 = 6 * 200. И 800 - 600 = 200. Итак, я вижу, что стек потоков помещен в раздел «ZI Data».
Мой вопрос: означает ли это, что автоматические / локальные переменные в потоке будут помещены в раздел «Данные ZI», когда стек потока помещен в раздел «Данные ZI» в БАРАН ? Если это правда, это означает, что секции стека нет вообще. Есть вообще только "RO / RW / ZI Data" и разделы кучи.
Эта статья дает мне другой ответ. И сейчас я немного запутался в этом. https://developer.mbed.org/handbook/RTOS-Memory-Model