Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: СМ3 размер стэка
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > FreeRTOS
diwil
Здравствуйте.

В мануале написано, что не рекомендуется делать размер стэка меньше чем в примере порта.
В примере порта для кортекса м3 размер стэка == 128 т.е. 512 байт.
Ок. начинаю думать, на что он может расходоваться. Точнее нет, не думать, а смотреть -

- xTaskCreate создает TCB с pxTopOfStack, скажем, 0x12b0.
- далее там из стэка вычитается 64 (т.е. контекст задачи есть 16 регистров) и он становится 0x1270, правда я так и не понял зачем туда сразу кладутся какие-то переменные, ибо положенные на стэк значения дальше, ВРОДЕ, используются .
- далее встаем на точку входа в эту задачу и смотрим значение r13 на входе - 0x12b0 (т.е. чуда не случилось)

Однако, тогда получается, что для работы оси нужно сохранить всего 16 регистров и, если задача типа микро (т.е. сама не использует стэк), то минимальный размер стэка будет равен 16. Плюс надо добавить число сохраняемых регистров в IDLE. И этого должно быть достаточно для всего...

Или я что-то упускаю?
kolobok0
Цитата(diwil @ Oct 4 2011, 11:32) *
...Или я что-то упускаю?


наверное ситуацию, когда шедуллер начнёт переключать задачи. плюс наверное возможность вложенных прерываний. всё это стэк, насколько я понимаешь...
_Артём_
Цитата(kolobok0 @ Oct 8 2012, 15:11) *
плюс наверное возможность вложенных прерываний. всё это стэк

Для прерываний свой стек используется, наверное.
spectral1989
Размер стека зависит от глубины вызовов функции, размеов используемых в них локальных переменных, вложенности прерываний и тд. меньше 512 байт точно ставить не нужно.
Сергей Борщ
QUOTE (spectral1989 @ Oct 11 2012, 05:04) *
меньше 512 байт точно ставить не нужно.
Ну вы хоть читайте, на что отвечаете!

QUOTE (diwil @ Oct 4 2011, 10:32) *
если задача типа микро (т.е. сама не использует стэк)
Где здесь про "глубины вызовов функции", "локальных переменных"?


ViKo
Цитата(diwil @ Oct 4 2011, 10:32) *
В примере порта для кортекса м3 размер стэка == 128 т.е. 512 байт.

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