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

 
 
 
Reply to this topicStart new topic
> СМ3 размер стэка, почему 128?
diwil
сообщение Oct 4 2011, 07:32
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 366
Регистрация: 5-09-06
Из: Санкт-Петербург
Пользователь №: 20 107



Здравствуйте.

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

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

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

Или я что-то упускаю?
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Oct 8 2012, 12:11
Сообщение #2


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



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


наверное ситуацию, когда шедуллер начнёт переключать задачи. плюс наверное возможность вложенных прерываний. всё это стэк, насколько я понимаешь...
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 8 2012, 13:45
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



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

Для прерываний свой стек используется, наверное.
Go to the top of the page
 
+Quote Post
spectral1989
сообщение Oct 11 2012, 02:04
Сообщение #4


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

Группа: Свой
Сообщений: 76
Регистрация: 5-04-12
Из: Томск
Пользователь №: 71 210



Размер стека зависит от глубины вызовов функции, размеов используемых в них локальных переменных, вложенности прерываний и тд. меньше 512 байт точно ставить не нужно.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 11 2012, 06:42
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (spectral1989 @ Oct 11 2012, 05:04) *
меньше 512 байт точно ставить не нужно.
Ну вы хоть читайте, на что отвечаете!

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




--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 11 2012, 09:15
Сообщение #6


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



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

Может, все же, 128 означает 128 байтов? Меня терзают смутные сомнения...
Go to the top of the page
 
+Quote Post

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

 


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


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