Перейти к содержанию
    

Объем стека для работы задачи

Здравствуйте, очень интересует вопрос, какое минимальное значение свободного стека должно быть для стабильной работы задачи? Измеряю свободное место в стеке задачи функцией uxTaskGetStackHighWaterMark(). Заранее спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте, очень интересует вопрос, какое минимальное значение свободного стека должно быть для стабильной работы задачи?

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А для обработки прерываний? Правда я использую stm32, там вроде как используется для прерываний свой стек, но в случае FreeRTOS непонятно он использует свой стек(стек задачи), или отдельный?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А для обработки прерываний? Правда я использую stm32, там вроде как используется для прерываний свой стек, но в случае FreeRTOS непонятно он использует свой стек(стек задачи), или отдельный?

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

 

Правда я использую stm32, там вроде как используется для прерываний свой стек, но в случае FreeRTOS непонятно он использует свой стек(стек задачи), или отдельный?

 

Отдельный. Тот, что вы выделили на этапе линковки. Он используется вашими функциями до запуска шедулера; при запуске он очищается и далее используется в прерываниях

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Т.е. для задач используется свой стек, а для обработки прерываний MSP?

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

все понял, всем спасибо за помощь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

А контекст задачи где FreeRTOS сохраняет? Разве не на стеке задачи?

По-крайней мере часть контекста, сохраняемая при срабатывании ISR, будет на стеке задачи. Если конечно не всё исполнение идёт в Handler-режиме... :)

Если конечно вопрос касается Cortex-M, о чём здесь можно только догадываться.....

 

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

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

 

Отдельный. Тот, что вы выделили на этапе линковки. Он используется вашими функциями до запуска шедулера; при запуске он очищается и далее используется в прерываниях

Вообще-то при входе в ISR стэкинг делается в тот стек, который был активным на момент прерывания, а уже потом делается переключение стеков. Если конечно исполнение исходно шло в Thread режиме.

Таким образом контекст прерванной задачи оказывается уже на её стеке и не нужно его копировать из Handler-стека куда-то в область данных задачи (как было на ARM7).

А уже дальнейшая работа ISR (и всех вложенных более приоритетных) идёт на Handler-стеке.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А контекст задачи где FreeRTOS сохраняет? Разве не на стеке задачи?

По-крайней мере часть контекста, сохраняемая при срабатывании ISR, будет на стеке задачи. Если конечно не всё исполнение идёт в Handler-режиме... :)

Если конечно вопрос касается Cortex-M, о чём здесь можно только догадываться.....

Вы не поняли ВОПРОСА и соответсвенно ответа :(

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы не поняли ВОПРОСА и соответсвенно ответа :(

А кто его тут понял? Вы? А Вы уверены, что то, как Вы его поняли, совпадает с тем, что имел в виду вопрошающий? :laughing:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А кто его тут понял? Вы? А Вы уверены, что то, как Вы его поняли, совпадает с тем, что имел в виду вопрошающий? :laughing:

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...