Стек описывается в руководстве разработчика "IAR C/C++ Development Guide" [2], глава "Storage of auto variables and parameters". Этот документ (перевод Technical Note 61385 [1]) описывает, как получить статистику использования стека в приложении, и также показывает синтаксис файлов управления использования стека (stack usage control file, файл с расширением *.suc).
Пример использования можно загрузить по ссылке [3]. Это простой проект, содержащий функции main и test_func. Чтобы разрешить анализ использования стека (stack usage analysis), должна быть разрешена опция проекта Project -> Options -> Linker -> Advanced -> Enable stack usage analysis, см. скриншот:
Теперь map-файл линкера будет содержать информацию по использованию стека в секции "STACK USAGE". Например:
Maximum call chain 20 bytes
"__iar_program_start" 0
"__cmain" 0
"main" 16
"test_func" 4
Вышеупомянутый проект примера также содержит два обработчика прерывания: SysTick_Handler и UsageFault_Handler. Он также содержит задачу OS: test_task. Эти функции не вызываются напрямую откуда-либо, поэтому в файле управления стеком (Stack Usage Control file, .suc), должно быть указано следующее:
call graph root [task] : test_task;
call graph root [interrupt] : SysTick_Handler, UsageFault_Handler;
Благодаря этой предоставленной информации анализатор использования стека теперь знает, что эти (ниоткуда из кода не вызываемые) функции относятся к группе функций вызова "call graph roots". Обратите внимание, что вместо использования файла управления *.suc можно указать аналогичную информацию с помощью директивы #pragma call_graph_root непосредственно в модуле исходного кода.
Для получения дополнительной информации см. [2], глава "Stack usage analysis". Информацию по синтаксису файла *.suc см. в главе "The stack usage control file". Также см. статью [4] для процессоров Renesas RX.
Чтобы получить информацию по стеку времени реального выполнения кода (run-time stack usage) при отладке с помощью C-SPY, разрешите опцию Tools -> Options -> Stack -> Enable graphical stack display and stack usage tracking. В работающем отладчике C-SPY откройте окно View -> Stack.
[Ссылки]
1. Stack usage and stack usage control files site:iar.com. 2. IAR C/C++ Development Guide for ARM site:iar.com. 3. Example project for IAR Embedded Workbench for ARM 7.20.1.zip (example-project-for-ewarm-7.20.1.zip). 4. Find the stack usage of your application with IAR Embedded Workbench for RX site:iar.com. 5. Проектирование стека и кучи в IAR. 6. Cortex: отдельный стек для ISR. |