l_fin_l 0 18 декабря, 2016 Опубликовано 18 декабря, 2016 · Жалоба Здравствуйте, очень интересует вопрос, какое минимальное значение свободного стека должно быть для стабильной работы задачи? Измеряю свободное место в стеке задачи функцией uxTaskGetStackHighWaterMark(). Заранее спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 18 декабря, 2016 Опубликовано 18 декабря, 2016 · Жалоба Здравствуйте, очень интересует вопрос, какое минимальное значение свободного стека должно быть для стабильной работы задачи? 0, но с учетом методики измерения - одно слово. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
l_fin_l 0 18 декабря, 2016 Опубликовано 18 декабря, 2016 · Жалоба А для обработки прерываний? Правда я использую stm32, там вроде как используется для прерываний свой стек, но в случае FreeRTOS непонятно он использует свой стек(стек задачи), или отдельный? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 18 декабря, 2016 Опубликовано 18 декабря, 2016 · Жалоба А для обработки прерываний? Правда я использую stm32, там вроде как используется для прерываний свой стек, но в случае FreeRTOS непонятно он использует свой стек(стек задачи), или отдельный? Какая разница? Вы получили абсолютно точный ответ НА СВОЙ ВОПРОС для любого случая :). Подозреваю, что Вы хотели узнать другое, но не смогли задать вопрос :). На тот вопрос, который Вы хотели, но не смогли задать, у меня тоже есть ответ - Только Вы сами сможете дать на него ответ, после того, как узнаете как и на чем работают написанные Вами программы. Никто за Вас на вопрос о объемах расходуемой памяти Вам ответить не сможет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
l_fin_l 0 19 декабря, 2016 Опубликовано 19 декабря, 2016 · Жалоба А зачем тогда в статье "FreeRTOS: практическое применение, часть 6 (устранение проблем)" (http://microsin.ru/content/view/1309/44/), в описании к функции uxTaskGetStackHighWaterMark написано следущее "...Эта величина остается неиспользованной, когда использование стека было самым большим. Возвращаемое значение, приближающееся к 0 означает, что имеется угроза переполнения стека задачи." Заранее извиняюсь за возможно тупой вопрос. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Johnny81 0 19 декабря, 2016 Опубликовано 19 декабря, 2016 · Жалоба А зачем тогда в статье "FreeRTOS: практическое применение, часть 6 (устранение проблем)" (http://microsin.ru/content/view/1309/44/), в описании к функции uxTaskGetStackHighWaterMark написано следущее "...Эта величина остается неиспользованной, когда использование стека было самым большим. Возвращаемое значение, приближающееся к 0 означает, что имеется угроза переполнения стека задачи." Заранее извиняюсь за возможно тупой вопрос. обычно стек назначаются с некоторым (по возможности большим) запасом. Иначе самая минимальная переделка программы может ее сломать. На что и обращают ваше внимание в данной статье ЗЫ что такое "большой запас" вы решаете сами, исходя из имеющихся у вас ресурсов и особенностей вашей задачи Правда я использую stm32, там вроде как используется для прерываний свой стек, но в случае FreeRTOS непонятно он использует свой стек(стек задачи), или отдельный? Отдельный. Тот, что вы выделили на этапе линковки. Он используется вашими функциями до запуска шедулера; при запуске он очищается и далее используется в прерываниях Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
l_fin_l 0 19 декабря, 2016 Опубликовано 19 декабря, 2016 · Жалоба Т.е. для задач используется свой стек, а для обработки прерываний MSP? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Johnny81 0 19 декабря, 2016 Опубликовано 19 декабря, 2016 · Жалоба Т.е. для задач используется свой стек, а для обработки прерываний MSP? да. Переключение стеков PSP / MSP делает сам проц. А фриртос при переключении тасков меняет PSP на стек таска Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
l_fin_l 0 19 декабря, 2016 Опубликовано 19 декабря, 2016 · Жалоба да. Переключение стеков PSP / MSP делает сам проц. А фриртос при переключении тасков меняет PSP на стек таска все понял, всем спасибо за помощь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 172 19 декабря, 2016 Опубликовано 19 декабря, 2016 · Жалоба 0, но с учетом методики измерения - одно слово. А контекст задачи где FreeRTOS сохраняет? Разве не на стеке задачи? По-крайней мере часть контекста, сохраняемая при срабатывании ISR, будет на стеке задачи. Если конечно не всё исполнение идёт в Handler-режиме... :) Если конечно вопрос касается Cortex-M, о чём здесь можно только догадываться..... обычно стек назначаются с некоторым (по возможности большим) запасом. Иначе самая минимальная переделка программы может ее сломать. На что и обращают ваше внимание в данной статье Не нужно даже переделки. Достаточно изменить ключи оптимизации или обновить компилятор. ;) Отдельный. Тот, что вы выделили на этапе линковки. Он используется вашими функциями до запуска шедулера; при запуске он очищается и далее используется в прерываниях Вообще-то при входе в ISR стэкинг делается в тот стек, который был активным на момент прерывания, а уже потом делается переключение стеков. Если конечно исполнение исходно шло в Thread режиме. Таким образом контекст прерванной задачи оказывается уже на её стеке и не нужно его копировать из Handler-стека куда-то в область данных задачи (как было на ARM7). А уже дальнейшая работа ISR (и всех вложенных более приоритетных) идёт на Handler-стеке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 19 декабря, 2016 Опубликовано 19 декабря, 2016 · Жалоба А контекст задачи где FreeRTOS сохраняет? Разве не на стеке задачи? По-крайней мере часть контекста, сохраняемая при срабатывании ISR, будет на стеке задачи. Если конечно не всё исполнение идёт в Handler-режиме... :) Если конечно вопрос касается Cortex-M, о чём здесь можно только догадываться..... Вы не поняли ВОПРОСА и соответсвенно ответа :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 172 20 декабря, 2016 Опубликовано 20 декабря, 2016 · Жалоба Вы не поняли ВОПРОСА и соответсвенно ответа :( А кто его тут понял? Вы? А Вы уверены, что то, как Вы его поняли, совпадает с тем, что имел в виду вопрошающий? :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 20 декабря, 2016 Опубликовано 20 декабря, 2016 · Жалоба А кто его тут понял? Вы? А Вы уверены, что то, как Вы его поняли, совпадает с тем, что имел в виду вопрошающий? :laughing: Я абсолютно уверен, что вопрошающий хотел другого. Но тот вопрос, который был задан сам по себе полностью понятен и имеет однозначный ответ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться