Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: mkernel
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
MBR
Долго пытаясь доработать ртоси под свои нужды, понял, что ничего адекватного на рынке просто не существует и решил написать свою. Вот что получилось:

MKernel is embedded RTOS, based on microkernel architecture.
It's designed for ARM microprocessors, however, can be easily ported to any
32bit MCU.

Features:

- BSD License, royalty free, open source.
- Tickless. For system scheduling used 1 HPET timer and RTC. If RTC is
unavailable, another HPET timer can be used for RTC emulation (with full RTC
functionality)
- Hardware abstraction.RTOS is providing common interface for drivers.
- Standart microkernel syncronization: mutexes, events, semaphores, queues.
- Nested mutex priority inheritance
- Embedded dynamic memory manager, with ability of nested memory pools for
threads, dedicated system pool. Aligned malloc calls inside of any pools
- Safe and MPU ready. All supervisor-specific calls are wrapped around
swi/svc calls for context rising.
- Embedded libraries:
* printf/sprintf. Around 1k of code.
* time routines. POSIX-light
* single-linked list, double linked list, ring buffer, block ring buffer
* random number generation: hardware (if supported) or software
- Error handling:
* kill thread on system error, print error, if configured
* restart system on critical error, memory dump if configured
* handle error exceptions, decode address (if supported) and exception code
- Lot of debug features:
* memory dumps
* object marks
* thread profiling: name, uptime, stack allocated/current/used
* memory profiling: red-markings, pool free/allocated size, objects fragmentation
* stack profiling: supervisor allocated/current/used. Plus for arm7 - irq, fiq, abt
* configurable debug console
- Supported hardware:
* ARM7
* cortex-m3, drivers for:STM32 F2 (gpio, uart, rcc, timer, dma, rand)

Cortex-M3 features:
- Native SVC and pendSV support

ARM7 features:
- Nested interrupts
- FIQ support
- pendSV emulation, when returning to user/system context

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

Ссылка на проект на github: https://github.com/alexeyk13/mkernel
Lotor
Цитата(MBR @ Aug 8 2012, 10:47) *
Долго пытаясь доработать ртоси под свои нужды, понял, что ничего адекватного на рынке просто не существует и решил написать свою.

Можете раскрыть более подробно этот пункт? Чем так Ваша ртос отличается от FreeRTOS, UCOS и других "неадекватных"?
IgorKossak
В папках arch/arm arch/cortex_m3 файлы delay_*.s желательно переименовать в delay_*.S дабы не гневить Eclipse (и ради однообразия тоже).
MBR
Цитата(Lotor @ Aug 8 2012, 10:56) *
Можете раскрыть более подробно этот пункт? Чем так Ваша ртос отличается от FreeRTOS, UCOS и других "неадекватных"?

В сторону ucos я не смотрел принципиально - там gpl и этот недостаток для эмбеда перевесит все остальное.

Основной недостаток Free rtos, tn-kernel и им подобных, на мой взгляд, - тоже идеологический - это очень сильное абстрагирование от архитектуры, поддержка 8битников и т.п., в результате чего возможности аппаратной части используются не на полную. А из конкретных - различия, практически, по всем пунктам. Особенно, использование системных тиков для шедулера задач. Из плюсов free rtos - безусловно, размер кода (правда, если во free rtos включить все, что есть в mkernel, я сомневаюсь, что получится меньше).

Соглашусь, слово "адекватный", пожалуй, слишком грубо.

Цитата(IgorKossak @ Aug 8 2012, 11:10) *
В папках arch/arm arch/cortex_m3 файлы delay_*.s желательно переименовать в delay_*.S дабы не гневить Eclipse (и ради однообразия тоже).

Спасибо за совет, сделаю в следующем коммите. Я делал как раз ради различия, чтобы было понятно, что файл обрабатывается препроцессором или нет.
haker_fox
Знаете, чего мне не хватает во встраиваемой РТОС? Правильно наличия драйверов и стеков USB (host & master), ETH, CAN, MMC/SD (и прочих накопителей) под самые разнообразные архитектуры, GUI очень даже приветствуется с наличием драйверов под разные контроллеры и дисплеи, и чтобы гарантированно работало, т.к. собрать это по кускам из Инета дело не очень сложное. Но не заработает сразу.

Да, самое главное. Лицензия должна быть полностью свободная.

З.Ы. Это был крик души. Я реалист когда надо, и понимаю, что я написал утопию)))
MBR
Цитата(haker_fox @ Aug 8 2012, 12:27) *
Знаете, чего мне не хватает во встраиваемой РТОС? Правильно наличия драйверов и стеков USB (host & master), ETH, CAN, MMC/SD (и прочих накопителей) под самые разнообразные архитектуры, GUI очень даже приветствуется с наличием драйверов под разные контроллеры и дисплеи, и чтобы гарантированно работало, т.к. собрать это по кускам из Инета дело не очень сложное. Но не заработает сразу.

Я двигаюсь именно в эту сторону. Драйверы USB (device, scsi, mass storage), SD-CARD у меня готовы и встроены в mkernel (но не в то, что есть на гитхабе). В добавок есть абстрактный драйвер storage, с конвеером на базе data queue.

Просто на данный момент я не определился с их распространением - если достаточно разовьется идея донаторства, я выложу их в open source, если же нет, буду продавать отдельно.

---
0.1.2

- added examples for STM32 F2
- optimized software rand
- renamed all .s to .S

---

в примере создаются две простейшие задачи - одна моргает светодиодом, другая выводит аптайм каждую секунду. Доступна также встроенная отладочная консоль для профайлинга (помощь - h)
MBR
0.1.3

+ pin keyboard module with debounce logic
! sys_alloc, sys_alloc_aligned, sys_free now supported in SYS context
+ push method for debug console

Приступил к написанию документации. Думаю, к концу сентября будет готово.
haker_fox
QUOTE (MBR @ Aug 15 2012, 17:34) *
0.1.3

+ pin keyboard module with debounce logic
! sys_alloc, sys_alloc_aligned, sys_free now supported in SYS context
+ push method for debug console

Приступил к написанию документации. Думаю, к концу сентября будет готово.

Ну чтож, ОСи всякие нужны, ОСи всякие важны rolleyes.gif
Поздравляю Вас с этой нелегкой работой rolleyes.gif
MBR
Вернулся из отпуска.

0.1.4
+ new module: software timers, running in independent thread
+ keyboard module new functions: keyboard_wait_for_key, keyboard_has_messages
! exception handling improved:
- detection of caller context (SYS/thread), instruction address, caused problem
- if thread context, thread will be terminated, if SYS, system will be restarted
- SVC call while interrupts are disabled error decoded and processed, instead of
general hard fault
- configurable option to halt system on fatal error, instead of rebooting

Также выложена первая версия документации.
_Артём_
Цитата(MBR @ Sep 12 2012, 18:34) *
Вернулся из отпуска.

Кстати, у меня под Yagarto не собралось...
MBR
Цитата(_Артём_ @ Sep 12 2012, 20:32) *
Кстати, у меня под Yagarto не собралось...

Давайте разбираться. Лог? Версия gcc? Я использую codesourcery, как наиболее популярную среду.
_Артём_
Цитата(MBR @ Sep 12 2012, 19:43) *
Давайте разбираться. Лог? Версия gcc? Я использую codesourcery, как наиболее популярную среду.


Вот такой лог:
Цитата
p:\Chuzhoj_cod\alexeyk13-mkernel-fc86765\example\stm32f2>make
makefile:94: яЁхфєяЁхцфхэшх: яхЁхюяЁхфхыхэшх ъюьрэф фы  Ўхыш `.s.o'
makefile:89: яЁхфєяЁхцфхэшх: ёЄрЁ√х ъюьрэф√ фы  Ўхыш `.s.o' шуэюЁшЁє■Єё 
AS_C: ../../arch/cortex_m3/startup_cortexm.s
In file included from ./../../arch/cortex_m3/startup_cortexm.s:31:0:
../../arch/hw_config.h:41:31: fatal error: hw_config_stm32f2.h: No such file or
directory
compilation terminated.
make: *** [startup_cortexm.o] ╬°шсър 1

p:\Chuzhoj_cod\alexeyk13-mkernel-fc86765\example\stm32f2>

Версия:

Цитата
p:\Chuzhoj_cod\alexeyk13-mkernel-fc86765\example\stm32f2>arm-none-eabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-none-eabi-gcc
COLLECT_LTO_WRAPPER=c:/yagarto/bin/../libexec/gcc/arm-none-eabi/4.6.2/lto-wrappe
r.exe
Target: arm-none-eabi
Configured with: ../gcc-4.6.2/configure --target=arm-none-eabi --prefix=/home/ya
garto/install --disable-nls --disable-shared --disable-threads --with-gcc --with
-gnu-ld --with-gnu-as --with-dwarf2 --enable-languages=c,c++ --enable-interwork
--enable-multilib --with-newlib --with-headers=../newlib-1.19.0/newlib/libc/incl
ude --disable-libssp --disable-libstdcxx-pch --disable-libmudflap --disable-libg
omp -v
Thread model: single
gcc version 4.6.2 (GCC)
MBR
Цитата
../../arch/hw_config.h:41:31: fatal error: hw_config_stm32f2.h: No such file or
directory


Собственно, как описано в главе getting started, необходимо скопировать файл hw_config_stm32f2.h из каталога template в рабочий каталог проекта. Путь к нему должен быть прописан в Makefile

Я завтра добавлю его в example. Соглашусь, примеры должны компилироваться без дополнительных настроек.
_Артём_
Цитата(MBR @ Sep 12 2012, 21:13) *
Собственно, как описано в главе getting started, необходимо скопировать файл hw_config_stm32f2.h из каталога template в рабочий каталог проекта. Путь к нему должен быть прописан в Makefile

Нечитал, потому как
Цитата(MBR @ Sep 12 2012, 21:13) *
примеры должны компилироваться без дополнительных настроек.

.

Off: как понять вот это:
Цитата
makefile:94: яЁхфєяЁхцфхэшх: яхЁхюяЁхфхыхэшх ъюьрэф фы Ўхыш `.s.o'
makefile:89: яЁхфєяЁхцфхэшх: ёЄрЁ√х ъюьрэф√ фы Ўхыш `.s.o' шуэюЁшЁє■Єё

?
Хотя бы в общих чертах...
AHTOXA
Цитата(_Артём_ @ Sep 13 2012, 02:21) *
Off: как понять вот это:

Код
makefile:94: предупреждение: переопределение команд для цели `.s.o'
makefile:89: предупреждение: старые команды для цели `.s.o' игнорируются
MBR
Цитата(_Артём_ @ Sep 13 2012, 00:21) *
Нечитал, потому как


Добавил файл в примеры, убрал варнинги при компиляции в windows. Новая версия доступна для скачивания.

Документацию в любом случае нужно посмотреть, потому как, пример мало скомпилировать, его нужно запустить на конкретном железе, в частности, задать:

- mcu
- частоту внешнего кварца, если есть
- rtc, если есть. Если нет - включить эмуляцию на таймере.
- параметры порта и скорости отладочной консоли

для примера также необходимо указать пин светодиода для gpio.

Цитата(AHTOXA @ Sep 13 2012, 06:35) *
Код
makefile:94: предупреждение: переопределение команд для цели `.s.o'
makefile:89: предупреждение: старые команды для цели `.s.o' игнорируются

Все-таки не умеет gcc в windows различать .S и .s. Очень своевременный совет дал Сергей Борщ.

Подправил примеры Makefile. Больше предупреждений быть не должно.
andrew_b
Цитата(MBR @ Sep 13 2012, 08:45) *
Все-таки не умеет gcc в windows различать .S и .s.
gcc тут ни при чём. Это сама венда игнорирует регистр.
MBR
Цитата(andrew_b @ Sep 13 2012, 14:43) *
gcc тут ни при чём. Это сама венда игнорирует регистр.

windows не даст создать файл с тем же именем, но другим регистром. Но средствами windows определить регистр вполне возможно. Поэтому вынужден не согласиться. Тем не менее, все это оффтоп.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.