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

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:

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 FamilyPort 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 FamilyCompilerLinux/Mac ToolchainWindows Toolchain
ARMGCCARM Toolchain (open source) BeRTOS ARM IDE (open source)
ARMIAR (unmantained)nonehttp://www.iar.com (proprietary)
AVRGCCAVR Toolchain installer (open source)WinAVR (open source)
DSP56800CodeWarrior (unmantained)noneCodeWarrior (proprietary)
i196fillmefillmefillme
PowerPC GCC use your system GCC none
x86GCCuse your system GCChttp://www.mingw.org/ (open source)
x86MSVC (unmantained)noneVisual 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:

FamilyCPUCore driver status
ARMAT91SAM7S256stable
ARMAT91SAM7X128stable
ARMAT91SAM7X256stable
AVRATMega8stable
AVRATMega32stable
AVRATMega64stable
AVRATMega103stable
AVRATMega128stable
AVRATMega168stable
AVRATMega1281stable
DSP56800allunmantained
i196allunmantained
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
DriverStatus
ADCstable
Internal Flashstable
UARTstable
SPIstable
Timerstable
TWIstable

To get up to date informations look at the AVR drivers source code.

  • MCU family: Atmel AT91 ARM
DriverStatus
UARTstable
SPIstable
Timersstable
TWIbeta
ADCbeta
PWMbeta

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:

DriverStatus
ADC APIstable
Buzzerstable
Atmel Dataflashstable
I2C EEPROMstable
AT25Fxxx Atmel flash memoriesbeta
FT245RL USB to parallel converterbeta
Keyboardstable
Bitbang I2Cstable
Displaytech 32122A Graphic LCDstable
DC Motor with PIDstable
Alphanumeric LCDstable
MPC41 digital potentiometerstable
NTCstable
TRIAC phase partializationstable
PWM APIbeta
PCF85974 I2C port expanderbeta
Serial APIstable
Bitbanged SPIstable
TC520 ADCstable
Thermostatstable
System timer APIstable
Stepper motor with rampsstable
Watchdogbeta

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:

AlgorithmStatus
CRC16stable
MD2beta
Cryptographically secure Random Poolbeta
Rotating hash checksumstable
TEA (Tiny Encryption Algorithm)stable
Stepper motor ramp generatorbeta
PID Controllerstable
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.

ModuleStatus
Bitmaps manipulationstable
Lines drawingstable
Rectangles drawingstable
Simple windowing systemstable
Proportional & fixed size fontsstable
Text renderingstable
Simple Chartsstable
Menusstable

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:

ProtocolStatus
PocketBusstable
Keytag (for 125KHz transponders)stable
XModem protocolstable

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.

ModuleStatus
FIFOstable
Hash tablestable
Embedded-optimized dynamic memory allocatorstable
Listsstable

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:

ModuleStatus
Integers to/from host byte-order conversionstable
Eventsstable
C++ like exception handling in Cstable
Embedded-optimized printfstable
Command shell with historystable

As usual, check source code for detailed reference.