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

 
 
 
Reply to this topicStart new topic
> atmega8535 + scmRTOS + куча процессов, не хватает памяти
MBR
сообщение Sep 30 2010, 06:56
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 107
Регистрация: 26-09-10
Пользователь №: 59 748



Первые впечатления - Ртось приятная. Отличная документация, в компилированном виде мало места занимает. С шаблонами, автор, конечно, перемудрил местами...

Все понятно, кроме одного но. У атмеги8535 512 байт ОЗУ. Память закончилась уже на 4 процессе с размером стека 100. Собственно вопрос, имеет ли смысл использовать дальше RTOS, если процессов предполагается 8-9 - опрос разнотипных датчиков. Можно, теоретически, попробовать уменьшить количество процессов - но тогда весь смысл ртоси пойдет на нет.

Итак, если используем:

1. Как выглядит формула для расчета размера стека? Насколько можно его безболезненно уменьшить, чтобы это не привело к краху системы?
2. Отключение регистров. Если не использовать вещественные библиотеки - насколько сложно все перекомпилировать (gcc) и как в 3 версии с урезанными регистрами?

Если не используем:

1. Что из легких кооперативных ртосей посоветуете? Предпочтителен ++
2. В принципе, уже готова заготовка кооперативной ртоси - системный таймер тиков и шедулер процессов. Что еще я упустил?
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Sep 30 2010, 08:37
Сообщение #2


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(MBR @ Sep 30 2010, 10:56) *
1. Как выглядит формула для расчета размера стека? Насколько можно его безболезненно уменьшить, чтобы это не привело к краху системы?

Уменьшайте уровень вложенности внутри задач - уменьшится потребление стека.
Не объявляйте без нужды локальные переменные. Они тоже ложатся на стек.
Цитата
2. В принципе, уже готова заготовка кооперативной ртоси - системный таймер тиков и шедулер процессов. Что еще я упустил?

Элементы межпроцессного обмена и взаимодействия (очереди, сообщения, семафоры, мутексы)


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
MBR
сообщение Sep 30 2010, 09:19
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 107
Регистрация: 26-09-10
Пользователь №: 59 748



Цитата(MrYuran @ Sep 30 2010, 12:37) *
Уменьшайте уровень вложенности внутри задач - уменьшится потребление стека.
Не объявляйте без нужды локальные переменные. Они тоже ложатся на стек.

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

Тогда практический вопрос - 1 локальная переменная в 2 байта, один вызов фукнции. Сколько ставить размер стека в scmRTOS?

Цитата(MrYuran @ Sep 30 2010, 12:37) *
Элементы межпроцессного обмена и взаимодействия (очереди, сообщения, семафоры, мутексы)

Смысл от мьютексов в кооперативной RTOS?
Go to the top of the page
 
+Quote Post
ReAl
сообщение Sep 30 2010, 11:39
Сообщение #4


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Обратились к "драйверу" I2C на чтение из внешней EEPROM. Пока он в прерываниях делает обмен - ждём, отдавая управление другим задачам кооперативки. Одна из них захотела что-то вывести на индикатор, который тоже на I2C.
Как тут без мьютекса?


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Sep 30 2010, 13:19
Сообщение #5


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(MBR @ Sep 30 2010, 13:19) *
Тогда практический вопрос - 1 локальная переменная в 2 байта, один вызов фукнции. Сколько ставить размер стека в scmRTOS?

Сохраняется адрес возврата, плюс ваша переменная, плюс посмотрите, сколько раз ваша функция делает
push...
push...
push...
на входе.
Плюс вопрос, что будет при возникновении прерывания. Скорее всего, все издержки тоже в плюс.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Sep 30 2010, 13:30
Сообщение #6


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(MrYuran @ Sep 30 2010, 16:19) *
push...
на входе.

На входе (и не только) может быть ещё выделение участка стека инструкциями, изменяющими указатель стека.
Плюс могут вызываться библиотечные функции, расход стека которыми не известен без исходников.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Sep 30 2010, 16:29
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



На форуме этот вопрос. причем именно при использовании scmRTOS рассматривался и давались ссылки прямо на примеры, как можно измерить потребную глубину стека. Поищите!
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 30 2010, 20:29
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(MBR @ Sep 30 2010, 09:56) *
У атмеги8535 512 байт ОЗУ.
....
процессов предполагается 8-9
Да вы оптимист smile.gif Вы не указали компилятор, у ИАР так вообще два стека на каждый процес. Еще учтите, что весь контекст прерываний кладется на стек текущего процесса, значит в стеке каждого процесса надо зарезервировать место под контекст самого охочего до стека прерывания. Мое мнение - или менять проц, или отказываться от ОС.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Oct 1 2010, 05:44
Сообщение #9


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Сергей Борщ @ Oct 1 2010, 00:29) *
Мое мнение - или менять проц, или отказываться от ОС.

Да уж, на таких мощностях иногда стоит вопрос использовать ли си или впихивать невпихуемое на асме, как мы делали на 8253, а ОС, да ещё вытесняющая - разве что в качестве демки.
Может, и не нужна никакая ОС?
Если просто переключать задачи, без наворотов, может и прототред какой-нибудь сойдёт.
2 байта на задачу, стек общий.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
MBR
сообщение Oct 1 2010, 06:48
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 107
Регистрация: 26-09-10
Пользователь №: 59 748



Цитата(Сергей Борщ @ Oct 1 2010, 00:29) *
Да вы оптимист smile.gif Вы не указали компилятор, у ИАР так вообще два стека на каждый процес. Еще учтите, что весь контекст прерываний кладется на стек текущего процесса, значит в стеке каждого процесса надо зарезервировать место под контекст самого охочего до стека прерывания. Мое мнение - или менять проц, или отказываться от ОС.

Указал же - gcc. Спасибо за ответ, уже переделал на опрос датчиков в основном цикле без ОС. Увы, не так удобно и надежно, но работает
Go to the top of the page
 
+Quote Post

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

 


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


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