Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Определение размера стека
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
Sergio66
Подскажите, пожалуйста, как в IAR определить размер стека, необходимый для программы. Я имею ввиду то, что нужно указать в опциях проекта.
BVU
Цитата(Sergio66 @ Mar 13 2006, 19:24) *
Подскажите, пожалуйста, как в IAR определить размер стека, необходимый для программы. Я имею ввиду то, что нужно указать в опциях проекта.

Самый надежный способ посмотреть asm листинг - какой изначально адрес загружается в регистры стека и соотнести с областью внутреннего ОЗУ микроконтроллера вверх, до места где начинаются РОН.
Так же в *.map файле есть информация:
Код
.....
CSTACK               DATA          00000060 - 000000DF          80   dse    0
RSTACK               DATA          000000E0 - 000000FF          20   dse    0
NEAR_I               DATA          00000100 - 0000023B         13C   rel    0
NEAR_Z               DATA          0000023C - 0000027C          41   rel    0
EEPROM_I             XDATA         00000001 - 00000041          41   rel    0
.....
Sergio66
Дело в том, что в map файле указываетс именно то, что я прописываю в опциях проекта. Важно понять, что именно прописывать в опциях. мар - это производная информация. Мне же нужно определить первичную. Я так понимаю, что в asm листинге мы также увидим то, что я указал в опциях.
BVU
Цитата(Sergio66 @ Mar 13 2006, 19:38) *
Дело в том, что в map файле указываетс именно то, что я прописываю в опциях проекта. Важно понять, что именно прописывать в опциях. мар - это производная информация. Мне же нужно определить первичную. Я так понимаю, что в asm листинге мы также увидим то, что я указал в опциях.

Project->Options...->General options->System:
там имеется раздел Data stack, где для Size(bytes): должно указываться в шестнадцатеричном виде необходимое число байт для проекта. А уж сколько вы памяти для этого (Stack) отведете зависит от задачи и Ваших хотябы в первом приближении примерных расчетов... По окончанию проекта эту цифру можно определить более точно!
Sergio66
Вот именно это я и хочу знать! Как определить более точно? Я знаю, IAR в map файле строит дерево вызовов. Вот можно ли с его помошью, и, если да, то как, определить точно размер стеков?
zltigo
Цитата(Sergio66 @ Mar 13 2006, 19:00) *
Вот именно это я и хочу знать! Как определить более точно? Я знаю, IAR в map файле строит дерево вызовов. Вот можно ли с его помошью, и, если да, то как, определить точно размер стеков?

Померить реальные. Для этого заполнить стек каким-либо значением типа 0xDEADBEEF и после напряженной работы оценить "неиспорченный" обьем пробежавшись от донышка стека до
первого значения отличаещегося от запонителя.
bialix
Посчитать и оценить можно. Только вот сам IAR вам в этом деле никак не поможет.
Ознакомтесь с этими материалами:

http://www.embedded.com/showArticle.jhtml?articleID=47101892
http://www.cs.utah.edu/~regehr/stacktool/

Там даже есть пример проги-считалки стека для AVR. Правда на перле. (suks!)
zltigo
Цитата(bialix @ Mar 19 2006, 18:57) *
Только вот сам IAR вам в этом деле никак не поможет.

Ну не так категорично. В *.map файле для всех функций размеры стеков выдаются.
Дерево вызовов абсолютно от фонаря строится и нарастающим итогом. Но при желании
именно посчитать, самая начальная (причем на самом деле максимально сложно
добываемая окольными путями) о каждой из функций предоставляется именно IARом.
Для некоторых несложных, но критичных веток можно и посчитать и на перле автоматизировать
процесс. Правда без четкого знания мест использования неявных библиотечных вызовов это
сделать уже сложно :-(
bialix
Цитата(zltigo @ Mar 19 2006, 19:40) *
Цитата(bialix @ Mar 19 2006, 18:57) *

Только вот сам IAR вам в этом деле никак не поможет.

Ну не так категорично. В *.map файле для всех функций размеры стеков выдаются.
Дерево вызовов абсолютно от фонаря строится и нарастающим итогом. Но при желании
именно посчитать, самая начальная (причем на самом деле максимально сложно
добываемая окольными путями) о каждой из функций предоставляется именно IARом.
Для некоторых несложных, но критичных веток можно и посчитать и на перле автоматизировать
процесс. Правда без четкого знания мест использования неявных библиотечных вызовов это
сделать уже сложно :-(


Почитайте статью по первой моей ссылке.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.