DreamTwister 0 30 января, 2009 Опубликовано 30 января, 2009 · Жалоба FreeRTOS 4.4.0 Микроконтроллер lpc2142 Задачи потребляют очень много стека. Хочется узнать на что они его расходуют. Просто очень странно, что задача, которая управляет зажиганием 2-х светодиодов, требует 220 байт под стек! Можно ли с этим что-то сделать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
FormatCft 0 30 января, 2009 Опубликовано 30 января, 2009 · Жалоба FreeRTOS 4.4.0 Микроконтроллер lpc2142 Задачи потребляют очень много стека. Хочется узнать на что они его расходуют. Просто очень странно, что задача, которая управляет зажиганием 2-х светодиодов, требует 220 байт под стек! Можно ли с этим что-то сделать? каким сделали такой и есть. Основная причина множество локальных данных. Большие массивы структуры. У меня все потоки используют по 120байт, какими бы тяжелыми они не были. Главное пользоваться почаще malloc(...), free(...) :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 30 января, 2009 Опубликовано 30 января, 2009 · Жалоба задача, которая управляет зажиганием 2-х светодиодов, требует 220 байт под стек! Могу только посторить вопрос - так зачем-же Вы ее такую дивную написали? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pochta 0 31 января, 2009 Опубликовано 31 января, 2009 · Жалоба во FreeRTOS стек ВСЕХ задач используют обработчики прерываний может в этом косяк? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DreamTwister 0 2 февраля, 2009 Опубликовано 2 февраля, 2009 · Жалоба Что-то тут не так... Закрыл комментариями все содержимое задачи, оставил только for(;;). Потребление не изменилось. Может проблема в том, что для "измерения" потребления стека я использую vTaskList? Может имеет смысл заменить heap_1.c на что-то более подходящее? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pochta 0 4 февраля, 2009 Опубликовано 4 февраля, 2009 · Жалоба Что-то тут не так... Закрыл комментариями все содержимое задачи, оставил только for(;;). Потребление не изменилось. Может проблема в том, что для "измерения" потребления стека я использую vTaskList? Да как вы не понимаете не задача ваш стек ест а обработчик прерываний Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HARMHARM 0 7 февраля, 2009 Опубликовано 7 февраля, 2009 · Жалоба Да как вы не понимаете не задача ваш стек ест а обработчик прерываний Вообще-то у ARM под прерывания отдельный стек... Да и сверхоперативных регистров тоже отдельный набор... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DreamTwister 0 9 февраля, 2009 Опубликовано 9 февраля, 2009 · Жалоба Вообще-то у ARM под прерывания отдельный стек... Да и сверхоперативных регистров тоже отдельный набор... Вот я тоже не понимаю, если прерывание потребляет стек задачи, то получается, что если я проинициализирую еще парочку прерываний, то у меня по килобайту стека на каждую задачу уходить будет? Вот и охота разобраться, как и на что расходуется стек во FreeRTOS. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pochta 0 14 февраля, 2009 Опубликовано 14 февраля, 2009 · Жалоба Вообще-то у ARM под прерывания отдельный стек... Да и сверхоперативных регистров тоже отдельный набор... А извините не знал. Каюсь у меня AVR Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vitko 0 26 января, 2010 Опубликовано 26 января, 2010 (изменено) · Жалоба Объясните пожалуйста. Правильно ли я понимаю, что в freeRTOS прерывания используют стек текущей задачи, и соответственно стеки задач должны иметь запас на хранение контекста(-ов) прерываний ? В самой freeRTOS нету средств для, скажем, переключения всех прерываний на отдельный стек, как в scmRTOS ? Ддя небольших процессоров было бы нелишне. Изменено 26 января, 2010 пользователем vitko Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 26 января, 2010 Опубликовано 26 января, 2010 · Жалоба Объясните пожалуйста. Полностью зависит от собственно контроллера и того, как написан конкретный порт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aurochs 0 28 января, 2010 Опубликовано 28 января, 2010 · Жалоба В самой freeRTOS нету средств для, скажем, переключения всех прерываний на отдельный стек, как в scmRTOS ?. А зачем? Либо м/к поддерживает такую возможность на уровне архитектуры и тогда RTOS это принимает как данность. Либо не поддерживает и тогда IMHO лучше облегчать прерывания и обработку, активно кушающую стек, оформлять как отдельную задачу, чем делать программные манипуляции на грани фола связанные с переключением стека. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 28 января, 2010 Опубликовано 28 января, 2010 · Жалоба чем делать программные манипуляции на грани фола связанные с переключением стека. Ну а фол-то где? Несколько команд изменяющих и восстанавливающих указатель стека - добавляются по месту легко и непренужденно. Если, оно конечно, это надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vitko 0 29 января, 2010 Опубликовано 29 января, 2010 · Жалоба ... Несколько команд изменяющих и восстанавливающих указатель стека - добавляются по месту легко и непренужденно. Если, оно конечно, это надо. В мелких процессорах (типа AVR) может и понадобиться. А если еще и переключение контекста делать в каком-будь специально выделенном программом прерывании, а в прерывании от сист.таймера его только инициировать, то и вообще не надо по каждому тику сохранять/восстанавливать контекст. Но это уже будет совсем как в scmRTOS :-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 29 января, 2010 Опубликовано 29 января, 2010 · Жалоба Но это уже будет совсем как в scmRTOS :-) Поскольку в ней как класс отсутствуют задачи одинакового приоритета, то такое упрощение имеет эффект. В системах поддерживающих задачи одинакового приоритета они должны будут переключаться по КАЖДОМУ тику. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться