Первый раз использую RTOS. Сейчас размеры стеков для каждой задачи я прикинул на глаз. По мере того, как система начинает вести себя откровенно неадекватно, я увеличиваю их, но памяти остается все меньше и меньше. Есть конечно всяческие макросы и функции для отслеживания стека и его переполнения, но ведь есть определенная вероятность того, что они соврут при возникновении переполнения. Очевидно, правильнее всего решать эту проблему еще на этапе компиляции, до отладки. (Мне так кажется.) Но по С/С++ коду "вычислить на глаз" требуемый стек не всегда возможно, если, например, происходит обращение к функциям из третьесторонних библиотек, и уж тем более, если они не имеют исходных кодов, а линкуются, да и куда там, надо еще знать, какие эпилоги к функциям генерирует компилятор...
Вопрос. Есть ли в GCC средства, чтобы прогнать всевозможные ветви выполнения заданной функции и определить самую глубокую точку, которой достигает стек ?
Меня интересует больше общий подход и методика, поэтому конкретную ось и микроконтроллер не называю, но если интересно: FreeRTOS (адаптированный порт ATMega323) и ATMega128.
P.S. Если уж на то пошло, подскажите какой-нить обзор по инструментам gcc (м.б. bintools ?), а то как открою директорию bin и сразу воображению предстают всякие мощные и гибкие возможности, которыми я не владею