|
рекомендации по использованию FreeRTOS, в коммерческих проектах |
|
|
|
Oct 18 2005, 07:01
|
Частый гость
 
Группа: Свой
Сообщений: 82
Регистрация: 26-09-05
Пользователь №: 8 955

|
Цитата А чем не устраивает eCos? Да в общем-то устраивает. Правда несколько громоздка она для простых применений. В добавок я gcc не люблю, привык к IAR. Хотя вообще говоря на досуге потихоньку с eCos разбираюсь.
|
|
|
|
|
Oct 26 2005, 16:17
|
Частый гость
 
Группа: Свой
Сообщений: 82
Регистрация: 26-09-05
Пользователь №: 8 955

|
В продолжение... Разбирался тут с родными семафорами в FreeRTOS. Выяснилась неприятная вещь: ежели шлю сигнал через семафор от прерывания, а в некторой задаче жду его время N тиков операционки, например так: Код ISR: .... xTaskWoken=xSemaphoreGiveFromISR(CalcSem,xTaskWoken); ....
Task: .... if(xSemaphoreTake(CalcSem,N) == pdTRUE) { .... } .... то семафор реально захватывается задачей через N тиков операционки, а не сразу после того, как он был послан... В общем по-любому похоже надо свои семафоры заканчивать. Если кому интересно - думаю через месяц закончу, попробую заслать автору FreeRTOS. Если кто хочет потестировать - милости просим.
|
|
|
|
|
Nov 2 2005, 10:18
|

Частый гость
 
Группа: Свой
Сообщений: 152
Регистрация: 11-10-05
Из: Воронеж
Пользователь №: 9 491

|
Цитата(slabnoff @ Oct 26 2005, 20:17) В продолжение... Разбирался тут с родными семафорами в FreeRTOS. Выяснилась неприятная вещь: ежели шлю сигнал через семафор от прерывания, а в некторой задаче жду его время N тиков операционки, например так: Код ISR: .... xTaskWoken=xSemaphoreGiveFromISR(CalcSem,xTaskWoken); ....
Task: .... if(xSemaphoreTake(CalcSem,N) == pdTRUE) { .... } .... то семафор реально захватывается задачей через N тиков операционки, а не сразу после того, как он был послан... В общем по-любому похоже надо свои семафоры заканчивать. Если кому интересно - думаю через месяц закончу, попробую заслать автору FreeRTOS. Если кто хочет потестировать - милости просим. гм. а сам автор это как-нить комментирует? это же глюк, получается?
|
|
|
|
|
Nov 17 2005, 07:47
|

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

|
Цитата(slabnoff @ Oct 26 2005, 19:17)  В общем по-любому похоже надо свои семафоры заканчивать. Если кому интересно - думаю через месяц закончу, попробую заслать автору FreeRTOS. Если кто хочет потестировать - милости просим. Просьба держать в курсе! Я похоже тоже избрал FreeRTOS, как отправную точку для создания более ориентированной на себя системы. Вполне прозрачна на первый взгляд в своей начальной простоте, хорошо читаемые исходники. До сих пор (скоро 15 лет) всегда делал более-менее свое ( в приглядку естественно ), а тут резко пошел на ARM...... Слишком бысто я в эту работу не вольюсь - новый процессор, иннструментарий (правда готовый :-) ) - где-то порядка месяца на разборки :-( в "рабочем порядке". Пока за вчера собрал (IAR) слегка помxав шашкой порт на LPC2124 - живет и общается с внешним миром.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Nov 17 2005, 08:51
|

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

|
Цитата(dxp @ Oct 12 2005, 13:08)  Основной смысл кооперативной ОС - экономия ресурсов (когда их нет или когда их мало и не хватает для реализации целевой функциональности). Если ресурсов хватает, вытесняющая ОС - самое оно. Какой смысл иметь их обе сразу лично мне не понятно. Объясните, пожалуйста? В ресурсах и смысл :-(. Например, телефонная станция - сотни-десятки тысяч абонентов. Процессы обслуживания одного абонента более, чем просты, не требуют много ресурсов но их МНОГО. Кроме этих естественно есть и другие, серьезные. С вытясняющей весь пар уйдет в свисток и ляжет любая система. Можно, естественно написать один процесс, который все эти тысячи и будет обслуживать, а можно и совместить. В реальных случаях сложность сопоставима, но степень прозрачности работы _приложения_ отличается очень сильно. Особенно это выпирает, когда работают несколько людей _разной_ квалификации - лучше я систему сделаю, чем в конце-концов буду расхлебывать чей-то мутный-мутный код.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Nov 17 2005, 11:07
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(zltigo @ Nov 17 2005, 14:51)  Цитата(dxp @ Oct 12 2005, 13:08)  Основной смысл кооперативной ОС - экономия ресурсов (когда их нет или когда их мало и не хватает для реализации целевой функциональности). Если ресурсов хватает, вытесняющая ОС - самое оно. Какой смысл иметь их обе сразу лично мне не понятно. Объясните, пожалуйста?
В ресурсах и смысл :-(. Например, телефонная станция - сотни-десятки тысяч абонентов. Процессы обслуживания одного абонента более, чем просты, не требуют много ресурсов но их МНОГО. Кроме этих естественно есть и другие, серьезные. С вытясняющей весь пар уйдет в свисток и ляжет любая система. Это что ж, на каждого абонента отдельный процесс? Зачем? Вытесняющая ОС имеет главное преимущество - детерминированное время отклика на событие. Если все абоненты равнозначны по приоритету - то их и должен обслуживать один процесс. Если есть разные группы абонентов - например, есть группа VIP, которая должна быть обслужена вперед других, то ее обслуживание поместить в другой процесс с более высоким приоритетом. Только и всего. В общем, при использовании RTOS тоже ведь надо думать и грамотно проектировать систему. В этом случае все прекрасно ложится, ничего "в свисток" не уходит.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Nov 18 2005, 16:43
|

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

|
Цитата(dxp @ Nov 17 2005, 14:07)  Это что ж, на каждого абонента отдельный процесс? Зачем? Процессы ОЧЕНЬ простые, код вылизывается, затрат на переключения контекста практически нет. Лет ...надцать назад была еще одна причина - 8085/Z80 прцессор с 8K очень дорогой ROM, ну RAM было больше и дешевле - 256 процессов и заметная экономия кода. Ну а о том, что можно и по другому - я и сам уже писал, да и делал, но уже на AM186CC. Предстваляю все это себе очень хорошо. В принципе можно считать, что тот самый один процесс, который их всех одинаковых обслуживает является сам по себе небольшим "кооперативчиком" для которого и создастся своя "системка". Пока на подсознательном уровне "хочу", но похоже, что мощность контроллеров растет быстрее, чем я пишу :-) и возможно со всеми эти мелочными заморочками следует завязывать :-).
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Nov 18 2005, 23:40
|

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

|
Цитата(slabnoff @ Nov 2 2005, 15:55)  Наступил на проблему - незаметно съел heap, а у автора IDLE Task создается из vTaskStartScheduler( ) последней! Ну и не хватило памяти под стек и не запустилась, а за ней и шедулер не стартовал и полетело все далеко. Три часа пляски - я уже думал отладчиком пользоваться придется :-). До нехватки памяти я довольно быстро добрался, но думал менеджер памяти шалит - читал-читал.. В общем для профилактики дописал системный вызов xIdleTaskCreate( ) и поставил его перед всеми, а в vTaskStartScheduler( ) для совместимости добавил контроль на запущенную IDLE и создание ее в случае отсутствия. Хотя, наверное, и startup запихнуть можно.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Nov 21 2005, 18:48
|
Группа: Новичок
Сообщений: 7
Регистрация: 23-08-05
Пользователь №: 7 903

|
Тож недавно начал юзать эту ось. Портировал на cx805 (ASIC телефона sgh-c100), работает. Были небольшие замороки с частью startup, исправить несложно. Для меня неудобно, что в ходе переключения контекста вызывается SWI (у меня свои виды на использование этого прерывания). А так, в целом нареканий пока нет.
|
|
|
|
|
Nov 22 2005, 04:08
|

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

|
Цитата(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' как душа пожелает
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|