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

 
 
> Размер стека
3.14
сообщение Feb 20 2007, 15:28
Сообщение #1


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



Собственно, надоело мне размер стека на шару выставлять.
Посоветуйте плиз как это делать наиболее "разумно".
Залез в Keil-овский репорт, там первой строкой (надо полагать нихудший случай):
Код
Maximum Stack Usage = 584 bytes + Unknown(Functions without stacksize,Cycles,Untraceable Function Pointers)
Не совсем доганяю, что значит вторая часть слагаемого?
Еще, как то можно его (стек) во время работы измерять?
Например, под microblaze есть функция которая выполняется в случае переполнения стека, полагаю подобное есть в любой среде?


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 7)
SpiritDance
сообщение Feb 20 2007, 16:11
Сообщение #2


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Цитата(3.14 @ Feb 20 2007, 15:28) *
Не совсем доганяю, что значит вторая часть слагаемого?


callback - вызовы через указатели на функции, возможно присутствующие в программе.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
makc
сообщение Feb 20 2007, 19:41
Сообщение #3


Гуру
******

Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904



Цитата(3.14 @ Feb 20 2007, 15:28) *
Например, под microblaze есть функция которая выполняется в случае переполнения стека, полагаю подобное есть в любой среде?


Такую функцию сделать и самому не сложно. Оформить в качестве макроса и вставлять в самые дальние функции в дереве вызовов. Таких, как правило, не много.

Кстати, попутно и у меня возник вопрос - есть-ли в природе для arm-elf-gcc свободные программы для анализа и оценки максимального значения используемого стека? Вопрос далеко не праздный - искал, но ничего толкового не попалось.


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
3.14
сообщение Feb 21 2007, 00:07
Сообщение #4


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



Код
Такую функцию сделать и самому не сложно...
Моих познаний для этого не достаточно.


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 21 2007, 03:41
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(3.14 @ Feb 20 2007, 15:28) *
Собственно, надоело мне размер стека на шару выставлять.
Посоветуйте плиз как это делать наиболее "разумно".


Есть один простой способ, хотя и не идеальный. При запуске программы область стека инициализируется известными данными (например, 0x12345678). Затем программу гоняют, стараясь заставить её использовать стек по максимуму. После этого смотрят в облась стека и видят, сколько было затёрто (данные не равны 0x12345678).
Go to the top of the page
 
+Quote Post
makc
сообщение Feb 21 2007, 08:20
Сообщение #6


Гуру
******

Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904



Цитата(3.14 @ Feb 21 2007, 00:07) *
Код
Такую функцию сделать и самому не сложно...
Моих познаний для этого не достаточно.


Я все-таки думаю, что достаточно. smile.gif
Такая функция должна делать всего две вещи в первом приближении: получать текущее значение SP и сравнивать его c константой - пределом стека. Если перешли - значит ошибка.

Как с помощью ассемблерной вставки прочитать SP, думаю, разобраться не сложно. Что же касается вышеупомянутой константы - ее можно либо объявить с помощью скрипта линкера (экспортировать символ-указатель на нижнюю границу стека), либо иным доступным способом.

Сложнее сделать backtrace, но тоже вполне реально. Тем более, что у компиляторов есть возможность генерирования стековых фреймов в соответствии со стандартом APCS. smile.gif


Цитата(scifi @ Feb 21 2007, 03:41) *
Есть один простой способ, хотя и не идеальный. При запуске программы область стека инициализируется известными данными (например, 0x12345678). Затем программу гоняют, стараясь заставить её использовать стек по максимуму. После этого смотрят в облась стека и видят, сколько было затёрто (данные не равны 0x12345678).


Да уж, от идеала далеко... Как часто нужно запускать процедуру контроля? glare.gif
К тому же при переполнении стека программа может уже не вернуться в основную свою ветку, где происходит проверка. Так что этот способ лично мне видится совершенно бесполезным.


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 21 2007, 10:29
Сообщение #7


Гуру
******

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



Цитата(makc @ Feb 21 2007, 07:20) *
Да уж, от идеала далеко...

Отнюдь smile.gif
Цитата
Как часто нужно запускать процедуру контроля? glare.gif

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

Это исследовательский способ и в простейшем случае для начала стек берется с явным запасом.
Но а если 'вдруг', то будет, например, exception - там в обработчине и посмотрите а хватило-ли стека?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
makc
сообщение Feb 21 2007, 12:16
Сообщение #8


Гуру
******

Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904



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


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 27th June 2025 - 22:12
Рейтинг@Mail.ru


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