BeRTOS Development Status
If you are looking for the list of BeRTOS ports or a detailed overview of all modules completeness and stability this is the right place.
BeRTOS is quite stable (it is used in production environments) but it is also a very large project, so all of its parts may not be at the same level.
Table of contents:
- Kernel
- Compilers
- Core Drivers
- MCU Internal peripheral drivers
- Generic CPU independent drivers
- Emulator
- Algorithms
- Graphic subsystem
- Network protocols
- File systems
- Data structures
- Middleware
Kernel
BeRTOS features a cooperative kernel with synchronization primitives.
Embedded systems are mostly I/O bound systems. In these systems the microprocessor/microcontroller spends the most part of its computing power doing... absolutely nothing :-)
Since the system simply waits for external events to happen we decided to implement a strong and robust cooperative kernel with very low memory footprint and high modularity. This allows the kernel to be used on a variety of different CPUs, even the smaller ones. Currently the kernel code is very stable.
Kernel features:
- Cooperative round-robin scheduling.
- Stack process monitor, useful to prevent stack overflows.
- Inter-process messaging system (with very low overhead).
- Binary semaphores.
- Signals.
We have plans to add, as soon as possible, a preemptive scheduler, browse kernel source code.
The kernel has a port layer (a single assembly function) that needs to be reimplemented each time a new CPU is added. Here is a list of currently available CPU family ports:
| CPU Family | Port status |
| ARM | stable |
| Atmel AVR | stable |
| Freescale DSP56800 | unmantained |
| Intel i196 | unmantained |
| PowerPC | emulator only |
| Intel/AMD x86 | emulator only |
| Intel/AMD x86-64 | emulator only |
Compilers
BeRTOS was born as a collection of reusable code snippets. In this perspective it was of primary importance that the code was reusable and well portable.
So, although BeRTOS is primarily intended to be used with open source tools such as GCC, it supports other compilers too. It is possible to develop with BeRTOS on Linux, Windows and Mac.
For every port we have indicated the current compiler used and were to find a suitable development suite:
| CPU Family | Compiler | Linux/Mac Toolchain | Windows Toolchain |
| ARM | GCC | ARM Toolchain (open source) | BeRTOS ARM IDE (open source) |
| ARM | IAR (unmantained) | none | http://www.iar.com (proprietary) |
| AVR | GCC | AVR Toolchain installer (open source) | WinAVR (open source) |
| DSP56800 | CodeWarrior (unmantained) | none | CodeWarrior (proprietary) |
| i196 | fillme | fillme | fillme |
| PowerPC | GCC | use your system GCC | none |
| x86 | GCC | use your system GCC | http://www.mingw.org/ (open source) |
| x86 | MSVC (unmantained) | none | Visual Studio (proprietary) |
| x86-64 | GCC | use your system GCC | none |
Core Drivers
BeRTOS is not only a kernel, it aims to supply full operating system services. To achieve this we need at least some core drivers for every CPU port.
These drivers are: system timer, debug system and serial comm driver.
Here is the list of CPU whose internal core drivers are supported:
| Family | CPU | Core driver status |
| ARM | AT91SAM7S256 | stable |
| ARM | AT91SAM7X128 | stable |
| ARM | AT91SAM7X256 | stable |
| AVR | ATMega8 | stable |
| AVR | ATMega32 | stable |
| AVR | ATMega64 | stable |
| AVR | ATMega103 | stable |
| AVR | ATMega128 | stable |
| AVR | ATMega168 | stable |
| AVR | ATMega1281 | stable |
| DSP56800 | all | unmantained |
| i196 | all | unmantained |
| PowerPC | all | see emulator |
| x86 | all | see emulator |
| x86-64 | all | see emulator |
Adding CPU support for an already present CPU family is quite simple since hardware manufacturers share peripherals design between the same CPU cores.
MCU Internal peripheral drivers
Since BeRTOS aims to supply full operating system services, for every CPU port we try to implement as much drivers as possible. This section covers the current development status for MCU Internal peripheral drivers.
- MCU family: Atmel AVR
Driver Status ADC stable Internal Flash stable UART stable SPI stable Timer stable TWI stable
To get up to date informations look at the AVR drivers source code.
- MCU family: Atmel AT91 ARM
Driver Status UART stable SPI stable Timers stable TWI beta ADC beta PWM beta
To get up to date informations look at the ARM drivers source code.
- MCU family: Freescale DSP56800
Only core drivers are supported.
- MCU family: Intel i196
Only core drivers are supported.
- MCU family: PowerPC
See emulator.
- MCU family: x86
See emulator.
- MCU family: x86-64
See emulator.
Generic CPU independent drivers
BeRTOS supplies a full set of CPU independent generic hardware drivers. To achieve this all drivers are structured to have an hardware abstraction layer (HAL) that isolate CPU specific code and makes porting to new CPU easy. Current driver list:
| Driver | Status |
| ADC API | stable |
| Buzzer | stable |
| Atmel Dataflash | stable |
| I2C EEPROM | stable |
| AT25Fxxx Atmel flash memories | beta |
| FT245RL USB to parallel converter | beta |
| Keyboard | stable |
| Bitbang I2C | stable |
| Displaytech 32122A Graphic LCD | stable |
| DC Motor with PID | stable |
| Alphanumeric LCD | stable |
| MPC41 digital potentiometer | stable |
| NTC | stable |
| TRIAC phase partialization | stable |
| PWM API | beta |
| PCF85974 I2C port expander | beta |
| Serial API | stable |
| Bitbanged SPI | stable |
| TC520 ADC | stable |
| Thermostat | stable |
| System timer API | stable |
| Stepper motor with ramps | stable |
| Watchdog | beta |
To get up to date informations look at the drivers source code.
Emulator
BeRTOS features can be emulated under a Unix system, check DemoApp.
The emulator uses Qt to display emulated I/O devices in a window. It supports task scheduling and a number of other embedded peripherals.
| Emulator | Status |
| timer | stable |
| scheduler | stable |
| keyboard | stable |
| graphical LCD display | stable |
| text LCD display | unmaintained |
| buzzer | unmaintained |
| serial port | unmaintained |
| flash | unmaintained |
| debug console | stable |
Algorithms
In embedded programming sometimes you have to cope with protocols, security systems and things like that. BeRTOS comes in help with a set of optimized portable algorithms:
| Algorithm | Status |
| CRC16 | stable |
| MD2 | beta |
| Cryptographically secure Random Pool | beta |
| Rotating hash checksum | stable |
| TEA (Tiny Encryption Algorithm) | stable |
| Stepper motor ramp generator | beta |
| PID Controller | stable |
| RLE (Run lenght en/decondig) | stable |
To get up to date informations look at the algorithms source code.
Graphic subsystem
BeRTOS also features a complete graphic subsystem, suitable for generating compact yet powerful GUI. This system is composed of several modules ranging from simple graphic primitives to complex menu management functions.
| Module | Status |
| Bitmaps manipulation | stable |
| Lines drawing | stable |
| Rectangles drawing | stable |
| Simple windowing system | stable |
| Proportional & fixed size fonts | stable |
| Text rendering | stable |
| Simple Charts | stable |
| Menus | stable |
To get up to date informations look at the source code in trunk/bertos/gfx, trunk/bertos/gui or trunk/bertos/fonts.
Network protocols
Since BeRTOS can also be used in very tiny systems, some simple communication protocols has been developed.
This is the current status:
| Protocol | Status |
| PocketBus | stable |
| Keytag (for 125KHz transponders) | stable |
| XModem protocol | stable |
For more information take a look at network directory.
File systems
BattFs, a file system specifically planned for embedded platforms, is in the beta stage. The goal is to have a filesystem suitable for little flash and eeprom memories (like dataflash), reliable, robust and capable of wear-levelling the memory pages to increase its life.
Currently you can create files, append data to them but file deletion is still not supported. Wear-levelling is achieved by rotating a page every time it is written. Plans are to add even transactions (a whole write can be performed atomically).
If you want may follow the development looking at the source code.
Data Structures
BeRTOS supplies common data structures, implemented and optimized for low memory footprint and speed.
| Module | Status |
| FIFO | stable |
| Hash table | stable |
| Embedded-optimized dynamic memory allocator | stable |
| Lists | stable |
Middleware
This section covers all BeRTOS modules that for some reason do not have a home yet. Most of them should be moved to algorithms directory.
In the meanwhile, here is the list:
| Module | Status |
| Integers to/from host byte-order conversion | stable |
| Events | stable |
| C++ like exception handling in C | stable |
| Embedded-optimized printf | stable |
| Command shell with history | stable |
As usual, check source code for detailed reference.
