Использование стека в IAR и файлы управления стеком Печать
Добавил(а) microsin   

Стек описывается в руководстве разработчика "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, см. скриншот:

IAR stack analysis option

Теперь 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.
6Cortex: отдельный стек для ISR.