LINUX.ORG.RU

Вышла BuguRTOS-1.0.0!

 , ,


1

3

Вышла очередная версия встраиваемой операционной системы реального времени BuguRTOS-1.0.0.

BuguRTOS — это ядро ОСРВ, ориентированное для использования на микроконтроллерах, и может работать в режимах мягкого и жесткого реального времени.

Характерными особенностями BuguRTOS являются:

  • Отказ от управления памятью в ядре - рекомендуется статическое выделение памяти.
  • Все системные вызовы имеют сложность O(1).
  • Минимальные требования к размеру стеков процессов (задач).

В данный момент поддерживаются ветки 0.6.x и 1.0.x, поддержка ветки 0.7.х прекращена.

С выходом первой версии проект переходит на семантическое версионирование. BuguRTOS ветки 1.0.х имеет следующие особенности:

  • Обработка прерываний в два этапа: обработчик прерывания выполняет минимальную необходимую обработку, после чего генерирует виртуальное прерывание, которое делает все остальное.
  • Отдельный поток ядра, который обрабатывает виртуальные прерывания и системные вызовы, реализует функции планировщика и работу на холостом ходу.
  • Отказ от традиционных блокирующих примитивов синхронизации в ядре, вместо них есть один обобщенный примитив (bgrt_sync_t), который можно адаптировать под различные задачи.
  • Реализация традиционных примитивов синхронизации в библиотеках, фактически BuguRTOS-1.0.х представляет собой платформу для прототипирования/моделирования API различных ОСРВ.

В данный момент написана библиотека native, реализующая:

  • Мьютексы.
  • Семафоры.
  • Условные переменные.
  • Сигналы (что-то вроде событий).
  • Блокирующий IPC.

В BuguRTOS-1.0.0 произошли следующие изменения:

  • Удален процесс холостого хода и всё, что с ним связано(см. выше).
  • Добавлен слой виртуализации прерываний (см. выше).
  • В дескриптор процесса добавлено поле udata, позволяющее сделать аналог UTCB в L4.
  • Переработан код планировщика.
  • Переработан код диспетчера системных вызовов.
  • Переработан код «циклических» системных вызовов с целью снизить опасность DoS, и количество переключений контекста, подробности.
  • Переработан низкоуровневый код.

В дальнейшем планируется развивать BuguRTOS путем добавления портов на новые архитектуры, новых API, исправления возможных ошибок в коде ядра.

>>> Подробности

★★★

Проверено: leave ()

Ответ на: комментарий от shkolnick-kun

antares примерно в таком же виде как и раньше. Основные фичи более или менее стабильны. Я юзаю antares для своих проектов, но на то, чтобы серьезно доработать библиотеки не хватает времени.

Незаметно присоединяйтесь, граф. jabber/email в профиле ;)

ncrmnt ★★★★★ ()
Последнее исправление: ncrmnt (всего исправлений: 2)
Ответ на: комментарий от shkolnick-kun

Алсо, я смотрю ты там IAR активно саппортишь. У меня для тебя плохие новости: Antares работает на GNU/Make и kconfig-frontends. На винде оно взлетит только с лютым скрипом из под cygwin, и то это практически не тестировалось. Заставить работать можно, но оно просит много windows-way любви, и потребует установку пачки доп. компонентов на винду. И я все еще не уверен, как поведет себя kconfig-frontends.

Сейчас у antares основная платформа: linux/bsd. Mac OS X тестился пару раз эпизодически, должен работать.

Компиляторы: gcc, clang, sdcc Платформы: avr, arm/stm32, esp8266, mips/pic32, 8051/stc, 8051/at89, 8051/nrf24lu1

Как-то так. Короче, чтобы доставить в антарес немного бугуртоса придется хорошенько покрасноглазить.

ncrmnt ★★★★★ ()
Ответ на: комментарий от ncrmnt

Алсо, я смотрю ты там IAR активно саппортишь.

Не активнее, чем все остальное и только на STM8, на остальных процах gcc.

Просто на STM8 не завезли шлангов и гцц., порт sdcc разрабатывается одним человеком, у которого маленький ребёнок, соответственно, нет времени на документацию и нормальное развитие проекта.

Да еще СТ-шники не торопятся добавлять sdcc в этот свой STWD, а без вменяемой среды разработки и документации делать порт бугурта на STM8 SDCC, как то стрёмно.

С AVR вон хлебнул недавно на ардуине без отладки...

Как-то так. Короче, чтобы доставить в антарес немного бугуртоса придется хорошенько покрасноглазить.

Не нужно, мне пока интересно как систему сборки для микроядра b4, а там STM8 не нужен, нужны армы, и наверное MIPS.

shkolnick-kun ★★★ ()
Ответ на: комментарий от shkolnick-kun

Попробовать можно, тем более что я давно хотел в antares добавить опциональное RTOS-ядро из коробки. Потыкай палочкой, пиши если будут вопросы. Я пока антарес с прошлого года не апдейтил - сейчас активно пилю свою универсальную RPC-библиотеку и web сервер с RESTful API к ней. До antares доберусь не раньше, чем закончу, покрою все тестами и начну пилить клиентскую часть.

ncrmnt ★★★★★ ()

Релизная версия... ну теперь-то у меня бомбанет!!!

anonymous ()

Обновлены О. Б. Ч. P.

Эта клоунада - просто клоунада или имеет несет в себе какую-то информацию?

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

Это КАЧАЛОЧКА ПАСХАЛОЧКА.

Там в документации есть шутка про прошивку для роботов.

anonymous ()
Ответ на: комментарий от anonymous

Подождем ответа автора. Если ОС используется в ОБЧР, этот факт нужно отметить, если нет - клоунаду нужно убрать.

tailgunner ★★★★★ ()

Видел эти треды ещё в /с/ нульча :3

anonymous ()

BuguRTOS
пекафейс

Битарды захватывают микроконтроллеры?

cerberus ()

А когда systemd будет? А то как-то ненужно

qI__Ip ()

Новый сезон шуток про двач в каментах считать открытым

makoven ★★★★★ ()

Под stm32 оно собирается gcc-шным кросс-компилером? Штатным x86 clang-ом не получится собрать?

makoven ★★★★★ ()
Ответ на: комментарий от tailgunner

Это пасхалка в назидание глупым людишкам, которые играются с силами, о могуществе которых они не догадываются.

Да, я всё ещё надеюсь сделать мир лучше!

Или хотя бы не хуже...

shkolnick-kun ★★★ ()
Ответ на: комментарий от tailgunner

Ты же понимаешь, что ОБЧР не существует, пока... Но я мог бы создать проект ОБЧР на том же гитхабе с очередного фейкового аккаунта.

shkolnick-kun ★★★ ()
Ответ на: комментарий от makoven

Под stm32 оно собирается gcc-шным кросс-компилером?

Именно так.

Штатным x86 clang-ом не получится собрать?

Поддержкой шланга, да ещё под х86 я не заморачивался, да и зачем?..

shkolnick-kun ★★★ ()
Ответ на: комментарий от shkolnick-kun

зачем?

Чтобы не плодить сущности. Я не силен в теме, но как понимаю, llvm может сгенерить ассемблерный код (или даже obj) для stm. Тогда останется только найти «as» для stm а не тащить весь gcc-тулчейн. Поправьте, если ошибаюсь

makoven ★★★★★ ()
Последнее исправление: makoven (всего исправлений: 1)
Ответ на: комментарий от shkolnick-kun

А разве не в 2008?

Он цитировал видео с немыто-тян.

Zaskard ()
Ответ на: комментарий от makoven

Тогда останется только найти «as» для stm а не тащить весь gcc-тулчейн.

У LLVM нет нормального линковщика, насчет дебагера не помню.

Придётся тащить линковщик, так что сущности расплодятся посильней, чем с чистым gcc-arm-embedded (два пакета вместо одного же!).

Ну и мир не кончается на x86,ARM и MIPS, есть ещё AVR, msp430, tms320c67xx и т.д.

У gcc просто больше список поддерживаемых архитектур.

shkolnick-kun ★★★ ()

Все системные вызовы имеют сложность O(1).

Не вдуплился. Как это?

anonymous ()
Ответ на: комментарий от anonymous

Гугли сложность алгоритма.

Для RTOS модно использовать алгоритмы сложности О(1), даже если О(n) в определенных условиях быстрее.

anonymous ()

init_bugurt();

Как же я проигрываю с этой строки.

t3n3t ()

Поясните, где это используется (на каких микроконтроллерах)?

suiseiseki_desu ()

Все системные вызовы имеют сложность O(1).

очень интересно! а можно пример из кода?

reprimand ★★★★★ ()
Ответ на: комментарий от Manhunt

я спрашивал о ссылке на сам участок кода, в структуре проекта я не разбираюсь чтобы вот так сходу определить и найти нужное

reprimand ★★★★★ ()
Ответ на: комментарий от reprimand

в структуре проекта я не разбираюсь чтобы вот так сходу определить и найти нужное

Кода там не так уж и много, чтобы не осилить разобраться в его структуре.

на сам участок кода

Не совсем понимаю, чего ты хочешь. Тебе подойдёт абсолютно любой участок кода, имеющий сложность O(1) по отношению к количеству существующих в системе нитей и примитивов синхронизации?

Manhunt ★★★★★ ()
Ответ на: комментарий от Manhunt

Кода там не так уж и много, чтобы не осилить разобраться в его структуре.

Почему-то вспоминается менеджерский прикол о соотношении объема кода к объему выполненной работы или сложности задачи

Все познается в сравнении. Тебе легко а мне сложно.
Или я просто не хочу дайвить в код

Не совсем понимаю, чего ты хочешь. Тебе подойдёт абсолютно любой участок кода, имеющий сложность O(1) по отношению к количеству существующих в системе нитей и примитивов синхронизации?

давай посмотрим на оригинальный пост

Все системные вызовы имеют сложность O(1).

не знаю к чему ты приплел нити и примитивы синхронизации. Мне нужен код, представляющий реализацию любого системного вызова со сложностью O(1). Окей, можно код нескольких системных вызовов.

reprimand ★★★★★ ()

BuguRTOS

Это что за покемон?

anonymous ()
Ответ на: комментарий от shkolnick-kun

tms320c67xx и т.д.

tms320c55xx. Под них просто ничего более менее активно развиваемого нет. А мне бы пригодилось.

gag ★★★★★ ()
Ответ на: комментарий от ncrmnt

На винде оно взлетит только с лютым скрипом из под cygwin

А MSYS2?

CYB3R ★★★★★ ()
Ответ на: комментарий от CYB3R

С еще меньшей вероятностью... Хотя... Попробуй, расскажешь.

ncrmnt ★★★★★ ()
Ответ на: комментарий от suiseiseki_desu

Версии 0.6.x нормально летают начиная с AVR и STM8, на STM8 при частоте системного таймера в 1КГц на работу системы отжирается около 10% ресурсов.

Это много, но за счет отказа от автоматного стиля программирования, ресурсы процессора, ВНЕЗАПНО, освобождаются.

На AVR картина должна быть аналогичной, но там я профилирование не делал.

На Cortex-Mx все должно быть проще, ибо частоты выше, так на stm32f405vg при частоте 168МГц и частоте системного таймера 1КГц отжирается уже где-то 0,5%.

shkolnick-kun ★★★ ()
Ответ на: комментарий от reprimand

Ну вот например: https://github.com/shkolnick-kun/bugurtos/blob/master/kernel/sched.c

Глянь, например, функцию bgrt_sched_epilogue (она выбирает следующий процесс для запуска, или не выбирает, если его нет).

Видишь циклы?

Вот то-то же!

И так почти во всем ядерном коде: если есть циклы, то количество итераций жестко ограничено сверху.

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

shkolnick-kun ★★★ ()
Ответ на: комментарий от gag

Твак там же вроде есть SYS/BIOS от тексаса (на самом деле я ненавижу тексас инструментс, компания-антимидас какая-то)?

А свободных средств разработки там вроде нет... так что пока не до них...

shkolnick-kun ★★★ ()
Последнее исправление: shkolnick-kun (всего исправлений: 1)
Ответ на: комментарий от bga_

Это же user syscall, он специально для выполнения произвольного кода!

anonymous ()
Ответ на: комментарий от bga_

ЛОЛ. Открой issue типа граммар наци негодует!

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.