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

 
 
 
Reply to this topicStart new topic
> Объем стека для работы задачи, Минимальный объем свободного места в стеке задачи
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
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
l_fin_l
сообщение Dec 18 2016, 11:08
Сообщение #3


Участник
*

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



А для обработки прерываний? Правда я использую stm32, там вроде как используется для прерываний свой стек, но в случае FreeRTOS непонятно он использует свой стек(стек задачи), или отдельный?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 18 2016, 11:38
Сообщение #4


Гуру
******

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



Цитата(l_fin_l @ Dec 18 2016, 13:08) *
А для обработки прерываний? Правда я использую stm32, там вроде как используется для прерываний свой стек, но в случае FreeRTOS непонятно он использует свой стек(стек задачи), или отдельный?

Какая разница? Вы получили абсолютно точный ответ НА СВОЙ ВОПРОС для любого случая sm.gif. Подозреваю, что Вы хотели узнать другое, но не смогли задать вопрос sm.gif. На тот вопрос, который Вы хотели, но не смогли задать, у меня тоже есть ответ - Только Вы сами сможете дать на него ответ, после того, как узнаете как и на чем работают написанные Вами программы. Никто за Вас на вопрос о объемах расходуемой памяти Вам ответить не сможет.


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


Участник
*

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



А зачем тогда в статье "FreeRTOS: практическое применение, часть 6 (устранение проблем)" (http://microsin.ru/content/view/1309/44/), в описании к функции uxTaskGetStackHighWaterMark написано следущее "...Эта величина остается неиспользованной, когда использование стека было самым большим. Возвращаемое значение, приближающееся к 0 означает, что имеется угроза переполнения стека задачи." Заранее извиняюсь за возможно тупой вопрос.
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Dec 19 2016, 05:56
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(l_fin_l @ Dec 19 2016, 07:14) *
А зачем тогда в статье "FreeRTOS: практическое применение, часть 6 (устранение проблем)" (http://microsin.ru/content/view/1309/44/), в описании к функции uxTaskGetStackHighWaterMark написано следущее "...Эта величина остается неиспользованной, когда использование стека было самым большим. Возвращаемое значение, приближающееся к 0 означает, что имеется угроза переполнения стека задачи." Заранее извиняюсь за возможно тупой вопрос.


обычно стек назначаются с некоторым (по возможности большим) запасом. Иначе самая минимальная переделка программы может ее сломать. На что и обращают ваше внимание в данной статье

ЗЫ что такое "большой запас" вы решаете сами, исходя из имеющихся у вас ресурсов и особенностей вашей задачи

Цитата(l_fin_l @ Dec 18 2016, 14:08) *
Правда я использую stm32, там вроде как используется для прерываний свой стек, но в случае FreeRTOS непонятно он использует свой стек(стек задачи), или отдельный?


Отдельный. Тот, что вы выделили на этапе линковки. Он используется вашими функциями до запуска шедулера; при запуске он очищается и далее используется в прерываниях
Go to the top of the page
 
+Quote Post
l_fin_l
сообщение Dec 19 2016, 10:04
Сообщение #7


Участник
*

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



Т.е. для задач используется свой стек, а для обработки прерываний MSP?
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Dec 19 2016, 10:05
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(l_fin_l @ Dec 19 2016, 13:04) *
Т.е. для задач используется свой стек, а для обработки прерываний MSP?


да. Переключение стеков PSP / MSP делает сам проц. А фриртос при переключении тасков меняет PSP на стек таска
Go to the top of the page
 
+Quote Post
l_fin_l
сообщение Dec 19 2016, 10:31
Сообщение #9


Участник
*

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



Цитата
да. Переключение стеков PSP / MSP делает сам проц. А фриртос при переключении тасков меняет PSP на стек таска

все понял, всем спасибо за помощь.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Dec 19 2016, 14:36
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 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
zltigo
сообщение Dec 20 2016, 21:37
Сообщение #13


Гуру
******

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



Цитата(jcxz @ Dec 20 2016, 13:19) *
А кто его тут понял? Вы? А Вы уверены, что то, как Вы его поняли, совпадает с тем, что имел в виду вопрошающий? laughing.gif

Я абсолютно уверен, что вопрошающий хотел другого. Но тот вопрос, который был задан сам по себе полностью понятен и имеет однозначный ответ.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

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

 


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


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