реклама на сайте
подробности

 
 
 
Closed TopicStart new topic
> IAR EWB AVR переполнение стека
Drozd2
сообщение Jul 8 2011, 21:15
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 97
Регистрация: 19-11-09
Пользователь №: 53 743



Как попросить этого товарища на этапе компиляции хотя бы предупреждать о возможном переполнении стека?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 8 2011, 21:24
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Drozd2 @ Jul 9 2011, 00:15) *
Как попросить этого товарища на этапе компиляции хотя бы предупреждать о возможном переполнении стека?

Если-бы Вы представляли, что такое стек, компилятор и линкер, то поняли, что на этапе КОМПИЛЯЦИИ это принципиально не возможно. Понятие размера стека появляется только на этапе линковки, за исключением частных случаев типа отдельного аппаратно ограниченного стека возвратов.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Xenia
сообщение Jul 8 2011, 21:44
Сообщение #3


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(Drozd2 @ Jul 9 2011, 01:15) *
Как попросить этого товарища на этапе компиляции хотя бы предупреждать о возможном переполнении стека?

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

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

Для AVR придется считать не только стек возвратов (RSTACK), но и стек локальных переменных (CSTACK). Всё это считать довольно противно, а потому проще не считать sm.gif, а выделять под стеки ВСЮ свободную память. А если не хватит, то деваться всё равно некуда.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jul 8 2011, 21:57
Сообщение #4


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Это обсуждалось уже сотню раз, ищите по форуму.
Тему закрываю.
Модератор.
Go to the top of the page
 
+Quote Post

Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 2nd August 2025 - 23:36
Рейтинг@Mail.ru


Страница сгенерированна за 0.01372 секунд с 7
ELECTRONIX ©2004-2016