From http://www.chibios.org: ChibiOS/RT is designed for deeply embedded real time
applications where execution efficiency and compact code are important requirements.
This RTOS is characterized by its high portability, compact size and, mainly, by its
architecture optimized for extremely efficient context switching.
- Efficient and portable preemptive kernel.
- Static architecture, everything is statically allocated at compile time.
- Dynamic extensions, dynamic objects are supported by an optional layer built on top
of the static core.
- Rich set of primitives: threads, virtual timers, semaphores, mutexes, condition
variables, messages, mailboxes, event flags.
- Extensive test suite with benchmarks.
- Many supported architectures.
- And many more features, take a look at the ChibiOS/RT page.
The static architecture makes the life a little easier. Here you do not need to setup
e.g. a thread or semaphore count of your project. It does not waste your memory, only
resources are used which are really needed.
Measurement with port pins and oscilloscope
How to measure the context switch time? I will not invent the wheel again, and use the
following methode from SEGGERs web page.
The context switching time is the time between switching the LED on and off. If the
LED is switched on with an active high signal, the context switching time is the time
between rising and falling edge of the signal. If the LED is switched on with an active
low signal, the signal polarity is reversed.
The real context switching time is shorter, because the signal also contains the
overhead of switching the LED on and off. The time of this overhead is also displayed
on the oscilloscope as a small peak right before the task switching time display and
has to be subtracted from the displayed context switching time. The picture below shows
a simplified oscilloscope signal with an active-low LED signal (low means LED is illuminated).
There are switching points to determine:
- A = LED is switched on for overhead measurement
- B = LED is switched off for overhead measurement
- C = LED is switched on right before context switch in low-prio task
- D = LED is switched off right after context switch in high-prio task
The time needed to switch the LED on and off in subroutines is marked as time
tAB. The time needed for a complete context switch including the time
needed to switch the LED on and off in subroutines is marked as time tCD.
The context switching time tCS is calculated as follows:
tCS = tCD - tAB
Context switch time
The switch from one task to the next can be triggered by several synchronisation mechanisms like:
- Event flags
- Mutexes (not measured here)
I hope that here is no typo occurred. All programs which were used here for the test will be
available in the download section. In case you find a problem, send me a note and I will check it.
For the test the following boards were used:
- ARM7: AT91SAM7X-EK (AT91SAM7X256) running at 48 MHz
- Cortex-M3: STM3210E-EVAL (STM32F103ZE) running at 72 MHz
- AVR32: EVK1101 (AT32UC3B0256) running at 60 MHz
- Nios II/f: Altera DE1 (Cyclone II) running at 100 MHz
- Cortex-A8: BeagleBone (AM3359) running at 720 MHz
And for the Compiler:
- ARM7 / Cortex-M3 / Cortex-A8: CrossWorks for ARM (v2.3.0)
- Atmel AT91SAM7 CPU Support Package (v1.13)
- STMicroelectronics STM32 CPU Support Package (v2.15)
- Texas Instruments Sitara CPU Support Package (v1.0)
- AVR32: AVR Studio 22.214.171.1241
I think this should be all of the background informtion you need to reproduce the
test on your desk too.
If you need more information, please don't hesitate to ask.
ChibiOS/RT v2.4.3 was used for the ARM7, CM3, Nios II and Cortex-A8 test.
The AVR32 test was made with an older version, v2.2.0.
Context switch time in µs (last update 14.02.2013):
The ARM7 test was done in Thumb mode. The ARM7 and Cortex-M3 port was
optimized by the author of ChibiOS/RT. The AVR32 port
was my first port for ChibiOS,
therefore it could be possible that the AVR32 port is not the fastest one. The Cortex-A8
test was done in
I do not know why you should select ChibiOS.
I was searching for a free OS which can be used in private projects. Here
I found the following candidates:
Nut/OS, I have
used this system in some of my AVR projects
before, and even some ARM pages (1,
2) exists. Therefore, I want to play with
a new one. This was not a technical decision, I wanted to see whether I could find a new
personally I have got the book "MicroC/OS-II
The Real-Time Kernel" (2nd edition). The book comes with source code (of an older version
of µC/OS-II, the book is some years old) and I could really recommend this book if you
want to learn something about an OS. But if I want to make my complete project public,
this is not allowed. Because it is not allowed to publish the source of the OS itself.
µC/OS-II is an comercial OS and therefore the restriction is full acceptable. Btw, a
project page exists here too.
embOS is not a free OS.
TNKernel, here I have created a
project page too.
FreeRTOS, perhaps this is the right
OS for me? It is licensed under the GPL and therefore I can make my complete project public,
inclusive the source of the OS itself. But unfortunately there is a GPL Exception, Clause 2
FreeRTOS may not be used for any competitive or comparative purpose,
including the publication of any form of run time or compile time metric, without the express
permission of Real Time Engineers Ltd. (this is the norm within the industry and is intended
to ensure information accuracy).
I do not like this exception, and therefore it is not the correct OS for me.
ChibiOS/RT, after a while
I stumbled over ChibiOS/RT. Now there are two new toys available at my desk, ChibiOS/RT
and an AVR32 EvalBoard. The idea was to create an AVR32 port and compare the speed against
ARM and Cortex-M3.
As you can see, there exist a lot of OS systems there. You must decide by your own which is
the perfect OS for your requirements. Speed is not everything. Even the following aspects
should be taken into account as well:
- Is the source code needed for your project?
- How fast is the support?
- Are there other components needed for your projects, which may be available from the
same manufacturer, like a File System or TCP/IP Stack?
- Is a commercial RTOS a must,
or can an OpenSource version be used?
The zip files do not contain a full ChibiOS/RT version. Even I have made some little
modification to get the examples compiled with CrossWorks for ARM. For an original version of ChibiOS/RT take a
look at the following page.
chibios-speed-arm7-243-20130203 (495 KB)
chibios-speed-m3-243-20130203 (533 KB)
Here is the Cortex-A8 port with the test suite and the benchmark projects.
The new version is now tested with the "IRQ-STORM". I will call it release candidate.
chibios-v243-test-bb-20130214 (433 KB)
chibios-speed-a8-243-20130214 (1.41 MB)
chibios-v243-bb-20130330 example with HAL, PAL and SERIAL (518 KB)
And here are the Quartus II 11.1 projects. The port for the Altera DE1 Board
with the test suite, the benchmarks results and the projects for the several speed test.
The SOPC system is included in each project. For more information about Nios II and ChibiOS/RT
take a look at this page.
chibios-v243-test-de1 (522 KB)
chibios-speed-de1-243 (533 KB)
Here is the SAM3N / SAM3S / SAM3U patch for ChibiOS/RT.
chibios-v228-sam3-patch-20120107 (304 KB)
And here are the AVR32 Studio projects. The port for the EVK1101 with the test
suite, the benchmarks results and the projects for the several speed test.
chibios-v220-test-evk1101-uc3b0256 (291 KB)
chibios-speed-sema-evk1101-220 (292 KB)
chibios-speed-msg-evk1101-220 (291 KB)
chibios-speed-mbox-evk1101-220 (292 KB)
chibios-speed-flags-evk1101-220 (293 KB)