The ChibiOS/RT microkernel supports:
- Preemptive multithreading
- 128 priority levels
- Round-robin scheduling for threads at the same priority level
- Software timers
- Counting semaphores
- Mutexes with support for the priority inheritance algorithm
- Condition variables
- Synchronous and asynchronous Messages
- Event flags and handlers
- Synchronous and asynchronous I/O with timeout capability
- Thread-safe memory heap and memory pool allocators.
- Hardware Abstraction Layer with support for ADC, CAN, GPT (general-purpose timer), EXT, I²C, ICU, MAC, MMC/SD, PAL, PWM, RTC, SDC, Serial, SPI, and USB drivers.
- Support for the LwIP and uIP TCP/IP stacks.
- Support for the FatFs file system library.
All system objects, such as threads, semaphores, timers, etc., can be created and deleted at runtime. There is no upper limit except for the available memory. In order to increase system reliability, the kernel architecture is entirely static, a memory allocator is not required (but is available as an option), and there are no data structures with upper size limits like tables or arrays. The system APIs are designed to not have error conditions such as error codes or exceptions.
The HAL component is meant to be an abstraction layer between the application and the underlying micro-controller hardware.
HAL offers an high level API for accessing common MCU peripheral like GPIO, ADC, SPI and so on and also take care of clocks-related and board-level initializations.
This component is only released only under Apache License 2.0 and is 100% free also for commercial use.
- MCU abstraction between application and hardware accelerates the firmware development allowing a more objective-oriented approach. Hardware inner details are mostly hidden to the application (but not unreachable).
- Support for the most common MCU peripherals.
- Interface layer toward the optional RTOS called OSAL. OSALs can be created in order to support any reasonable RTOS.
- Out of the box support for RT and NIL RTOSes.
- Layered drivers architecture.
- Portable on most modern micro-controllers.