Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IAR EWB AVR переполнение стека
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Drozd2
Как попросить этого товарища на этапе компиляции хотя бы предупреждать о возможном переполнении стека?
zltigo
QUOTE (Drozd2 @ Jul 9 2011, 00:15) *
Как попросить этого товарища на этапе компиляции хотя бы предупреждать о возможном переполнении стека?

Если-бы Вы представляли, что такое стек, компилятор и линкер, то поняли, что на этапе КОМПИЛЯЦИИ это принципиально не возможно. Понятие размера стека появляется только на этапе линковки, за исключением частных случаев типа отдельного аппаратно ограниченного стека возвратов.
Xenia
Цитата(Drozd2 @ Jul 9 2011, 01:15) *
Как попросить этого товарища на этапе компиляции хотя бы предупреждать о возможном переполнении стека?

Никак, компилятор этого не умеет. Тем более что это не просто сделать даже в ручную. Тут надо найти в программе место, где могут быть наиболее глубоко вложены друг в друга подпрограммы или функции. И тоже самое отдельно для кода в обработке прерываний, а потом сложить максимальные значения. Ведь прерывание может случиться в любой момент времени, но больше всего опасен случай, когда прерывание произошло в момент работы самой глубоко вложенной подпрограммы/функции, из-за чего поверх начали наладываться подпрограммы/функции, вызываемые из прерывания.

Плюс к тому неопределеность, когда вызываешь библиотечные функции - кто сосчитает, что там понаписано? Вот и компилятор тоже не знает, т.к. библиотеку он использует уже откомпилированную.

Для AVR придется считать не только стек возвратов (RSTACK), но и стек локальных переменных (CSTACK). Всё это считать довольно противно, а потому проще не считать sm.gif, а выделять под стеки ВСЮ свободную память. А если не хватит, то деваться всё равно некуда.
IgorKossak
Это обсуждалось уже сотню раз, ищите по форуму.
Тему закрываю.
Модератор.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.