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

 
 
> Расход стека
DreamTwister
сообщение Jan 30 2009, 12:47
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 71
Регистрация: 5-08-08
Из: Челябинск
Пользователь №: 39 436



FreeRTOS 4.4.0
Микроконтроллер lpc2142

Задачи потребляют очень много стека. Хочется узнать на что они его расходуют.
Просто очень странно, что задача, которая управляет зажиганием 2-х светодиодов, требует 220 байт под стек!
Можно ли с этим что-то сделать?
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 14)
FormatCft
сообщение Jan 30 2009, 16:37
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 331
Регистрация: 22-07-08
Из: Р О С С И Я
Пользователь №: 39 145



Цитата(DreamTwister @ Jan 30 2009, 17:47) *
FreeRTOS 4.4.0
Микроконтроллер lpc2142

Задачи потребляют очень много стека. Хочется узнать на что они его расходуют.
Просто очень странно, что задача, которая управляет зажиганием 2-х светодиодов, требует 220 байт под стек!
Можно ли с этим что-то сделать?


каким сделали такой и есть. 


Основная причина множество локальных данных. Большие массивы структуры.

У меня все потоки используют по 120байт, какими бы тяжелыми они не были.

Главное пользоваться почаще malloc(...), free(...)  rolleyes.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 30 2009, 20:28
Сообщение #3


Гуру
******

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



Цитата(DreamTwister @ Jan 30 2009, 15:47) *
задача, которая управляет зажиганием 2-х светодиодов, требует 220 байт под стек!


Могу только посторить вопрос - так зачем-же Вы ее такую дивную написали? 


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ddiimmaa
сообщение Jan 31 2009, 01:40
Сообщение #4


Участник
*

Группа: Validating
Сообщений: 27
Регистрация: 12-12-08
Из: Ижевск
Пользователь №: 42 419



во FreeRTOS стек ВСЕХ задач используют обработчики прерываний

может в этом косяк?
Go to the top of the page
 
+Quote Post
DreamTwister
сообщение Feb 2 2009, 05:08
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 71
Регистрация: 5-08-08
Из: Челябинск
Пользователь №: 39 436



Что-то тут не так...

Закрыл комментариями все содержимое задачи, оставил только for(;;). Потребление не изменилось. Может проблема в том, что для "измерения" потребления стека я использую vTaskList?

Может имеет смысл заменить heap_1.c на что-то более подходящее?
Go to the top of the page
 
+Quote Post
ddiimmaa
сообщение Feb 4 2009, 20:45
Сообщение #6


Участник
*

Группа: Validating
Сообщений: 27
Регистрация: 12-12-08
Из: Ижевск
Пользователь №: 42 419



Цитата(DreamTwister @ Feb 2 2009, 09:08) *
Что-то тут не так...

Закрыл комментариями все содержимое задачи, оставил только for(;;). Потребление не изменилось. Может проблема в том, что для "измерения" потребления стека я использую vTaskList?

Да как вы не понимаете не задача ваш стек ест а обработчик прерываний


--------------------
Вот пишу ОС, может кому пригодиться ;-)
скачайте http://sourceforge.net/projects/irtos/
и вот сайт ещё http://irtos.sourceforge.net/
Go to the top of the page
 
+Quote Post
HARMHARM
сообщение Feb 7 2009, 15:02
Сообщение #7


читатель даташитов
****

Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999



Цитата(ddiimmaa @ Feb 4 2009, 22:45) *
Да как вы не понимаете не задача ваш стек ест а обработчик прерываний

Вообще-то у ARM под прерывания отдельный стек... Да и сверхоперативных регистров тоже отдельный набор...
Go to the top of the page
 
+Quote Post
DreamTwister
сообщение Feb 9 2009, 07:38
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 71
Регистрация: 5-08-08
Из: Челябинск
Пользователь №: 39 436



Цитата(HARMHARM @ Feb 7 2009, 20:02) *
Вообще-то у ARM под прерывания отдельный стек... Да и сверхоперативных регистров тоже отдельный набор...


Вот я тоже не понимаю, если прерывание потребляет стек задачи, то получается, что если я проинициализирую еще парочку прерываний, то у меня по килобайту стека на каждую задачу уходить будет?

Вот и охота разобраться, как и на что расходуется стек во FreeRTOS.
Go to the top of the page
 
+Quote Post
ddiimmaa
сообщение Feb 14 2009, 14:19
Сообщение #9


Участник
*

Группа: Validating
Сообщений: 27
Регистрация: 12-12-08
Из: Ижевск
Пользователь №: 42 419



Цитата(HARMHARM @ Feb 7 2009, 19:02) *
Вообще-то у ARM под прерывания отдельный стек... Да и сверхоперативных регистров тоже отдельный набор...


А извините не знал. Каюсь у меня AVR


--------------------
Вот пишу ОС, может кому пригодиться ;-)
скачайте http://sourceforge.net/projects/irtos/
и вот сайт ещё http://irtos.sourceforge.net/
Go to the top of the page
 
+Quote Post
vitko
сообщение Jan 26 2010, 14:28
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 8-03-06
Из: Kyiv, UA
Пользователь №: 15 066



Объясните пожалуйста.

Правильно ли я понимаю, что в freeRTOS прерывания используют стек текущей задачи, и соответственно стеки задач должны иметь запас на хранение контекста(-ов) прерываний ?

В самой freeRTOS нету средств для, скажем, переключения всех прерываний на отдельный стек, как в scmRTOS ? Ддя небольших процессоров было бы нелишне.

Сообщение отредактировал vitko - Jan 26 2010, 14:41
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 26 2010, 21:21
Сообщение #11


Гуру
******

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



Цитата(vitko @ Jan 26 2010, 17:28) *
Объясните пожалуйста.

Полностью зависит от собственно контроллера и того, как написан конкретный порт.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Aurochs
сообщение Jan 28 2010, 17:00
Сообщение #12


Ортодокс
***

Группа: Свой
Сообщений: 219
Регистрация: 26-10-07
Из: Смела, Украина
Пользователь №: 31 775



Цитата(vitko @ Jan 26 2010, 16:28) *
В самой freeRTOS нету средств для, скажем, переключения всех прерываний на отдельный стек, как в scmRTOS ?.

А зачем? Либо м/к поддерживает такую возможность на уровне архитектуры и тогда RTOS это принимает как данность. Либо не поддерживает и тогда IMHO лучше облегчать прерывания и обработку, активно кушающую стек, оформлять как отдельную задачу, чем делать программные манипуляции на грани фола связанные с переключением стека.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 28 2010, 17:07
Сообщение #13


Гуру
******

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



Цитата(Aurochs @ Jan 28 2010, 20:00) *
чем делать программные манипуляции на грани фола связанные с переключением стека.

Ну а фол-то где? Несколько команд изменяющих и восстанавливающих указатель стека - добавляются по месту легко и непренужденно. Если, оно конечно, это надо.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
vitko
сообщение Jan 29 2010, 14:01
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 8-03-06
Из: Kyiv, UA
Пользователь №: 15 066



Цитата(zltigo @ Jan 28 2010, 19:07) *
... Несколько команд изменяющих и восстанавливающих указатель стека - добавляются по месту легко и непренужденно. Если, оно конечно, это надо.


В мелких процессорах (типа AVR) может и понадобиться.
А если еще и переключение контекста делать в каком-будь специально выделенном программом прерывании, а в прерывании от сист.таймера его только инициировать, то и вообще не надо по каждому тику сохранять/восстанавливать контекст. Но это уже будет совсем как в scmRTOS :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 29 2010, 15:18
Сообщение #15


Гуру
******

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



Цитата(vitko @ Jan 29 2010, 17:01) *
Но это уже будет совсем как в scmRTOS :-)

Поскольку в ней как класс отсутствуют задачи одинакового приоритета, то такое упрощение имеет эффект. В системах поддерживающих задачи одинакового приоритета они должны будут переключаться по КАЖДОМУ тику.


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

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 22:14
Рейтинг@Mail.ru


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