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

 
 
> Объем стека для работы задачи, Минимальный объем свободного места в стеке задачи
l_fin_l
сообщение Dec 18 2016, 09:41
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 23-08-11
Пользователь №: 66 836



Здравствуйте, очень интересует вопрос, какое минимальное значение свободного стека должно быть для стабильной работы задачи? Измеряю свободное место в стеке задачи функцией uxTaskGetStackHighWaterMark(). Заранее спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zltigo
сообщение Dec 18 2016, 10:48
Сообщение #2


Гуру
******

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



Цитата(l_fin_l @ Dec 18 2016, 11:41) *
Здравствуйте, очень интересует вопрос, какое минимальное значение свободного стека должно быть для стабильной работы задачи?

0, но с учетом методики измерения - одно слово.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
jcxz
сообщение Dec 19 2016, 14:36
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(zltigo @ Dec 18 2016, 13:48) *
0, но с учетом методики измерения - одно слово.

А контекст задачи где FreeRTOS сохраняет? Разве не на стеке задачи?
По-крайней мере часть контекста, сохраняемая при срабатывании ISR, будет на стеке задачи. Если конечно не всё исполнение идёт в Handler-режиме... sm.gif
Если конечно вопрос касается Cortex-M, о чём здесь можно только догадываться.....

Цитата(Непомнящий Евгений @ Dec 19 2016, 08:56) *
обычно стек назначаются с некоторым (по возможности большим) запасом. Иначе самая минимальная переделка программы может ее сломать. На что и обращают ваше внимание в данной статье

Не нужно даже переделки. Достаточно изменить ключи оптимизации или обновить компилятор. wink.gif

Цитата(Непомнящий Евгений @ Dec 19 2016, 08:56) *
Отдельный. Тот, что вы выделили на этапе линковки. Он используется вашими функциями до запуска шедулера; при запуске он очищается и далее используется в прерываниях

Вообще-то при входе в ISR стэкинг делается в тот стек, который был активным на момент прерывания, а уже потом делается переключение стеков. Если конечно исполнение исходно шло в Thread режиме.
Таким образом контекст прерванной задачи оказывается уже на её стеке и не нужно его копировать из Handler-стека куда-то в область данных задачи (как было на ARM7).
А уже дальнейшая работа ISR (и всех вложенных более приоритетных) идёт на Handler-стеке.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 19 2016, 19:24
Сообщение #4


Гуру
******

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



Цитата(jcxz @ Dec 19 2016, 16:36) *
А контекст задачи где FreeRTOS сохраняет? Разве не на стеке задачи?
По-крайней мере часть контекста, сохраняемая при срабатывании ISR, будет на стеке задачи. Если конечно не всё исполнение идёт в Handler-режиме... sm.gif
Если конечно вопрос касается Cortex-M, о чём здесь можно только догадываться.....

Вы не поняли ВОПРОСА и соответсвенно ответа sad.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
jcxz
сообщение Dec 20 2016, 11:19
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(zltigo @ Dec 19 2016, 22:24) *
Вы не поняли ВОПРОСА и соответсвенно ответа sad.gif

А кто его тут понял? Вы? А Вы уверены, что то, как Вы его поняли, совпадает с тем, что имел в виду вопрошающий? laughing.gif
Go to the top of the page
 
+Quote Post



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

 


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


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