/*! \page dev_status 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: \li \ref kernel \li \ref compilers \li \ref core_drivers \li \ref internal_peripherals \li \ref independant_drivers \li \ref emulator \li \ref algorithms \li \ref graphics \li \ref networking \li \ref fs \li \ref data_structures \li \ref mware \section kernel 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 : \li \link coop.c Cooperative \endlink round-robin scheduling. \li \link monitor.h Stack process monitor \endlink, useful to prevent stack overflows. \li \link msg.h Inter-process messaging system \endlink (with very low overhead). \li \link sem.h Binary semaphores \endlink. \li \link signal.c Signals \endlink. We have plans to add, as soon as possible, a preemptive scheduler , browse kernel source code to see the latest additions. 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 \ref emulator only
Intel/AMD x86 \ref emulator only
Intel/AMD x86-64 \ref emulator only
\section compilers 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 Sourcery G++ toolchain (open source) BeRTOS ARM IDE (open source)
ARM IAR (unmantained) none http://www.iar.com (proprietary)
AVR GCC AVR Toolchain installer (open source) BeRTOS AVR IDE (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
\section core_drivers 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 AT91SAM7S64 stable
ARM AT91SAM7S128 stable
ARM AT91SAM7S256 stable
ARM AT91SAM7S512 stable
ARM AT91SAM7X128 stable
ARM AT91SAM7X256 stable
ARM AT91SAM7X512 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 \ref emulator
x86 all see \ref emulator
x86-64 all see \ref emulator
Adding CPU support for an already present CPU family is quite simple since hardware manufacturers share peripherals design between the same CPU cores. \section internal_peripherals 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. \li MCU family: Atmel AVR
Driver Status
\link adc_avr.c ADC \endlink stable
\link flash_avr.c Internal Flash \endlink stable
UART stable
SPI stable
Timer stable
\link i2c_avr.c TWI \endlink stable
To get up to date informations look at the AVR drivers source code. \li MCU family: Atmel AT91 ARM
Driver Status
UART stable
SPI stable
Timers stable
TWI beta
ADC beta
PWM beta
\link i2s_at91.h I2S \endlink digital audio bus stable
To get up to date informations look at the ARM drivers source code. \li MCU family: Freescale DSP56800 Only core drivers are supported. \li MCU family: Intel i196 Only core drivers are supported. \li MCU family: PowerPC See \ref emulator. \li MCU family: x86 See \ref emulator. \li MCU family: x86-64 See \ref emulator. \section independant_drivers 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
\link adc.h ADC API \endlink stable
\link buzzer.h Buzzer \endlink stable
\link dataflash.h Atmel Dataflash \endlink stable
\link eeprom.h I2C EEPROM \endlink stable
\link flash25.h AT25Fxxx Atmel flash memories \endlink beta
\link ft245rl.h FT245RL USB to parallel converter \endlink beta
\link kbd.h Keyboard \endlink stable
\link i2c.h I2C \endlink with bitbang support stable
Displaytech 32122A Graphic LCD stable
\link dc_motor.h DC Motor with PID \endlink stable
\link lcd_text.h Alphanumeric LCD \endlink stable
\link mcp41.h MPC41 digital potentiometer \endlink stable
\link ntc.h NTC \endlink stable
\link phase.h TRIAC phase partialization \endlink stable
\link pwm.h PWM API \endlink beta
\link pcf8574.h PCF85974 I2C port expander \endlink beta
\link sd.h Secure Digital card API \endlink stable
\link ser.h Serial API \endlink stable
\link spi_bitbang.h Bitbanged SPI \endlink stable
\link tas5706a.h TAS5706A \endlink digital audio DSP stable
\link tc520.h TC520 ADC \endlink obsolete
\link thermo.h Thermostat \endlink stable
\link timer.h System timer API \endlink stable
\link stepper.h Stepper motor with ramps \endlink stable
Watchdog beta
To get up to date informations look at the drivers source code. \section emulator 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
file read/write stable
\section algorithms 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
\link crc.h CRC16 \endlink stable
\link md2.c MD2 \endlink beta
\link randpool.c Cryptographically secure Random Pool \endlink beta
\link rotating_hash.h Rotating hash checksum \endlink stable
\link tea.h TEA (Tiny Encryption Algorithm) \endlink stable
\link ramp.h Stepper motor ramp generator \endlink beta
\link pid_control.h PID Controller \endlink stable
\link rle.c RLE (Run lenght en/decondig) \endlink stable
To get up to date informations look at the algorithms source code. \section graphics 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
\link bitmap.c Bitmaps manipulation \endlink stable
\link line.c Lines drawing \endlink stable
\link line.c Rectangles drawing \endlink stable
\link win.h Simple windowing system \endlink stable
Proportional and fixed size fonts stable
\link text.h Text rendering \endlink stable
\link charts.h Simple Charts \endlink stable
\link menu.h Menus \endlink stable
To get up to date informations look at the source code in the directories \b gfx, \b gui or \b fonts. \section networking 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
\link pocketbus.c PocketBus \endlink stable
\link keytag.c Keytag (for 125KHz transponders) \endlink stable
\link xmodem.c XModem protocol \endlink stable
For more information take a look at network directory. \section fs File system The latest SVN version of BeRTOS supports \link fat.h FAT \endlink filesystems using the FatFs library. The module is highly configurable, for example it can be compiled in read-only mode for some space saving. \link battfs.h BattFs\endlink, 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). File system development takes place in the fs directory. \section data_structures Data Structures BeRTOS supplies common data structures, implemented and optimized for low memory footprint and speed.
Module Status
\link fifobuf.h FIFO \endlink stable
\link hashtable.h Hash table \endlink stable
\link heap.h Embedded-optimized dynamic memory allocator \endlink stable
\link list.h Lists \endlink stable
\section mware Middleware This section covers all BeRTOS modules that provide general purpose utility functions. Most of them should be moved to \ref algorithms directory. In the meanwhile, here is the list:
Module Status
\link cpu/byteorder.h Integers to/from host byte-order conversion \endlink stable
\link event.h Events \endlink stable
\link except.h C++ like exception handling in C \endlink stable
\link formatwr.c Embedded-optimized printf \endlink stable
\link readline.h Command shell with history \endlink stable
\link ini_reader.h Ini file reader \endlink stable
As usual, check source code for detailed reference. */