Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: atmega8535 + scmRTOS + куча процессов
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > scmRTOS
MBR
Первые впечатления - Ртось приятная. Отличная документация, в компилированном виде мало места занимает. С шаблонами, автор, конечно, перемудрил местами...

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

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

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

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

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

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

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

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

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

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

Смысл от мьютексов в кооперативной RTOS?
ReAl
Обратились к "драйверу" I2C на чтение из внешней EEPROM. Пока он в прерываниях делает обмен - ждём, отдавая управление другим задачам кооперативки. Одна из них захотела что-то вывести на индикатор, который тоже на I2C.
Как тут без мьютекса?
MrYuran
Цитата(MBR @ Sep 30 2010, 13:19) *
Тогда практический вопрос - 1 локальная переменная в 2 байта, один вызов фукнции. Сколько ставить размер стека в scmRTOS?

Сохраняется адрес возврата, плюс ваша переменная, плюс посмотрите, сколько раз ваша функция делает
push...
push...
push...
на входе.
Плюс вопрос, что будет при возникновении прерывания. Скорее всего, все издержки тоже в плюс.
IgorKossak
Цитата(MrYuran @ Sep 30 2010, 16:19) *
push...
на входе.

На входе (и не только) может быть ещё выделение участка стека инструкциями, изменяющими указатель стека.
Плюс могут вызываться библиотечные функции, расход стека которыми не известен без исходников.
sergeeff
На форуме этот вопрос. причем именно при использовании scmRTOS рассматривался и давались ссылки прямо на примеры, как можно измерить потребную глубину стека. Поищите!
Сергей Борщ
Цитата(MBR @ Sep 30 2010, 09:56) *
У атмеги8535 512 байт ОЗУ.
....
процессов предполагается 8-9
Да вы оптимист smile.gif Вы не указали компилятор, у ИАР так вообще два стека на каждый процес. Еще учтите, что весь контекст прерываний кладется на стек текущего процесса, значит в стеке каждого процесса надо зарезервировать место под контекст самого охочего до стека прерывания. Мое мнение - или менять проц, или отказываться от ОС.
MrYuran
Цитата(Сергей Борщ @ Oct 1 2010, 00:29) *
Мое мнение - или менять проц, или отказываться от ОС.

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

Указал же - gcc. Спасибо за ответ, уже переделал на опрос датчиков в основном цикле без ОС. Увы, не так удобно и надежно, но работает
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.