оперативной памяти

у код запуска для встроенной системы - код, который загружает указатель исходного стека перед переходом к функции main () - и мне нужно указать, сколько байт стека будет использовать мое приложение (или несколько больших , скромный подсчет).

Мне сказали, что у компилятора gcc теперь есть опция -fstack-Использование и опция -fcallgraph-info, которые можно каким-то образом использовать для статического расчета точного «Максимального использования стека» для меня. («Анализ требований стека времени компиляции с GCC» Botcazou, Comar и Hainque).

Найджел Джонс говорит, что рекурсия - это действительно плохая идея для встраиваемых систем («Вычисление размера вашего стека», 2009), поэтому я старался не делать никаких взаимно рекурсивных функций в этом коде.

Кроме того, я удостоверяюсь, что ни один из моих обработчиков прерываний никогда не включал прерывания до их окончательной инструкции возврата из прерывания, поэтому мне не нужно беспокоиться о повторных входящих обработчиках прерываний.

Без рекурсивных или повторных обработчиков прерываний должна быть возможность статически определить максимальное использование стека. (И поэтому большинство ответов наКак определить максимальное использование стека? не применяются). Насколько я понимаю, я (или, желательно, некоторый фрагмент кода на моем компьютере, который автоматически запускается каждый раз, когда я перестраиваю исполняемый файл) сначала нахожу максимальную глубину стека для каждого обработчика прерываний, когда он не прерывается прерыванием с более высоким приоритетом, и максимальный глубина стека функции main (), когда она не прерывается. Затем я добавляю их все, чтобы найти общую (в худшем случае) максимальную глубину стека. Это происходит (в моей встроенной системе), когда фоновая задача main () находится на своей максимальной глубине, когда она прерывается прерыванием с самым низким приоритетом, и это прерывание находится на своей максимальной глубине, когда оно прерывается следующим самым низким приоритетом. прерывать и так далее.

Я использую YAGARTO с gcc 4.6.0 для компиляции кода для LM3S1968 ARM Cortex-M3.

Итак, как я могу использовать опцию -fstack-using и -fcallgraph-info с gcc для вычисления максимальной глубины стека? Или есть какой-то лучший подход для определения максимального использования стека?

(ВидетьКак определить максимальное использование стека во встроенной системе? почти для того же вопроса, нацеленного на компилятор Keil.)

Ответы на вопрос(5)

Ваш ответ на вопрос