Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: рекомендации по использованию FreeRTOS
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > FreeRTOS
sergik_vrn
собираюсь использовать FreeRTOS для серьезного коммерческого проекта на АРМ. Очень хотелось бы услышать отзывы и рекомендации, особенно отрицательные. заранее благодарен
dch
На базе Linux, uCLinux полно таких устройств, смотри например www.uclinux.org
slabnoff
Интересно при чем тут Linux и uCLinux. Человек четко задал вопрос по FreeRTOS.

Юзаю оную для вполне серьезного проекта на Philips LPC2214.

Вполне доволен, только семафоры через очередь сообщений + только двоичные не понравились, думаю в свободное время подправить это дело.

А так основные преимущества перед uCOS-II - многозадачность карусельного типа, несколько более компактна (не принципиально), возможность работать в кооперативе, НЕ НАДО ПЛАТИТЬ БОЛЬШИЕ ДЕНЬГИ (точнее вообще не надо платить), чтобы использовать законно в коммерческих разработках, единственное автор просил сообщить где применяется.

С уважением, Андрей Слабнов
dxp
Цитата(slabnoff @ Oct 11 2005, 20:59)
Вполне доволен, только семафоры через очередь сообщений + только двоичные не понравились, думаю в свободное время подправить это дело.

А для каких применений Вам нужны счетные семафоры? Я понял, Вам их не хватает.

Цитата(slabnoff @ Oct 11 2005, 20:59)
А так основные преимущества перед uCOS-II - многозадачность карусельного типа

А зачем она? От нее, имхо, только неоднозначность в работе.

Цитата(slabnoff @ Oct 11 2005, 20:59)
несколько более компактна (не принципиально), возможность работать в кооперативе
*

В каком кооперативе?
slabnoff
Цитата
А для каких применений Вам нужны счетные семафоры? Я понял, Вам их не хватает.

Удобно иногда для буферов сообщений того же Ethernet. Понятно, что можно обойтись, но просто удобно, не приходится очередные велосипеды изобретать.

Цитата
А зачем она? От нее, имхо, только неоднозначность в работе.

Для медленных потоков с низкими приоритетами, к которым одно требование - исполняться, иногда применяю. Хотя вообще вы правы.

Цитата
В каком кооперативе?

Многозадачность добровольного типа, не вытесняющая, она же кооператив.
dxp
Цитата(slabnoff @ Oct 12 2005, 12:21)
Цитата
А для каких применений Вам нужны счетные семафоры? Я понял, Вам их не хватает.

Удобно иногда для буферов сообщений того же Ethernet. Понятно, что можно обойтись, но просто удобно, не приходится очередные велосипеды изобретать.

А не будет ли для буферов сообщений удобнее очереди использовать?

Цитата(slabnoff @ Oct 12 2005, 12:21)
Цитата
В каком кооперативе?

Многозадачность добровольного типа, не вытесняющая, она же кооператив.
*


Как это? Вытесняющия и кооперативная ОС в одном флаконе? Одновременно работают? Что-то не понимаю как это и, самое главное, зачем?
NickB
А по поводу EmbOS от Segger никто ничего сказать не знает ?
dxp
Цитата(NickB @ Oct 12 2005, 13:15)
А по поводу EmbOS от Segger никто ничего сказать не знает ?
*

А чего про нее знать. Она вся закрытая из себя, к сорцам добраться крайне трудно. По характеристикам (дему брал) оценивал в сравнении с uC/OS-II - пошустрее она немного (embOS) и футпринт, вроде, чуть поменьше. Уже подробностей не помню, давно было.
sergik_vrn
Цитата(slabnoff @ Oct 11 2005, 18:59)
Юзаю оную для вполне серьезного проекта на Philips LPC2214.

Вполне доволен, только семафоры через очередь сообщений + только двоичные не понравились, думаю в свободное время подправить это дело.
*

Большое спасибо за ответ! Вы меня обнадежили. А то спрашивал на разных форумах - в основном тишина, а закладываться на "темную лошадку" немного стремновато, проект серьезный.
Со временем надеюсь рассказать о достигнутых результатах
sergik_vrn
Цитата(dxp @ Oct 12 2005, 10:30)
Цитата(slabnoff @ Oct 12 2005, 12:21)
Цитата
В каком кооперативе?

Многозадачность добровольного типа, не вытесняющая, она же кооператив.
*


Как это? Вытесняющия и кооперативная ОС в одном флаконе? Одновременно работают? Что-то не понимаю как это и, самое главное, зачем?
*


разумеется, вытесняющая и корпоративная ОС одновременно работать не могут, да и речь не об этом. Просто планировщик задач FreeRTOS написан так, что может работать в одном из двух режимов либо так, либо так.
По поводу целесообразности применения обоих режимов на удивление очень внятно и толково написано в маленьком туториале на сайте www.freertos.org
dxp
Цитата(sergik_vrn @ Oct 12 2005, 15:31)
разумеется, вытесняющая и корпоративная ОС одновременно работать не могут, да и речь не об этом. Просто планировщик задач FreeRTOS написан так, что может работать в одном из двух режимов либо так, либо так.

Основной смысл кооперативной ОС - экономия ресурсов (когда их нет или когда их мало и не хватает для реализации целевой функциональности). Если ресурсов хватает, вытесняющая ОС - самое оно. Какой смысл иметь их обе сразу лично мне не понятно. Объясните, пожалуйста?

Цитата(sergik_vrn @ Oct 12 2005, 15:31)
По поводу целесообразности применения обоих режимов на удивление очень внятно и толково написано в маленьком туториале на сайте www.freertos.org
*

Не могли бы Вы дать точную ссылку?
sergik_vrn
Цитата(dxp @ Oct 12 2005, 14:08)
Цитата(sergik_vrn @ Oct 12 2005, 15:31)
разумеется, вытесняющая и корпоративная ОС одновременно работать не могут, да и речь не об этом. Просто планировщик задач FreeRTOS написан так, что может работать в одном из двух режимов либо так, либо так.

Основной смысл кооперативной ОС - экономия ресурсов (когда их нет или когда их мало и не хватает для реализации целевой функциональности). Если ресурсов хватает, вытесняющая ОС - самое оно. Какой смысл иметь их обе сразу лично мне не понятно. Объясните, пожалуйста?

объясняю. "сразу" обе ОС мы имеем только на уровне исходных кодов. на этапе компиляции из этих вариантов выбирается один, после чего мы имеем ту или иную ОС в зависимости от наших требований. удобство такого объединения я вижу в максимальной унификации библиотек (вместо двух разных ОС имеем два варианта одной)

Цитата(dxp @ Oct 12 2005, 14:08)
Цитата(sergik_vrn @ Oct 12 2005, 15:31)
По поводу целесообразности применения обоих режимов на удивление очень внятно и толково написано в маленьком туториале на сайте www.freertos.org
*

Не могли бы Вы дать точную ссылку?
*


http://www.freertos.org/tutorial/index.html
dch
Цитата(slabnoff @ Oct 11 2005, 17:59)
Интересно при чем тут Linux и uCLinux. Человек четко задал вопрос по FreeRTOS.

Да, я думал что FreeRTOS просто термин обозначающий свободно распостраняемые RTOS. Как говориться нужно корректно ставить вопросы.
Как там c TCP/IP стэком. Смотрю порт под AT91SAM7X уже есть, а вроде образцов еще нет?
dch
Вольный перевод текста лицензии Free RTOS:

Лицензия и Гарантия

FreeRTOS распостраняется под GNU GPL - с исключением, которое детально
описано ниже.

Взамен использования этого программного обеспечения по GPL я
требую выполнения двух пунктов:

1)Любое расширение, порт или исправление ошибок, должно быть доступно
для меня. При получении любой модификации я оценю лудший способ
включения данного изменения, и затем оно будет доступно через
FreeRTOS.org.

2) Вы должны отослать мне краткое описание любого проекта, который
использует FreeRTOS. Только для моего собственного интереса.

Пожалуйста, присылайте детальные описания любых улудшений, портов,
проектов по адресу "r.barry @ FreeRTOS.org" (для получения правильного
email адреса удалите пробелы до и после символа @).

Для получения полного текста GPL нажмите здесь.

Я включил нижеследующее исключение.
Исключение должно использоваться, если Вы собираетесь
использовать FreeRTOS (объединить) с proprietary product
(c продуктом являющимся вашей собственностью).

Если Вы решите использовать это исключение, то неплохо было бы
(пощряется - оригинально) чтобы вы сделали пожертвование проекту
FreeRTOS.

Для этого может использоваться ссылка слева.
Любое такое пожертвование полностью добровольно и не влияет
на поддержку или гарантии.

Данное исключение может спользоваться только, если Вы используете
FreeRTOS исключительно посредством API, которое опубликовано
на данном сайте, и при условии, результат не является самостоятельной
RTOS.

---------------------------------------------------------------------
ТЕКСТ ИСКЛЮЧЕНИЯ:

В результате статической или динамической линковки FreeRTOS и
других модулей появляется объединенное изделие (combined work),
основанноt на FreeRTOS. В результате, GPL General Public License
применима к этому целому объединеному изделию.

Как специальное исключение, правообладатель FreeRTOS
разрешает Вам линковать FreeRTOS к независимым модулям,
которые взаимодейтсвуют с FreeRTOS исключительно через FreeRTOS API,
независимо от лицензий, под которыми распространяются данные модули,
копировать, распространять результирующее изделие под выбранной
вами лицензией при условии, что каждая такая копия
результирующего изделия будет сопровождена присьменным указанием
номера используемой версии FreeRTOS, и вашим предложением поставить
эти исходные коды FreeRTOS, если получатель объединенного изделия
их запросит.

Исходные текста FreeRTOS, как измененные полностью или
частично так и оригинальные могут распространяться Вами
в соответствии с GNU General Public License плюс данное исключение.
Независимый модуль - это модуль, который не основанн на FreeRTOS и
не является производным относительно FreeRTOS.

Отметим, что те кто использует модифицированные версии FreeRTOS,
не обязаны предоставить это специальное исключение
для своих модифицированных версий; это - их выбор.
GNU General Public License разрешает выпустить модифицированную
версию без данного исключения; данное исключение также позволяет
выпустить модифицированную версию, на которую наложено это исключение.
---------------------------------------------------------------------
slabnoff
Цитата
Как там c TCP/IP стэком. Смотрю порт под AT91SAM7X уже есть, а вроде образцов еще нет?

Есть там uIP (мне не понравился), есть драйвер для WizNET (i2c). Я лично портировал/оптимизировал OpenTCP (Realtek RTL8019AS) для своих нужд, сейчас делаю драйвер для WizNET в шинном варианте.

Вообще с точки зрения лицензии и стоимости FreeRTOS на тот момент, когда я ориентировался в выборе ОСРВ, была самым оптимальным вариантом. Если бы uCOS-II не стоила таких неумеренных денег, возможно бы все-таки подписались на нее...

С другой стороны, все равно студентам курс по СРВ скоро читать, хочется свои знания обкатать... Думаю где-то через месяц-два свяжусь с автором FreeRTOS и будут там отдельные семафоры, не поверх очередей сообщений + счетные, а также возможно еще несколько вкусностей типа стека TCP/IP и драйвера под WizNET в шинном варианте, а не i2c + всякие драйвера устройств и т.п..

С уважением, Андрей Слабнов.
dch
Цитата(slabnoff @ Oct 16 2005, 13:13)
оптимальным вариантом

А чем не устраивает eCos?
Большой круг пользователей которые поддерживают саму ОС - вроде самый главный критерий оптимальности. Линковка своих приложений есть, без предоставления кода последних . И GPL на саму операционку.
slabnoff
Цитата
А чем не устраивает eCos?

Да в общем-то устраивает. Правда несколько громоздка она для простых применений. В добавок я gcc не люблю, привык к IAR. Хотя вообще говоря на досуге потихоньку с eCos разбираюсь.
slabnoff
В продолжение...
Разбирался тут с родными семафорами в FreeRTOS. Выяснилась неприятная вещь: ежели шлю сигнал через семафор от прерывания, а в некторой задаче жду его время N тиков операционки, например так:

Код
ISR:
....
xTaskWoken=xSemaphoreGiveFromISR(CalcSem,xTaskWoken);
....

Task:
....
if(xSemaphoreTake(CalcSem,N) == pdTRUE)
{
....
}          
....

то семафор реально захватывается задачей через N тиков операционки, а не сразу после того, как он был послан... В общем по-любому похоже надо свои семафоры заканчивать. Если кому интересно - думаю через месяц закончу, попробую заслать автору FreeRTOS. Если кто хочет потестировать - милости просим.
sergik_vrn
Цитата(slabnoff @ Oct 26 2005, 20:17)
В продолжение...
Разбирался тут с родными семафорами в FreeRTOS. Выяснилась неприятная вещь: ежели шлю сигнал через семафор от прерывания, а в некторой задаче жду его время N тиков операционки, например так:

Код
ISR:
....
xTaskWoken=xSemaphoreGiveFromISR(CalcSem,xTaskWoken);
....

Task:
....
if(xSemaphoreTake(CalcSem,N) == pdTRUE)
{
....
}          
....

то семафор реально захватывается задачей через N тиков операционки, а не сразу после того, как он был послан... В общем по-любому похоже надо свои семафоры заканчивать. Если кому интересно - думаю через месяц закончу, попробую заслать автору FreeRTOS. Если кто хочет потестировать - милости просим.
*


гм. а сам автор это как-нить комментирует? это же глюк, получается?
slabnoff
Руки не дошли пока ему написать, постараюсь в ближайшее время... Да и надо бы детальнее проверить...
zltigo
Цитата(slabnoff @ Oct 26 2005, 19:17) *
В общем по-любому похоже надо свои семафоры заканчивать. Если кому интересно - думаю через месяц закончу, попробую заслать автору FreeRTOS. Если кто хочет потестировать - милости просим.

Просьба держать в курсе!
Я похоже тоже избрал FreeRTOS, как отправную точку для создания
более ориентированной на себя системы. Вполне прозрачна на первый взгляд в своей начальной
простоте, хорошо читаемые исходники. До сих пор (скоро 15 лет) всегда делал более-менее свое ( в приглядку естественно ), а тут резко пошел на ARM...... Слишком бысто я в эту работу не вольюсь -
новый процессор, иннструментарий (правда готовый :-) ) - где-то порядка месяца на разборки :-(
в "рабочем порядке". Пока за вчера собрал (IAR) слегка помxав шашкой порт на LPC2124 - живет и общается с внешним миром.
zltigo
Цитата(dxp @ Oct 12 2005, 13:08) *
Основной смысл кооперативной ОС - экономия ресурсов (когда их нет или когда их мало и не хватает для реализации целевой функциональности). Если ресурсов хватает, вытесняющая ОС - самое оно. Какой смысл иметь их обе сразу лично мне не понятно. Объясните, пожалуйста?

В ресурсах и смысл :-(. Например, телефонная станция - сотни-десятки тысяч абонентов.
Процессы обслуживания одного абонента более, чем просты, не требуют много ресурсов но их МНОГО.
Кроме этих естественно есть и другие, серьезные. С вытясняющей весь пар уйдет в свисток и ляжет любая система. Можно, естественно написать один процесс, который все эти тысячи и будет обслуживать, а можно и совместить. В реальных случаях сложность сопоставима, но степень прозрачности работы _приложения_ отличается очень сильно. Особенно это выпирает, когда работают несколько людей _разной_ квалификации - лучше я систему сделаю, чем в конце-концов буду расхлебывать чей-то мутный-мутный код.
dxp
Цитата(zltigo @ Nov 17 2005, 14:51) *
Цитата(dxp @ Oct 12 2005, 13:08) *

Основной смысл кооперативной ОС - экономия ресурсов (когда их нет или когда их мало и не хватает для реализации целевой функциональности). Если ресурсов хватает, вытесняющая ОС - самое оно. Какой смысл иметь их обе сразу лично мне не понятно. Объясните, пожалуйста?

В ресурсах и смысл :-(. Например, телефонная станция - сотни-десятки тысяч абонентов.
Процессы обслуживания одного абонента более, чем просты, не требуют много ресурсов но их МНОГО.
Кроме этих естественно есть и другие, серьезные. С вытясняющей весь пар уйдет в свисток и ляжет любая система.

Это что ж, на каждого абонента отдельный процесс? Зачем? Вытесняющая ОС имеет главное преимущество - детерминированное время отклика на событие. Если все абоненты равнозначны по приоритету - то их и должен обслуживать один процесс. Если есть разные группы абонентов - например, есть группа VIP, которая должна быть обслужена вперед других, то ее обслуживание поместить в другой процесс с более высоким приоритетом. Только и всего.

В общем, при использовании RTOS тоже ведь надо думать и грамотно проектировать систему. В этом случае все прекрасно ложится, ничего "в свисток" не уходит.
zltigo
Цитата(dxp @ Nov 17 2005, 14:07) *
Это что ж, на каждого абонента отдельный процесс? Зачем?

Процессы ОЧЕНЬ простые, код вылизывается, затрат на переключения контекста практически нет.
Лет ...надцать назад была еще одна причина - 8085/Z80 прцессор с 8K очень дорогой ROM,
ну RAM было больше и дешевле - 256 процессов и заметная экономия кода.

Ну а о том, что можно и по другому - я и сам уже писал, да и делал, но уже на AM186CC.
Предстваляю все это себе очень хорошо. В принципе можно считать, что тот самый один процесс,
который их всех одинаковых обслуживает является сам по себе небольшим "кооперативчиком" для
которого и создастся своя "системка".
Пока на подсознательном уровне "хочу", но похоже, что мощность контроллеров растет быстрее,
чем я пишу :-) и возможно со всеми эти мелочными заморочками следует завязывать :-).
zltigo
Цитата(slabnoff @ Nov 2 2005, 15:55) *

Наступил на проблему - незаметно съел heap, а у автора IDLE Task
создается из vTaskStartScheduler( ) последней! Ну и не хватило памяти под стек и не запустилась,
а за ней и шедулер не стартовал и полетело все далеко.
Три часа пляски - я уже думал отладчиком пользоваться придется :-).
До нехватки памяти я довольно быстро добрался, но думал менеджер памяти шалит - читал-читал..
В общем для профилактики дописал системный вызов xIdleTaskCreate( ) и поставил его
перед всеми, а в vTaskStartScheduler( ) для совместимости добавил контроль на запущенную
IDLE и создание ее в случае отсутствия. Хотя, наверное, и startup запихнуть можно.
FreeCoderr
Тож недавно начал юзать эту ось. Портировал на cx805 (ASIC телефона sgh-c100), работает. Были небольшие замороки с частью startup, исправить несложно. Для меня неудобно, что в ходе переключения контекста вызывается SWI (у меня свои виды на использование этого прерывания). А так, в целом нареканий пока нет.
zltigo
Цитата(FreeCoderr @ Nov 21 2005, 20:48) *
Для меня неудобно, что в ходе переключения контекста вызывается SWI (у меня свои виды на использование этого прерывания).

Такие большие виды, что 8/24 битного поля 'соmment' не хватает для того, чтобы пожертвовать
одно значение для переключения контекста :-) ? Я понимаю, что текущий "порт" автора под
ARM сделан левой ногой, дабы "был", но подправить с использованием 'comment' что мешает?

В "portmacro.h"
#define portYIELD() asm ( "SWI 0" );

нолик заменить на любое число которое не жалко....

В "startup.s79" что-то типа:

ldr r0, [r14, #-4] ; Получить тело SWI инструкции
bic r0, r0, #0xFF000000 ; Почистить поля 'condinion' и 'F'

добавить и ветвится по 'r0' как душа пожелает
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.