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

 
 
 
Reply to this topicStart new topic
> Как определить размер стека для задачи в RTOS ?, в gcc
artymen
сообщение Nov 5 2010, 15:29
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 6-11-09
Из: г. Омск
Пользователь №: 53 464



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

P.S. Если уж на то пошло, подскажите какой-нить обзор по инструментам gcc (м.б. bintools ?), а то как открою директорию bin и сразу воображению предстают всякие мощные и гибкие возможности, которыми я не владею rolleyes.gif

Сообщение отредактировал artymen - Nov 5 2010, 15:33


--------------------
"Сознание своего несовершенства приближает к совершенству"
Гёте
Go to the top of the page
 
+Quote Post
artymen
сообщение Nov 17 2010, 16:46
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 6-11-09
Из: г. Омск
Пользователь №: 53 464



Неужели нет никаких предположений ?


--------------------
"Сознание своего несовершенства приближает к совершенству"
Гёте
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Nov 17 2010, 20:47
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



А что есть другие способы, кроме как отслеживать состояние самому?
Берем заполняем константой стек каждой задачи. А потом по ходу дела обозреваем где константы запорчены.



--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 17 2010, 20:59
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



А map-файл GCC генерировать не умеет?
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Nov 17 2010, 21:37
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



И что же такого про стек содержит map файл?
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 17 2010, 22:39
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(sergeeff @ Nov 18 2010, 02:37) *
И что же такого про стек содержит map файл?
В GCC? Не знаю. Я GCC не использую. laughing.gif А в IAR EW430, например, map-файл содержит описания для каждой функции, в которых указано использование данной функцией стека и вызовов ею других функций. Также в map-файле можно посмотреть граф вызовов функций с утилизацией ими стековой памяти.
Go to the top of the page
 
+Quote Post
artymen
сообщение Nov 18 2010, 14:07
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 6-11-09
Из: г. Омск
Пользователь №: 53 464



Цитата
Берем заполняем константой стек каждой задачи. А потом по ходу дела обозреваем где константы запорчены.
FreeRTOS, например, сама заполняет. И остлеживает переполнение, похоже, тоже этим методом, однако 100% гарантии нет. Еще раз повторюсь: я убежден, что по-нормальному это надо делать еще на этапе компиляции.
Цитата
А в IAR EW430, например, map-файл содержит описания для каждой функции, в которых указано использование данной функцией стека и вызовов ею других функций. Также в map-файле можно посмотреть граф вызовов функций с утилизацией ими стековой памяти.
А вот это интересно ! smile.gif Не может быть, чтобы gcc этого не умел...

Сообщение отредактировал artymen - Nov 18 2010, 14:14


--------------------
"Сознание своего несовершенства приближает к совершенству"
Гёте
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Nov 18 2010, 15:29
Сообщение #8


Шаман
******

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



Это подойдёт?
Там же есть ещё другие варианты.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Nov 18 2010, 15:43
Сообщение #9


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(artymen @ Nov 18 2010, 17:07) *
Еще раз повторюсь: я убежден, что по-нормальному это надо делать еще на этапе компиляции.

А совокупность возможных прерываний (и их комбинаций, в случае вложенности) как собираетесь подсчитывать?
В общем, брать надо с запасом.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
artymen
сообщение Nov 19 2010, 15:32
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 6-11-09
Из: г. Омск
Пользователь №: 53 464



Цитата
Это подойдёт?
Там же есть ещё другие варианты.
Спасибо. Но к сожалению это только для GNAT.
Цитата
А совокупность возможных прерываний (и их комбинаций, в случае вложенности) как собираетесь подсчитывать?
В общем, брать надо с запасом.
Да, я в курсе.

Вот наткнулся на исследование, как раз прямо в яблочко. Проблема отлично исследована, я нашел ответы на все вопросы. Оказывается, есть и софт нужный, но так же есть и ньюансы.
http://www.cs.utah.edu/~regehr/stacktool/


--------------------
"Сознание своего несовершенства приближает к совершенству"
Гёте
Go to the top of the page
 
+Quote Post

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

 


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


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