Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: RTOS с единым стеком
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
scifi
Добрый день!
Давным-давно мне довелось использовать Keil RTX166 Tiny. Там есть интересная фича: задачи используют единый стек, и при переключении задач стек передвигается нужным образом автоматически:
RTX166 Tiny Stack Management
Таким образом, нет нужды выделять отдельный стек для каждой задачи, то есть имеет место существенная экономия памяти.
Вопрос: где найти RTOS с такой фичей, которую можно прикрутить к ARM и Coldfire?
alcosar
sst
http://state-machine.com/
zltigo
Цитата(scifi @ Mar 28 2010, 11:55) *
Там есть интересная фича: задачи используют единый стек, и при переключении задач....

Это не фича, это обманка, ибо "переключения задач" собственно быть не может sad.gif. Со стеком при прерывании задачи в произвольном месте все очень просто - либо он нужен такого размера каждой из задач, либо нет. Посему просто надо четко представлять необходимые размеры стеков для вытесняющих задач и комбинировать их с кооперативными задачами имеющими по определению общий стек.
scifi
Цитата(zltigo @ Mar 28 2010, 18:04) *
Это не фича, это обманка, ибо "переключения задач" собственно быть не может sad.gif. Со стеком при прерывании задачи в произвольном месте все очень просто - либо он нужен такого размера каждой из задач, либо нет. Посему просто надо четко представлять необходимые размеры стеков для вытесняющих задач и комбинировать их с кооперативными задачами имеющими по определению общий стек.

Что такое "переключение задач" и почему его "быть не может" спорить не стану. Одно знаю точно: многопотоковость имела место. Да и не в этом вопрос.
Переформулирую: какие есть RTOS (или как их там, прошу к терминам не предираться), в которых не выделяется отдельный стек для каждой задачи, а используется общий? С целью экономии памяти, естественно.
Спасибо alcosar за ссылку про SST. На что-то похожее натыкался, когда читал про smx RTOS и One-Shot Tasks.
Я понимаю, что единый стек требует жертв. Например, в RTX166 Tiny нельзя использовать указатели на локальные переменные, так как стек "двигается" при переключении контекста. Видел также Salvo RTOS, где ограничения ещё более строгие, но подкупает крайняя нетребовательность к объёму памяти.
Все эти подходы имеют право на жизнь в зависимости от задачи. Я просто хочу понять, какие бывают варианты.
zltigo
Цитата(scifi @ Mar 28 2010, 22:58) *
Я понимаю, что единый стек требует жертв.

Слишком большие жертвы sad.gif. И главное зачем? От фонаря с явным запасом выбрать один стек и при этом никак не решить проблему правильного выбора размера стека? Надо решать проблему оптимального выбора стека для задач и тогда сумма стеков по крайней мере не будет резко отличаться от тяжко прогнозируемого "объединенного" стека и при этом не иметь ограничений.


Цитата(scifi @ Mar 28 2010, 22:58) *
Видел также Salvo RTOS, где ограничения ещё более строгие, но подкупает крайняя нетребовательность к объёму памяти.

Вот и используйте, как уже писал, там где возможно и кооперативные задачи, как у Salvo. Сочетайте ОБА подхода,а не сводите все к примитиву в угоду идее бездумной экономии стека.
scifi
Цитата(zltigo @ Mar 29 2010, 00:35) *
Вот и используйте, как уже писал, там где возможно и кооперативные задачи, как у Salvo. Сочетайте ОБА подхода,а не сводите все к примитиву в угоду идее бездумной экономии стека.

Значит, есть RTOS, в которых можно сочетать подходы "единый стек" и "раздельный стек"? Если не трудно, назовите примеры.
zltigo
Цитата(scifi @ Mar 28 2010, 23:55) *
Если не трудно, назовите примеры.

Free RTOS kernel - preemptive, cooperative and hybrid configuration options.
The SafeRTOS derivative product provides a high level of confidence in the code integrity.
Official support for 23 architectures (counting ARM7 and ARM Cortex M3 as one architecture each).
FreeRTOS-MPU supports the Cortex M3 Memory Protection Unit (MPU).
Designed to be small, simple and easy to use. Typically a kernel binary image will be in the region of 4K to 9K bytes.
Very portable code structure predominantly written in C.
Supports both tasks and co-routines.
Powerful execution trace functionality.
Stack overflow detection options.
No software restriction on the number of tasks that can be created.
No software restriction on the number of priorities that can be used.
No restrictions imposed on priority assignment - more than one task can be assigned the same priority.
Queues, binary semaphores, counting semaphores, recursive semaphores and mutexes for communication and synchronisation between tasks, or between tasks and interrupts.
Mutexes with priority inheritance.
Free development tools (Cortex-M3, ARM7, MSP430, H8/S, AMD, AVR, x86 and 8051 ports).
Free embedded software source code.
Royalty free.
Cross development from a standard Windows host.
Pre-configured demo applications for selected single board computers allowing 'out of the box' operation and fast learning curve.
dch
вообщето отдельный стэк это победа эмбедеров, написанием полностью своего кода сейчас мало кто занимается, linux привычной вещью применительно к железке в пять баксов
scifi
Спасибо. Что-то я не сразу сообразил, что FreeRTOS Co-routines - это практически то же самое, что и у Salvo RTOS.
scifi
Оказывается, вот что мне нужно было:

Coroutines in C

Век живи - век учись.

Надеюсь, кому-нибудь ещё пригодится.
ReAl
Цитата(scifi @ Mar 29 2010, 12:09) *
Оказывается, вот что мне нужно было:
Coroutines in C
О, а теперь коленом, когда уже знаете, что нужно - поищите по форуму слова
coroutines
сопрограммы
protothreads


и на руб зараза ещё TinyTimber
scifi
Что-то у Вас много зачёркнуто. Нынче компьютеры в моде, не обязательно пользоваться пишущей машинкой, маркером и корректором :-)
Спасибо за ссылки. Я через гугл на это всё вышел. Понравилась "библиотека" Protothreads от Adam Dunkels. Хороший парень этот Адам Дункельс: подарил нам Lwip, uIP, а теперь ещё и Protothreads. Побольше бы таких...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.