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

 
 
> Пишу ОС РВ, Вот пишу ОС Реального времени, у какого какие предложения? пожелания?
ddiimmaa
сообщение Jan 27 2009, 22:58
Сообщение #1


Участник
*

Группа: Validating
Сообщений: 27
Регистрация: 12-12-08
Из: Ижевск
Пользователь №: 42 419



Знаю, знаю дело не шибко благодарное. И люди могут тухлыми помидорами закидать. "Мол зачем ещё одна ОС?". Развелось тут понимаешь ОСеписателей.

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

В общем моя цель добится примерно анологичной функциональности, но с меньшим числом затрачиваемой RAM ибо эта штука есть очень дефицитная ;-). Ну и сделать как можно открытие, чтобы можно было людям дописывать то, что им нужно самим.

Исходя из выше сказанного -- никаких POSIX, ну и сфера применения МК с ОЗУ от 512 до 256кбайт (ну выше там наверно что другое пойдёт).

У кого какие пожелания?

Наставления?

Мнения?

Вопросы?

что вы скажете по поводу выбора лиценции?

Что кому нравиться не нарвиться в их осях?


--------------------
Вот пишу ОС, может кому пригодиться ;-)
скачайте http://sourceforge.net/projects/irtos/
и вот сайт ещё http://irtos.sourceforge.net/
Go to the top of the page
 
+Quote Post
5 страниц V   1 2 3 > »   
Start new topic
Ответов (1 - 14)
sergeeff
сообщение Jan 28 2009, 00:35
Сообщение #2


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

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



Это для общего развития или сейчас творческий простой?
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jan 28 2009, 05:40
Сообщение #3


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

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



А scmRTOS?
Вроде бы как раз, для дохленьких контроллеров задумана, с полкилом рама, с минимизацией издержек.
Единственный минус (имхо) - написана на плюсах.
Хотя для кого-то это плюс.
По-моему, лучше подключиться к раскрученному проекту, чем начинать собственный с нуля


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jan 28 2009, 07:40
Сообщение #4


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Ну покажите класс. Кто вас знает, мож вы гений. biggrin.gif
512 Kb RAM-а - это очень много. Не советую ориентироваться на такие числа.
Ограничтесь лучше 2-я Кб. Во всяком случае для uCOS, ThreadX, CMX и других мощных осей этого вполне хватает для пары тройки задач.
Вообще-то нынче каждый уважающий себя компилер идет с встроенной RTOS.
У CodeWarrior - MQX, у Keil - RL ARM, у Tasking - OSE, у IAR - PowerPac и т.д

Нужно что-то уникальное у RTOS чтобы не стать посмешищем в этом ряду.

Этой уникальной фичей мог бы стать realtime профайлер.
Все как бы декларируют себя RTOS-ами, но реального тулса для тюнинга приоритетов задач, нарезок временных интервалов активности задач, тюнинга шедулеров в готовом дивайсе никто не предлагает. Всегда нужен PC, софтварный спец агент тормозящий приложение и захватывающий ресурс и IDE online.

Второй уникальной фичей мог бы стать сборщик мусора.
Задачи в момент инициализации могут захватить кучу памяти под разные буфера.
Потом при выгрузке задачи надо долго выискивать где там че было выделено.
Неплохо было бы чтоб все автоматом освобождалось.

Третья уникальная фича - проработка протокола вплоть до физического уровня межпроцессорного обмена.
Это оч востребованная фича, поскольку времена когда все делается на одном проце стремительно уходят.

Ну и еще дальше есть идеи...
Зависит от вашей реакции biggrin.gif



Цитата(ddiimmaa @ Jan 28 2009, 00:58) *
Исходя из выше сказанного -- никаких POSIX, ну и сфера применения МК с ОЗУ от 512 до 256кбайт (ну выше там наверно что другое пойдёт).
У кого какие пожелания?
Наставления?
Мнения?
Вопросы?
Что кому нравиться не нарвиться в их осях?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 28 2009, 09:09
Сообщение #5


Гуру
******

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



Цитата(AlexandrY @ Jan 28 2009, 10:40) *
Второй уникальной фичей мог бы стать сборщик мусора.


Ну а я и не знал, что в свое время походя добавил во FreeRTOS "уникальную" вещь - всего-то в Memory Control Block менежера памяти запоминается адрес TCB задачи его запросившей.

Цитата(ddiimmaa @ Jan 28 2009, 01:58) *
можно сделать немного по другому и немного лучше.

Для "немного" того-другого просто надо доработать ту-же FreeRTOS. Хотели немножко памяти? - небольшие резервы по памяти там прямо под ногами лежат. А при сильно сэкономить и сделать систему под 512 байт, так такая система будет уродлива уже для десяткокилобайтовых...




 


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jan 28 2009, 09:14
Сообщение #6


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
всего-то в Memory Control Block менежера памяти запоминается адрес TCB задачи его запросившей.


LR еще запоминать надо smile.gif Или любой произвольный отладочный параметр, передаваемый malloc'у при таргете Debug.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
VslavX
сообщение Jan 28 2009, 11:26
Сообщение #7


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(Rst7 @ Jan 28 2009, 11:14) *
LR еще запоминать надо smile.gif Или любой произвольный отладочный параметр, передаваемый malloc'у при таргете Debug.

LR? А если это не ARM? smile.gif. Лучше __LINE__ + __FILE__ (по крайней мере, IAR/GCC/MSVC про них знают smile.gif) Например:
Код
#define TN_ASSERT( Value, Text)                                             \
    if (!(Value))                                                           \
    {                                                                       \
        tn_assert( Text, __LINE__, __FILE__);                               \
    }
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jan 28 2009, 11:35
Сообщение #8


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
LR? А если это не ARM?


Ну адрес вызывающей процедуры. Почти на любой платформе можно достать. На самом деле основная болезнь - это поиск того, кто память занял, а не отдал. А ассерты - это другой разговор.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
VslavX
сообщение Jan 28 2009, 11:58
Сообщение #9


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(Rst7 @ Jan 28 2009, 13:35) *
А ассерты - это другой разговор.

Дык, assert - для примера только. smile.gif Я текст с alloc() сразу поленился выложить. Так лучше?
Код
#if (DEBUG == 0)
#define MM_Alloc( a, b)                         \
        MM_AllocFree( a, b)
#else
#define MM_Alloc( a, b)                         \
        MM_AllocDebug( a, b, __LINE__, __FILE__)
#endif

А вот реализация:
Код
PVOID __stdcall
MM_AllocDebug
(
    DWORD   Size,           // size of chunk in bytes
    BOOL    bPaged,         // pageble or nonpageable flag
    DWORD   Line,           // source line number
    PCHAR   File            // source file name
)
{
    PMEM_BLOCK Result;

    Result = (PMEM_BLOCK)_HeapAllocate(
                    Size + sizeof(MEM_BLOCK),
                    bPaged ? HEAPSWAP : 0);
    if (Result == NULL)
    {
        dprintf(PFX "Memory allocation failed\n");
        return NULL;
    }
    
    Result->Size = Size;
    Result->Line = Line;
    Result->File = File;

    Pushfd();
        //
        // First write may cause paging, so we need to
        // disable interrupts again and do operation again.
        // It is not good idea to use the synchronization
        // objects here (it is merely for debug purposes
        // and is potentially dangerous - may cause the
        // deadlock)
        //
        Result->Next = memHeadList;
        Cli();
        Result->Next = memHeadList;
        memHeadList = Result;
    Popfd();
    return &Result->Data[0];
}


Подход очень неплох - когда завершаемся - можно пробежать по списку неосвобожденной памяти и сразу ответить на вопрос "кто виноват". Но есть и минус - когда делаем MM_Free - надо пробежать по списку, найти блок (если не нашли - тоже класс - сразу assert), и удалить из списка. Когда таких блоков много и частые alloc/free - список тормозит. Но для отладки - самое оно.
А в embedded я стараюсь "кучу" не пользовать - у меня обычно ясно сколько объектов будет "в деле" - для них пул блоков фиксированной длины пользуется - в TN Kernel под это дело даже системные вызовы сделаны.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jan 28 2009, 12:04
Сообщение #10


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Подход очень неплох - когда завершаемся - можно пробежать по списку неосвобожденной памяти и сразу ответить на вопрос "кто виноват"


Да кто-ж спорит. Сам такой, самых разных форм и расцветок аналогичный код везде имею. Только вот иногда было бы неплохо и в релизе оставлять возможность ловли гада, а минималистичный вариант - это сохранение адреса вызывающей процедуры.

Конечно, если мельчить задачи, то решение zltigo тоже работает неплохо - если в одной задаче обозримое количество аллокаций. Хотя грань понятия "мельчения" у каждого своя. Кому и 2 аллока - смерть wink.gif


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
VslavX
сообщение Jan 28 2009, 12:17
Сообщение #11


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(Rst7 @ Jan 28 2009, 14:04) *
минималистичный вариант - это сохранение адреса вызывающей процедуры.

А как Вы ищете потом процедуру по этому адресу? Я подсчитал - у меня в TCP за сотню вызовов pbuf_alloc(), по листингам смотреть-считать? Есть автоматизация какая?
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jan 28 2009, 12:28
Сообщение #12


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
А как Вы ищете потом процедуру по этому адресу?


В IDA пробовали грузить .elf-файлы с нестрипнутым debug-info? Дальше все просто, кнопочку G, вводите адрес LR, оценяете, где находитесь.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 28 2009, 12:31
Сообщение #13


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(VslavX @ Jan 28 2009, 15:58) *
Подход очень неплох

Зачем плодить наследованные глупости? Выделяйте память , используя дескрипторы, которые можно располагать в отдельном сегменте. Заодно ответы на вопросы: Дефрагментация? Размер блока? Уборка мусора?

В общем, сейчас закритикуют... Жду wink.gif
Go to the top of the page
 
+Quote Post
VslavX
сообщение Jan 28 2009, 12:42
Сообщение #14


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(Rst7 @ Jan 28 2009, 14:28) *
В IDA пробовали грузить .elf-файлы с нестрипнутым debug-info? Дальше все просто, кнопочку G, вводите адрес LR, оценяете, где находитесь.

Спасибо, про IDA я как-то не подумал, попробую! А для IAR-а тоже сработает?

Цитата(_Pasha @ Jan 28 2009, 14:31) *
Зачем плодить наследованные глупости? Выделяйте память , используя дескрипторы, которые можно располагать в отдельном сегменте. Заодно ответы на вопросы: Дефрагментация? Размер блока? Уборка мусора?

В общем, сейчас закритикуют... Жду wink.gif

Чтобы закритиковать - надо сначало понять что именно Вы предложили smile.gif. Если я правильно поняд - то похожий механизм был в Win16 - это был настоящий ахтунг (имел "счастье" попользоваться) , и не от хорошей жизни его MS предложила. ИМХО, подход "залочь - поюзай - разлочь" не слишком хорош для небольших систем. В реал-тайме вообще чревато проблемами - "мне тут память срочно нужна, а там, пАнимаешь в фоне сборщик мусора работает".
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jan 28 2009, 12:43
Сообщение #15


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
А для IAR-а тоже сработает?


Ага. 4.42 точно стреляет. 5.x - надо проверять, пока не пользую.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 19:05
Рейтинг@Mail.ru


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